[英]app:dexDebug error on Android Studio
我在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'
我認為您達到了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);
}
com.android.dex.DexIndexOverflowException:方法ID不在[0,0xffff]中:65536在com.android.dx.merge.DexMerger $ 6.updateIndex(DexMerger.java:502)在com.android.dx.merge.DexMerger $ com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)處的com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)處的IdMerger.mergeSorted(DexMerger.java:277) .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
和更高版本中提供的Gradle available in Android SDK Build Tools 21.1
Android插件支持multidex作為構建配置的一部分。 在嘗試為Multidex配置應用程序之前,請確保使用SDK Manager將Android SDK Build Tools工具和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刪除盡可能多的未使用代碼。
您已經超過了65536的方法限制。您需要在應用程序中啟用Multidex。
將compile 'com.android.support:multidex:1.0.1'
添加到您的依賴項中。
你也需要設置你的build.gradle能夠真正multidex。
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 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.