我使用作为工具一部分提供的新项目模板在Android Studio中构建了一个新项目。所有代码都是由Studio生成的,我还没有做任何修改。
我正在尝试运行代码但是应用程序失败并出现以下错误,不确定问题是什么,所以任何帮助表示赞赏。
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v7/app/ActionBar$Callback;
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)
FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
C:\Users\RichardKavanagh\AppData\Local\Android\android-sdk\build-tools\19.0.1\dx.bat --dex --output D:\Android\Projects\MyHealthRecord\app\build\libs\app-debug.dex D:\Android\Projects\MyHealthRecord\app\build\classes\debug D:\Android\Projects\MyHealthRecord\app\build\dependency-cache\debug D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\android-support-v7-appcompat-5a78dab7e2789bbe64f4bc80d106ca75c04dcf6f.jar D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\classes-f9b947272e9f33ba50355b52d82755584f9c0c58.jar D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\support-v4-19.0.0-31a2c13df80d37d62ca50fec3bde6da0ca706223.jar
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v7/app/ActionBar$Callback;
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)
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 12.948 secs
答案 0 :(得分:118)
与其他人在此处所说的一样,支持库(com.android.support
)在您的项目中被多次包含。尝试在根级别build.gradle
添加此内容,它应该排除通过其他项目依赖项导出支持库。
configurations {
all*.exclude group: 'com.android.support', module: 'support-v4'
}
如果您在依赖项中包含多个支持库,则可能需要删除其中一个:
答案 1 :(得分:18)
dependencies {
compile 'com.android.support:support-v4:19.1.+'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
如果libs文件夹中有支持jar,则会发生冲突。 如果项目libs文件夹中有支持jar,并且已添加模块依赖项以编译com.android.support:support-v4:13.0。+'将抛出UNEXPECTED_TOPLEVEL_DEPENDANCY异常。
答案 2 :(得分:9)
因为您可能在项目中包含两个相同的库。 检查你的build.gradle文件。
dependencies {
compile 'com.android.support:appcompat-v7:+'
compile files('libs/android-support-v4.jar')
}
如果您的文件包含编译'com.android.support:appcompat-v7:+'
和compile files('libs/android-support-v4.jar')
,则会出现此问题。
删除这句话:编译文件(' libs / android-support-v4.jar')
我是如何解决这个问题的。
答案 3 :(得分:8)
如果在build.gradle的依赖项中包含多个相同的库/目录,则会发生错误。好吧,假设您有一个如下所示的App结构:
所以你有主“应用程序”,然后你有一堆子应用程序/模块/库。这些库是:1)gene_test_library,2)genes_nine_old_androids_library,& 3)swipe_list_view_library。
我的名字是Gene,所以这就是为什么有这些“基因”库。
在“app”的build.gradle中,我有:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:21.0.0'
compile project(':libraries:gene_test_library')
//compile project(':libraries:genes_nine_old_androids_library')
compile project(':libraries:swipe_list_view_library')
}
在gene_test_library的build.gradle中,我什么都没有:
dependencies {
}
在gene_nine_old_androids_library的build.gradle里面,我有:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.0'
}
swipe_list_view_library的build.gradle内部,我有:
dependencies {
compile 'com.nineoldandroids:library:2.4.0+'
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.0'
}
这行代码“编译fileTree(dir:' libs',包括:[' * .jar'])”只是意味着“嘿,看看'libs'文件夹在这个模块里面的任何jar文件。我在任何模块的libs文件夹中都没有任何内容,因此您可以忽略该行代码。
所以让我说我取消注释//编译项目(':libraries:genes_nine_old_androids_library') 在“app”模块的build.gradle中。然后我会得到“意想不到的顶级异常:”错误。这是为什么?
好吧,在build.gradle中为“app”编写//编译项目(':libraries:genes_nine_old_androids_library')与获取“genes_nine_old_androids_library”模块的构建依赖项并将其放在那里相同。因此取消注释// compile项目(':libraries:genes_nine_old_androids_library')语句,“app”模块的build.gradle变为:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:21.0.0'
compile project(':libraries:gene_test_library')
***compile fileTree(dir: 'libs', include: ['*.jar'])***
***compile 'com.android.support:appcompat-v7:21.0.0'***
compile project(':libraries:swipe_list_view_library')
}
注意现在“编译' com.android.support:appcompat-v7:21.0.0'”如何显示2x。这就是错误的来源。
答案 4 :(得分:5)
我找到了这个问题的2个原因:
有时是因为多个包含的库。例如,您添加
compile' com.nineoldandroids:library:2.4.0'
在你的gradle中添加另一个它也使用的库" nineoldandroids"在它的gradle!
如果您构建了Android应用并收到此错误,那么恭喜您,您有很多代码!
那么,为什么?
Dalvik可执行规范将单个DEX文件中可引用的方法总数限制为65,536,包括Android框架方法,库方法和您自己代码中的方法。超过此限制要求您配置应用程序构建过程以生成多个DEX文件,称为多索引配置。
那你该怎么办?
避免65K限制 - 如何?
把
multiDexEnabled true
在Gradle构建文件的defaultConfig,buildType或productFlavor部分。
2.在清单中,将Multidex支持库中的MultiDexApplication类添加到应用程序元素中。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
注意:如果您的应用使用扩展Application类,则可以覆盖attachBaseContext()方法并调用MultiDex.install(this)以启用multidex。有关更多信息,请参阅MultiDexApplication参考文档。
此代码也可以帮助您:
dexOptions {
javaMaxHeapSize "4g"
}
放入你的gradle(android {...})。
答案 5 :(得分:4)
大家好我有同样的问题,这是由我在尝试解析集成时包含的重复支持版本4文件引起的。删除了libs目录中的额外包含,现在工作正常!
答案 6 :(得分:3)
当一个库被编译两次(即它被添加两次)时会发生这种情况。它可以是支持库或任何其他,无所谓
常见的情况是您添加了一个已在libs/
目录中的库的编译语句。所有*.jar
文件都是自动编译的。因此,添加编译语句会导致错误。删除该语句可能会解决此问题。如果这不适用,那么我们已经有了一些很棒的答案。
答案 7 :(得分:3)
这可能是最愚蠢的答案,但这对我有用:
注意:没有编译过我的图书馆两次。
答案 8 :(得分:2)
确保已下载Support Repository以在build.gradle中使用支持库依赖项。
如果已经安装了所有这些,则使用可用按钮一次将项目与gradle同步。
答案 9 :(得分:0)
在我的情况下,TOP LEVEL EXCEPTION因为项目路径中的特殊字符而被抛出。刚关闭项目,将“á”改为“a”并重新打开项目。作品!
答案 10 :(得分:0)
突然间,我的项目没有任何重大变化,我也遇到了这个错误。
以上所有内容对我都不起作用,因为我需要支持库V4和V7。
最后,因为2小时前编译的项目没有任何问题,我只是告诉Android Studio REBUILD项目,错误消失了。
答案 11 :(得分:0)
当我尝试为我的应用程序构建已签名的apk时,我遇到了类似的问题。
奇怪的是,只有当我想构建一个发布 apk时才会发生这种情况,而在调试 apk上,一切正常。
最后,看一下这个帖子,我在build.gradle中检查了支持库重复并删除了所有重复,但这还不够......
我必须做清洁项目,但最后我才开始工作。
答案 12 :(得分:0)
我知道问题已得到解答,但这可能会再次发生,我的解决方案与我发现的解决方案略有不同。就我而言,解决方案与我的项目中包含两个不同的库无关。请参阅以下代码:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
此代码提供了该错误&#34;意外的顶级异常&#34;。 我修复了代码,进行了以下更改:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
答案 13 :(得分:0)
我在build gradle中添加了这些问题解决了我的问题:
defaultConfig {
multiDexEnabled true
dependencies {
compile 'com.android.support:multidex:1.0.0'
另一种解决方案可以删除不必要的库