多个dex文件定义<my package>/BuildConfig,找不到原因:

Posted

技术标签:

【中文标题】多个dex文件定义<my package>/BuildConfig,找不到原因:【英文标题】:Multiple dex files define <my package>/BuildConfig, can't find the cause: 【发布时间】:2014-09-26 00:26:17 【问题描述】:

我正在使用新的 gradle 构建系统,但遇到以下问题:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/kibo/mobi/BuildConfig;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
    at com.android.dx.command.dexer.Main.run(Main.java:230)
    at com.android.dx.command.dexer.Main.main(Main.java:199)
    at com.android.dx.command.Main.main(Main.java:103)

打印依赖我什么都看不到,这里是:

 firstDebugCompile - ## Internal use, do not manually configure ##
 \--- KiboGradle:KiboSDK:unspecified
 +--- KiboGradle:TextInputAPI:unspecified
 +--- KiboGradle:VoiceImeUtils:unspecified
 +--- com.google.android.gms:play-services:5.0.77
 |    \--- com.android.support:support-v4:19.1.0
 +--- com.squareup.picasso:picasso:2.3.2
 +--- com.google.code.gson:gson:2.2.4
 \--- com.crittercism:crittercism-android-agent:4.5.1

我试图验证问题不是重复的支持库所以我尝试添加:

compile ('com.google.android.gms:play-services:5.0.77')
    exclude module: 'support-v4'

这导致无法找到某些 support-v4 库类的错误,因此无法从任何其他位置编译此库。

我想到的可能导致此问题的一件事是,我在 oreder 中使用 Flavors 功能来创建具有不同资源文件的应用程序的多个版本。

当我查看错误中的文件时,我看到:

**
* Automatically generated file. DO NOT MODIFY
*/
package com.kibo.mobi;

public final class BuildConfig 
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String PACKAGE_NAME = "com.kibo.mobi.test.official";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "liverpool";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "1.0";

所以文件的包和String值中指定的包是不一样的。

任何人都可以看到我的配置中可能导致此问题的任何问题吗?

【问题讨论】:

这也发生在我身上。有趣的是,从命令行构建成功,只有在从 Studio 运行时才会失败 【参考方案1】:

在我的情况下发生了类似的错误,因为在 AndroidManifest.xml 文件中有 2 个具有相同包名的模块。在模块中使用不同的包名解决了这个问题。

当一个库 jar 作为依赖项被包含在多个模块中两次(或多次)时,也会发生同样的事情。在这种情况下,错误消息说明了以该库的包名称命名的重复配置。我通过将库作为依赖项包含在一个模块中来解决它,而第二个模块依赖于第一个模块。

【讨论】:

对了,我得把库的build目录删掉。清理而不是删除它... 我在构建 android 库时遇到了这个问题。我有两个具有相同包名的模块(一个库模块和一个示例应用程序模块)。我能够通过重命名其中一个模块的包名称来解决问题。 我花了 1.5 天才发现这一点。【参考方案2】:

将此添加到您的 build.gradle:

android 
    dexOptions 
        preDexLibraries = false
    

我想这样不会有冲突的BuildConfig.java

编辑:

为什么上述工作: Android Studio 将首先 dex 库,然后再对应用程序模块进行 dex 处理。如果您有一个与您的应用程序模块具有相同包名的库模块,则此“预 dexing”将导致在与应用程序相同的包中创建 BuildConfig.java

注意:'pre-dexing' 将 slow down your build process a bit 所以我建议您改为更改库的包名称。

【讨论】:

它对我有用。我不确定使用这种方法是否会产生后果,但它确实有效。非常感谢!!!! 谢谢!它救了我的命))))))简单地更改库包名称。 不幸的是,这对我不起作用。如果我更改基本模块名称,那么 com.google.gms.google-services 会失败。该死! 非常感谢!这个答案对我有用,你拯救了我的一天,我的生命。 'dexOptions(Action&lt;DexOptions&gt;): Unit' is deprecated. Setting dexOptions is obsolete.【参考方案3】:

对我来说,只需对项目进行清理即可清除此错误。

【讨论】:

【参考方案4】:

我在签署我的 instant apk 时遇到了这个问题。 问题:

错误的模块/app/manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.***">

好: 模块/app/manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.***.app">

只需在包名末尾添加 .app

【讨论】:

【参考方案5】:

如果使用 NewRelic,则至少将其更新为 5.21.1

【讨论】:

以上是关于多个dex文件定义<my package>/BuildConfig,找不到原因:的主要内容,如果未能解决你的问题,请参考以下文章

无法执行dex:多个dex文件定义了Lcom/myapp/R$array;

无法执行dex:多个dex文件定义了Lorg/apache/cordova/App$1

多个 dex 文件定义 Lcom/google/firebase/FirebaseException

如何修复将字节码转换为 dex 的错误原因:com.android.dex.DexException:多个 dex 文件定义 Lorg/apache/http/conn/ssl/AbstractVer

多个dex文件定义Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat

多个 dex 文件定义 Lorg/apache/cordova/BuildHelper