天天看點

合并兩個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:)
                                at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:)
                                at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:)
                                at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:)
                                at com.spd.ehr.activity.login.LoginActivity.initView(LoginActivity.java:)
                                at com.spd.ehr.activity.BaseActivity.onCreate(BaseActivity.java:)
                                at android.app.Activity.performCreate(Activity.java:)
                                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:)
                                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:)
                                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:)
                                at android.app.ActivityThread.access$600(ActivityThread.java:)
                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:)
                                at android.os.Handler.dispatchMessage(Handler.java:)
                                at android.os.Looper.loop(Looper.java:)
                                at android.app.ActivityThread.main(ActivityThread.java:)
                                at java.lang.reflect.Method.invokeNative(Native Method)
                                at java.lang.reflect.Method.invoke(Method.java:)
                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:)
                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:)
                                at dalvik.system.NativeStart.main(Native Method)
           

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

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

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