1. 程式人生 > >合併兩個app時遇到的問題

合併兩個app時遇到的問題

專案中遇到了需要將其他已經上線App引入到我們的app中,然後我們app首頁提供入口,採用方案(Module引入來依賴)

合併過程中遇到的問題:

  • Error: Configuration with name ‘default’ not found in Android Studio
    1.兩個APP,A和B;把B作為一個Library的module匯入A的project中;修改B的 build.gradle 檔案,最上面改為apply plugin: ‘com.android.library’
    2.將B中引用的Module都單獨拿出來放到A下面與B平級
  • Error:Library projects cannot set applicationId. applicationId is set to ‘com.coolweather.android’ in default config.
    兩個APP,A和B;把B作為一個Library的module匯入A的project中;刪除B的build.gradle 中的applicationId

  • Error:Execution failed for task ‘:app:transformClassesWithDexForDebug’ non-zero exit value 2

//在app的build.gradle裡面新增下面這句即可
android {
    defaultConfig {
        multiDexEnabled true
    }
}
  • Error:Execution failed for task ‘:app:transformClassesWithDexForDebug’ non-zero exit value 3
//在app.bulid裡面加上這句,再rebuild ,之後再執行就行了。4g可以看電腦配置修改(2g,3g,6g,8g)
dexOptions {
    javaMaxHeapSize "4g"
}
  • B中的Application中有一些初始化的操作,如果合併到A的APP中,那麼啟動app就只會走A的Application,那麼B中的Application中的初始化就無用了,導致有的地方使用到的就會報錯;
    嘗試了在A的Application初始化時候初始化B,但是一直沒有找到合適的方法,並且修改起來程式碼耦合比較高,最後想到A的Application繼承B的Application,子類初始化時候預設初始化父類,這樣兩個Application就都能初始化了

  • 刪除B專案中清單檔案中的main入口

  • 刪除B專案中的applicationId

  • java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$layout (沒有直接報com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536)

java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$layout
                                at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:419)
                                at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:312)
                                at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:277)
                                at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
                                at com.spd.ehr.activity.login.LoginActivity.initView(LoginActivity.java:56)
                                at com.spd.ehr.activity.BaseActivity.onCreate(BaseActivity.java:42)
                                at android.app.Activity.performCreate(Activity.java:5211)
                                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1151)
                                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2341)
                                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
                                at android.app.ActivityThread.access$600(ActivityThread.java:171)
                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
                                at android.os.Handler.dispatchMessage(Handler.java:107)
                                at android.os.Looper.loop(Looper.java:194)
                                at android.app.ActivityThread.main(ActivityThread.java:5468)
                                at java.lang.reflect.Method.invokeNative(Native Method)
                                at java.lang.reflect.Method.invoke(Method.java:525)
                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:936)
                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
                                at dalvik.system.NativeStart.main(Native Method)

65536解決方案具體見連結:65536解決方案

  • 另外注意:A 中應用B(B作為被依賴的module),A可以呼叫B中的東西,但是B中不能呼叫A中的東西

因為某些原因,這個需求最後就取消了,這裡僅此記錄當時的這些問題;這裡的問題如果對你有幫助,那最好,如果上述中間有問題,可以留言評論,謝謝