Android库项目com.android.dex.DexException:多个dex文件定义Lcom / google / gson / JsonSerializer

时间:2016-08-10 13:37:56

标签: android dependencies android-gradle aar

我正在Android Studio中编写一个库项目。我的gradle文件包括gson凌空游戏服务等...
在我的项目中嵌入我的库时,我得到了:

  

com.android.dex.DexException:多个dex文件定义Lcom / google / gson / JsonSerializer;

有人可以解释创建图书馆项目时gradle的工作原理吗? 我应该解释集成我的SDK的开发人员,排除模块如何工作,以及为什么它不适用于包含我的应用程序的应用程序?

3 个答案:

答案 0 :(得分:6)

有两种情况需要考虑

  • 首先,如果您已在app / build.gradle中声明 Gson ,请考虑将其删除

    依赖{    编译'com.google.code.gson:gson:2.4' }

  • 其次,如果你还没有在app/build.gradle中声明它 您可能需要调查哪些库具有重复声明Gson 依赖。然后你可以从该库中排除Gson。 您可以查看此Excluding transitive dependencies

在这里,我将提供一个从库中排除appcompat-v7的示例

运行此命令以查看依赖关系图表树

./gradlew app:dependencies

它将显示依赖关系树,如下面的示例

|    \--- com.mikepenz:materialdrawer:4.6.3
|         +--- com.android.support:appcompat-v7:23.1.1 (*)
|         +--- com.android.support:recyclerview-v7:23.1.1 (*)
|         +--- com.mikepenz:materialize:0.5.1
|         |    \--- com.android.support:appcompat-v7:23.1.1 (*)
|         +--- com.mikepenz:iconics-core:2.5.3
|         |    \--- com.android.support:appcompat-v7:23.1.1 (*)
|         \--- com.android.support:support-annotations:23.1.1

找到库后声明重复依赖。你可以开始排除它。

dependencies {
    compile("com.mikepenz:materialdrawer:4.6.3") {
        exclude module: 'appcompat-v7'
    }
}

答案 1 :(得分:0)

dx的--multi-dex选项与pre-dexing库项目不兼容。因此,如果您的应用程序使用库项目,则需要先禁用pre-dexing,然后才能使用--multi-dex。

OR

更新您的IDE

答案 2 :(得分:0)

如果您无法选择删除GSON,请在build.gradle文件中尝试使用enablin multidex支持:

android {
   ...
   ...
         defaultConfig {
             ...
             ...
             // Enabling multidex support.
             multiDexEnabled true
         }
}