Android MultiDex:永远的救赎是必不可少的

时间:2017-09-07 20:00:47

标签: android android-support-library multidex android-multidex

这个问题是连续尝试克服appDebugAssemble失败构建的四天漫长痛苦之旅的后果。我通过使用术语" multidex"来查找谷歌投给我的超级大量主题/文章。但无济于事。

最近,我开始使用Android Studio 3.0 Beta 4,并相应地将SDK版本更新为Android O版本。除此之外,我还使用了AS3b4和Gradle 4.1-all,到目前为止,我非常享受新的更新。

四天前,我决定将Firebase Analytics和Messaging添加到我的项目及其向南的位置。为了简洁起见,我已经尝试了超过30种方法,建议(以及SO上接受的答案)关于如何配置MultiDex,并且由于所有都没有使构建通过,我到达了一个状态我开始相信有一种咒语施加在我身上,特别是在我将我的应用程序发布到Play商店的时候。我也阅读并重读了这篇文章https://developer.android.com/studio/build/multidex.html

毋庸置疑,但您的共同智慧将受到高度赞赏,如果出现了潜在的解决方案,我非常肯定它会阻止很多开发人员变得大胆,或者被抨击靠墙。现在关闭我的胸部,这是我的配置细节

app.gradle

apply plugin: 'com.android.application'
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
    minSdkVersion 19
    targetSdkVersion 26
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.config
    }
    debug {
        minifyEnabled false
        debuggable true
        useProguard false
    }
}
dexOptions {
    javaMaxHeapSize "4g"
    preDexLibraries = false
}

dependencies {
    ...
    implementation 'com.android.support:multidex:1.0.2'
}
apply plugin: 'com.google.gms.google-services'

自定义MyApp课程

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

期待这个丰富的人才群体能够丰富我和其他患有同样流行病的人。谢谢!

修改 完全忘了粘贴错误日志。这就是我所面对的:

  

出了什么问题:

     

任务执行失败':app:transformDexArchiveWithExternalLibsDexMergerForDebug'。

     

> java.lang.RuntimeException:com.android.builder.dexing.DexArchiveMergerException:无法合并dex

1 个答案:

答案 0 :(得分:1)

好吧,我想我的研究可能会持续一段时间,但我几乎感到绝望。我终于设法解决了这个问题,所以我发布它以供将来参考,因为我意识到我们中有很多人在我们的应用程序中实现MultiDexing的困难。

我的实际问题是 Google Play服务库的重复版本。我正在使用Facebook Audience Network SDK,它依赖于com.google.android.gms:play-services-ads:10.0.4,而我的Firebase实施依赖于11.2.2。

问题在于,除非你提醒自己仔细查看你的库所依赖的依赖关系,否则你真的无法解决这个问题,因为就像@AlexLipov上面说的那样“错误日志过于通用”。我的灯泡在GitHub上从this comment点亮了。

总而言之,基本上遵循官方MultiDex guide,如果弹出类似的问题,请给出一个峰值以识别潜在的依赖冲突,然后执行以下操作以强制他们相应地使用最新版本。

implementation('com.facebook.android:audience-network-sdk:4.25.0') {
    exclude group: 'com.google.android.gms'
}

值得一提的是,运行gradle --stacktrace有助于缩小问题范围。 This might come in handy too

P.S。谢谢和亚历克斯的叮当声。