我們需要把兩個app 合並在一起,就是在原有項目基礎上添加一個功能使用。如下有項目a和項目b:
一開始,我們把項目b獨立成一個module,然后,作為一個庫給項目a調用。
問題是,項目b 已有的application、activity和重復的包, 這個需要怎樣解決呢?
項目b的application 是可以和項目a的application合並在一起的,但是activity ,就需要想辦法,問題是 只有主要項目才有activity?普通項目是沒有的??
后來,由於沒把握,就還是采用傳統方法,直接分離項目b ,資源文件放在res , java文件放在src,application 合並在一起,androidmanifest合並在一起。
1.主要遇到的問題是:
(1)由於引入的第三方庫最低支持版本高於項目A的最低支持版本,因此會提示:
Error:Execution failed for task ‘:app:processDebugManifest’.
> Manifest merger failed : uses-sdk:minSdkVersion 8 cannot be smaller than version 9 declared in library [jp.wasabeef:blurry:1.0.0] /Users/xxx/xxx/app/build/intermediates/exploded-aar/jp.wasabeef/blurry/1.0.0/AndroidManifest.xml
Suggestion: use tools:overrideLibrary=”jp.wasabeef.blurry” to force usage
解決方案:提高第三方庫的最低支持版本或者降低項目A的最低支持版本,或者根據提示直接使用 use tools:overrideLibrary =“xxx.xxx.xxx” 來解決問題
(2)由於導入的jar 包有重復,因此會提示:
解決方案:找到重復的包,然后刪除了
(3)由於沒有分配足夠的內存給應用,因此出現了
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
解決方案:在build.gradule 添加了
dexOptions{javaMaxHeapSize "2g"}
(4)App的所有代碼都在一個Dex文件里面,Dex的方法數控制在0到65536間,如果Dex 里的方法數過多的話,會導致不能運行。因此,根據官方的說法,需要 a.在gradule.gradule 的defaultConfig中添加
multiDexEnabled true
b.在application 中添加這段(之前是把方法分離了,然后需要再合並到同一個application上)