我正在使用Android Studio 0.4.2。使用0.3.2的朋友打开项目。试图编译但得到例外。
Execution failed for task ':JuiceTV:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
C:\Program Files\Android\android-studio\sdk\build-tools\19.0.0\dx.bat --dex --output D:\Antik TV - Android\JuiceTV\build\libs\JuiceTV-debug.dex D:\Antik TV - Android\JuiceTV\build\classes\debug D:\Antik TV - Android\JuiceTV\build\dependency-cache\debug D:\Antik TV - Android\JuiceTV\build\pre-dexed\debug\classes-ffe9228b675e120536184b1056a59fcfc91e4006.jar D:\Antik TV - Android\JuiceTV\build\pre-dexed\debug\commons-io-2.4-27f1277ba9e42db4b52f3f658da01a26db29b896.jar D:\Antik TV - Android\JuiceTV\build\pre-dexed\debug\joda-time-2.2-4549e2440d188ee3fb4f85702e03eace13e8ad18.jar D:\Antik TV - Android\JuiceTV\build\pre-dexed\debug\mmlib-04a4fd100008bfbc84f0c25fd219e50eb7de9d0b.jar D:\Antik TV - Android\JuiceTV\build\pre-dexed\debug\support-v4-18.0.0-ba816fc3ae00ee0fdb20e5444c1d8bb88647d773.jar
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/sevensoft/mmlib/AttachedOverlayWindow$1;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:593)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:551)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:532)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:169)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:187)
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)
试过这件事:
JuiceTV Gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.7.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 18
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 14
targetSdkVersion 18
}
}
dependencies {
compile project(':TVbase')
}
BaseTv Gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.7.+'
}
}
apply plugin: 'android-library'
repositories {
mavenCentral()
}
android {
compileSdkVersion 18
buildToolsVersion '19.0.0'
defaultConfig {
minSdkVersion 14
targetSdkVersion 18
}
}
dependencies {
compile 'com.android.support:support-v4:18.0.+'
compile files('libs/joda-time-2.2.jar')
compile files('libs/mmlib.jar')
compile files('libs/commons-io-2.4.jar')
}
有任何新提示吗?
答案 0 :(得分:18)
我遇到了同样的问题,我发现我的应用程序和库指的是同一个jar的2个版本。
我进行了搜索,我的application.iml文件清楚地显示了重复项。
<orderEntry type="library" exported="" name="crittercism_v3_0_11_sdkonly" level="project" />
<orderEntry type="library" exported="" name="crittercism_v4_4_0" level="project" />
我用旧的v3版本替换了v4版本,它在干净的重建之后工作。
答案 1 :(得分:6)
当模块依赖于另一个模块和同一个模块的jar时会发生这种情况。
答案 2 :(得分:2)
我在android studio 1.0上遇到过这个问题,除了删除库的重复条目之外,你还应该尝试删除bin文件夹并进行干净的构建。
答案 3 :(得分:2)
从Android Gradle 1.0开始,这可能会发生在以下几个方面:
如果您只使用Maven repos,如果两个不同的工件包含相同的类文件,则可能会遇到此问题。
例如,Mockito-all库包含Hamcrest,因此如果在构建中包含两个依赖项,则会导致此错误。
请注意,如果您打开缩小功能,则在开始使用Hamcrest之前不会看到错误。解决此问题的方法是使用不包含其他包类的库的版本(在本例中为Mockito-core)。
如果您声明本地jar / aar 依赖关系(compile 'com.some.library:some-artiface-version_number@aar'
)已被其他基于maven的依赖关系所包含。
/>
在这种情况下,您的本地声明不会被Maven删除,因为pom信息不可用。您通常会为aar创建一个基于文件的本地maven仓库以解决此问题。
在任何一种情况下,都需要清理项目以获取更改。
答案 4 :(得分:1)
在启用dexOptions时禁用multiDex和增量也会导致此问题。
defaultConfig {
multiDexEnabled = false
}
dexOptions {
javaMaxHeapSize "4g"
incremental true
}