標籤:
我們需要把兩個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上)
@Override
protected void attachBaseContext(Context base)
{
super.attachBaseContext(base);
MultiDex.install(this);
}
主要的問題,也是如上,總的來說,對於android studio 的很多認識,比如快速鍵,gradule、module、project的認識,調試的使用,都是不熟悉,需要自己逐步提升對android studio的認知(可以多參考官方文檔)
兩個app 的合并