Android MultiDex:永远的拯救势在必行
Android MultiDex: an all time salvation is imperative
这个问题是连续尝试克服 appDebugAssemble 失败构建的四天漫长而痛苦的旅程的结果。我已经阅读了相当多的 topics/articles google 通过查找带有术语 "multidex" 的任何东西扔给我但无济于事。
最近我开始使用 Android Studio 3.0 Beta 4 并将 SDK 版本相应地更新为 Android O build 版本。除此之外,我还在 Gradle 4.1-all 中使用 AS3b4,到目前为止,我非常享受新的更新。
四天前,我决定将 Firebase Analytics 和 Messaging 添加到我的项目中,而这正是它走向南方的地方。为简洁起见,我已经尝试了 30 多种关于如何配置 MultiDex 的建议(并接受了关于 SO 的答案)的方法,并且由于所有方法都没有使构建通过,我正在达到我开始的状态相信我被施了咒语,尤其是在我即将向 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'
自定义MyAppclass
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
期待这个人才济济的社区能为我和其他患有同样流行病的同胞带来什么。谢谢!
编辑:
完全忘了粘贴错误日志。这就是我面临的问题:
What went wrong:
Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
好吧,我想我的研究还能再坚持一段时间,但我几乎感到绝望了。我终于设法解决了这个问题,所以我还是将其发布以供将来参考,因为我意识到我们中的很多人实际上都在为在我们的应用程序中启用 MultiDexing 而苦苦挣扎。
我的实际问题是 Google Play Service 库的重复版本。我正在使用 Facebook Audience Network SDK,它依赖于 com.google.android.gms:play-services-ads:10.0.4
,而我的 Firebase 实现依赖于 11.2.2.
问题是,除非您提醒自己详细查看您的库所依赖的依赖项,否则您真的无法弄清楚这一点,因为就像@AlexLipov 上面所说的 "the error log is too generic"。我的灯泡从 this comment 开始在 GitHub 点亮。
总结一下,基本按照官方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。感谢 Alex 的参与。
这个问题是连续尝试克服 appDebugAssemble 失败构建的四天漫长而痛苦的旅程的结果。我已经阅读了相当多的 topics/articles google 通过查找带有术语 "multidex" 的任何东西扔给我但无济于事。
最近我开始使用 Android Studio 3.0 Beta 4 并将 SDK 版本相应地更新为 Android O build 版本。除此之外,我还在 Gradle 4.1-all 中使用 AS3b4,到目前为止,我非常享受新的更新。
四天前,我决定将 Firebase Analytics 和 Messaging 添加到我的项目中,而这正是它走向南方的地方。为简洁起见,我已经尝试了 30 多种关于如何配置 MultiDex 的建议(并接受了关于 SO 的答案)的方法,并且由于所有方法都没有使构建通过,我正在达到我开始的状态相信我被施了咒语,尤其是在我即将向 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'
自定义MyAppclass
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
期待这个人才济济的社区能为我和其他患有同样流行病的同胞带来什么。谢谢!
编辑: 完全忘了粘贴错误日志。这就是我面临的问题:
What went wrong:
Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
好吧,我想我的研究还能再坚持一段时间,但我几乎感到绝望了。我终于设法解决了这个问题,所以我还是将其发布以供将来参考,因为我意识到我们中的很多人实际上都在为在我们的应用程序中启用 MultiDexing 而苦苦挣扎。
我的实际问题是 Google Play Service 库的重复版本。我正在使用 Facebook Audience Network SDK,它依赖于 com.google.android.gms:play-services-ads:10.0.4
,而我的 Firebase 实现依赖于 11.2.2.
问题是,除非您提醒自己详细查看您的库所依赖的依赖项,否则您真的无法弄清楚这一点,因为就像@AlexLipov 上面所说的 "the error log is too generic"。我的灯泡从 this comment 开始在 GitHub 点亮。
总结一下,基本按照官方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。感谢 Alex 的参与。