Android MultiDex:永远的拯救势在必行

Android MultiDex:永远的拯救势在必行,android,android-support-library,android-multidex,Android,Android Support Library,Android Multidex,这个问题是连续四天痛苦的尝试克服失败构建的结果。我读过大量的主题/文章,谷歌通过查找任何带有“multidex”一词的内容向我抛出,但都没有用 最近,我开始使用Android Studio 3.0 Beta 4,并根据Android O build版本更新了SDK版本。除此之外,我正在使用带有Gradle 4.1-all的AS3b4,到目前为止,我非常享受新的更新 四天前,我决定将Firebase分析和消息传递添加到我的项目中,这就是我的项目失败的原因。为了简单起见,我已经尝试了30多种建议(并

这个问题是连续四天痛苦的尝试克服失败构建的结果。我读过大量的主题/文章,谷歌通过查找任何带有“multidex”一词的内容向我抛出,但都没有用

最近,我开始使用Android Studio 3.0 Beta 4,并根据Android O build版本更新了SDK版本。除此之外,我正在使用带有Gradle 4.1-all的AS3b4,到目前为止,我非常享受新的更新

四天前,我决定将Firebase分析和消息传递添加到我的项目中,这就是我的项目失败的原因。为了简单起见,我已经尝试了30多种建议(并接受了答案)中关于如何配置MultiDex的方法,而且由于所有这些方法都没有通过构建,我开始相信我身上有一个咒语,特别是在我即将发布应用程序到Play Store的时候。我也读了一遍又一遍

不用说,但是你在这里的共同智慧将得到极大的赞赏,如果出现一个潜在的解决方案,我非常肯定它将阻止许多开发人员变得大胆,或者脑袋撞到墙上。现在我已经说出了这些,下面是我的配置细节

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


好吧,我想我可以忍受我的研究更长一点,但我几乎感到绝望。我终于设法解决了这个问题,所以我还是把它贴出来供将来参考,因为我意识到我们中有很多人实际上很难在我们的应用程序中启用多重索引

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

问题是,除非你提醒自己仔细查看你的库所依赖的依赖关系,否则你真的没有办法弄清楚这一点,因为正如@AlexLipov在上面所说的“错误日志太笼统了”。我的灯泡从GitHub上点亮了

总之,基本上按照官方的说法,然后如果出现类似的问题,给出一个峰值来确定潜在的依赖冲突,然后执行以下操作,迫使他们相应地使用最新版本

implementation('com.facebook.android:audience-network-sdk:4.25.0') {
    exclude group: 'com.google.android.gms'
}
最后值得一提的是,运行
gradle--stacktrace
有助于缩小问题的范围


另外,谢谢你和Alex的来电。

你的错误是什么。张贴日志我很糟糕,我已经用我收到的错误日志更新了问题。谢谢。@Xhezairi您提供的日志错误太一般了。它只是说发生了什么,但不是为什么。寻找根本原因。例如,这其中的一个根本原因是
多个dex文件定义{classname}
。你说得对@AlexLipov,我偶然发现了这个评论,并给了我一个线索。如果这是完成这项任务的合适方法,请在下面发布答案以供将来参考。