我在Mac OS X上运行Android Studio 1.4。一直运行正常,直到我从管理器更新了一些SDK,然后当我尝试编译我的应用程序时,我得到以下错误。
我的gradle设置
compileSdkVersion 22
buildToolsVersion '22.0.1'
错误:
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/Users/Haroon/Desktop/adt-bundle-mac-x86_64-20140321/sdk/build-tools/22.0.1/dx --dex --no-optimize --output /Users/Haroon/Desktop/ShopFront-Android/app/build/intermediates/dex/debug --input-list=/Users/Haroon/Desktop/ShopFront-Android/app/build/intermediates/tmp/dex/debug/inputList.txt
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502)
at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277)
at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
at com.android.dx.command.dexer.Main.run(Main.java:246)
at com.android.dx.command.dexer.Main.main(Main.java:215)
at com.android.dx.command.Main.main(Main.java:106)
更新
我正在尝试在我的应用中实现TabLayout
,如果我排除了支持设计库,那么该应用会编译:
compile 'com.android.support:design:22.2.0'
答案 0 :(得分:1)
我认为你达到了dex方法计数限制(65,536计数)。
您可以在defaultConfig中添加它来修复它
multiDexEnabled true
这是你的依赖
compile 'com.android.support:multidex:1.0.1'
最后将它安装在Application类
中 @Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
答案 1 :(得分:1)
com.android.dex.DexIndexOverflowException:方法ID不在[0, 0xffff]:65536 在com.android.dx.merge.DexMerger $ 6.updateIndex(DexMerger.java:502) 在com.android.dx.merge.DexMerger $ IdMerger.mergeSorted(DexMerger.java:277) 在com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491) 在com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168) 在com.android.dx.merge.DexMerger.merge(DexMerger.java:189) 在com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
Gradle available in Android SDK Build Tools 21.1
及更高版本的Android插件支持multidex作为构建配置的一部分。在尝试为 multidex 配置应用之前,请务必使用SDK管理器 将 Android SDK构建工具工具和Android支持存储库更新到最新版本强>
设置应用开发项目以使用multidex配置需要您对应用开发项目进行一些修改。特别是您需要执行以下步骤:
修改您的应用Gradle构建文件配置以包含支持库并启用multidex输出。
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
阅读官方文件 MultiDex
如果您的Application类正在扩展其他类并且您不想或不能更改它, override attachBaseContext()
,如下所示:
public class MyApplication extends MultiDexApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
虽然该库在大多数情况下修复了DEX 64K问题,但应该如此 被视为最后的手段。在尝试使用它之前,你应该这样做 审核您的项目是否存在不需要的依赖项,并删除未使用的项 使用ProGuard尽可能使用代码。
答案 2 :(得分:0)
您已超过65536的方法限制。 您需要在应用程序中启用Multidex。
将compile 'com.android.support:multidex:1.0.1'
添加到您的依赖项。
此外,您需要在 build.gradle 中将multidex enabled设置为true。
defaultConfig {
applicationId "xxxxxxxxxxxx"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
multiDexEnabled true
}
如果你有一个Application类,那么使用MultiDexApplication而不是Application扩展id。 如果没有,则将其添加到清单中的应用程序标记中,如:
<?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>
有关详细答案,请参阅This。