BEN*_*der 81 android android-studio
我使用作为工具一部分提供的新项目模板在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
Run Code Online (Sandbox Code Playgroud)
iTa*_*oid 117
像其他人在这里所说的那样,支持库(com.android.support
)在您的项目中不止一次被包含.尝试build.gradle
在根级别添加它,它应该排除通过其他项目依赖项导出支持库.
configurations {
all*.exclude group: 'com.android.support', module: 'support-v4'
}
Run Code Online (Sandbox Code Playgroud)
如果您在依赖项中包含多个支持库,则可能需要删除其中一个:
小智 18
dependencies {
compile 'com.android.support:support-v4:19.1.+'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
Run Code Online (Sandbox Code Playgroud)
如果libs文件夹中有支持jar,则会发生冲突.如果您的项目libs文件夹中有支持jar,并且您已添加模块依赖项以编译'com.android.support:support-v4:13.0.+',则将抛出UNEXPECTED_TOPLEVEL_DEPENDANCY异常.
因为您可能在项目中包含两个相同的库.检查你的build.gradle文件.
dependencies {
compile 'com.android.support:appcompat-v7:+'
compile files('libs/android-support-v4.jar')
}
Run Code Online (Sandbox Code Playgroud)
如果你的文件包括编译'com.android.support:appcompat-v7:+'
和compile files('libs/android-support-v4.jar')
,它都会有这个问题.删除这句话:编译文件('libs/android-support-v4.jar')
这就是我解决这个问题的方法.
如果在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')
}
Run Code Online (Sandbox Code Playgroud)
在gene_test_library的build.gradle中,我什么都没有:
dependencies {
}
Run Code Online (Sandbox Code Playgroud)
在gene_nine_old_androids_library的build.gradle里面,我有:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.0'
}
Run Code Online (Sandbox Code Playgroud)
在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'
}
Run Code Online (Sandbox Code Playgroud)
这行代码"编译fileTree(dir:'libs',包括:['*.jar'])"只是意味着"嘿,看看这个模块里面的'libs'文件夹中的任何jar文件.我在任何模块的libs文件夹中都没有任何内容,因此您可以忽略该行代码.
所以,让我说取消注释// compile project(':libraries:genes_nine_old_androids_library')在"app"模块的build.gradle中.然后我会得到"意想不到的顶级异常:"错误.这是为什么?
好吧,在build.gradle中为"app"编写// compile project(':libraries:genes_nine_old_androids_library')与获取"genes_nine_old_androids_library"模块的构建依赖关系并将其放在那里相同.因此,取消注释// compile project(':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')
}
Run Code Online (Sandbox Code Playgroud)
请注意现在"编译'com.android.support:appcompat-v7:21.0.0'"如何显示2x.这就是错误的来源.
我发现了这个问题的2个原因:
有时它是因为多个包含的库.例如,你添加
编译'com.nineoldandroids:library:2.4.0'
在你的gradle中添加另一个库,它也使用"nineoldandroids"在它的gradle中!
如果你已经构建了一个Android应用程序并收到此错误,那么恭喜你,你有很多代码!
所以为什么?
Dalvik可执行规范将单个DEX文件中可引用的方法总数限制为65,536,包括Android框架方法,库方法和您自己的代码中的方法.超过此限制要求您配置应用程序构建过程以生成多个DEX文件,称为多索引配置.
那你该怎么办?
避免65K限制 - 如何?
放
multiDexEnabled true
Run Code Online (Sandbox Code Playgroud)
在Gradle构建文件的defaultConfig,buildType或productFlavor部分中.
2.在清单中,将Multidex支持库中的MultiDexApplication类添加到application元素中.
<?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>
Run Code Online (Sandbox Code Playgroud)
注意:如果您的应用程序使用扩展Application类,则可以覆盖attachBaseContext()方法并调用MultiDex.install(this)以启用multidex.有关更多信息,请参阅MultiDexApplication参考文档.
此代码也可以帮助您:
dexOptions {
javaMaxHeapSize "4g"
}
Run Code Online (Sandbox Code Playgroud)
放入你的gradle(android {...}).
归档时间: |
|
查看次数: |
101453 次 |
最近记录: |