簡體   English   中英

在Android Studio上執行app:dexDebug錯誤

[英]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);
   }

什么是您的logcat投擲

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 ManagerAndroid SDK Build Tools工具和Android支持存儲庫更新到最新版本

設置應用程序開發項目以使用multidex配置需要對應用程序開發項目進行一些修改。 特別是,您需要執行以下步驟:

  1. 更改您的Gradle構建配置以啟用Multidex
  2. 修改清單以引用MultiDexApplication類

修改您的應用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM