Инструменты сборки 21.1.2 - НЕОЖИДАННОЕ ИСКЛЮЧЕНИЕ НА ВЫСОКОМ УРОВНЕ

Я внезапно сталкиваюсь с этой проблемой при сборке / запуске моего проекта.

Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    /Users/aidanfollestad/Documents/android-sdk/build-tools/21.1.2/dx --dex --no-optimize --output /Users/aidanfollestad/Android Projects/Impression/app/build/intermediates/dex/debug --input-list=/Users/aidanfollestad/Android Projects/Impression/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)

Мой файл Gradle содержит это:

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.14.+'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'versionPlugin'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.afollestad.impression"
        minSdkVersion 16
        targetSdkVersion 21
        versionCode 19
        versionName "0.7.0"
    }
}

repositories {
    mavenCentral()
    maven { url 'https://maven.fabric.io/public' }
}

dependencies {
    compile 'com.android.support:appcompat-v7:21.0.+'
    compile 'com.android.support:recyclerview-v7:21.0.+'
    compile 'com.koushikdutta.ion:ion:2.0.+'
    compile 'com.github.chrisbanes.photoview:library:1.2.+'
    compile 'com.afollestad:material-dialogs:0.4.5'
    compile 'com.google.android.gms:play-services:6.5.87'

    compile 'com.google.api-client:google-api-client:1.18.0-rc'
    compile 'com.google.api-client:google-api-client-android:1.18.0-rc'
    compile 'com.google.api-client:google-api-client-gson:1.18.0-rc'
    compile 'com.google.apis:google-api-services-drive:v2-rev152-1.19.0'

    compile('com.crashlytics.sdk.android:crashlytics:2.1.0@aar') {
        transitive = true;
    }
}

versionPlugin{
    buildTypesMatcher = 'release'
    supportBuildNumber = false
    fileNameFormat = '$appPkg-v$versionName-$versionCode'
}

Моя библиотека материалов-диалогов ссылается только на AppCompat-v7, ту же версию, на которую ссылается этот файл Gradle. У меня нет файлов JAR в папке libs, на которые я ссылаюсь. Я понятия не имею, какие библиотеки мешают друг другу (кроме возможности Play Services и AppCompat?). Есть идеи или решения?

Я заметил Ion ссылки v4 из библиотеки поддержки ( https://github.com/koush/ion/blob/master/ion/build.gradle), может быть, это может мешать AppCompat?

3 ответа

Решение

Попробуйте включить multidex build.gradle:

android {
   defaultConfig {
      ...
      multiDexEnabled = true
   }
}

Ref: Невозможно выполнить dex: ID метода не в [0, 0xffff]: 65536

Вы можете достичь лимита в 65к методов. Вместо использования multiDex, попробуйте использовать Сервисы Google Play с большей детализацией. Следуйте этому руководству, вы можете использовать только те части, которые вам нужны. Возможно, это решит вашу проблему.

Это исключение показывает, что ваш проект достиг максимального количества методов 65536. Вы просто выполняете следующую работу. Это сработало для меня

Шаг 1:
внутри build.gradle

      defaultConfig {  
       multiDexEnabled = true 
      }

Шаг 2:

тег приложения внутри манифеста

  android:name="android.support.multidex.MultiDexApplication" 

   or

Шаг 3: если вы используете класс, который расширяет приложение, тогда выполните:

 public class MyApplication extends Application { 
   @Override 
   protected void attachBaseContext(Context base) { 
    super.attachBaseContext(base); 
    MultiDex.install(this); 
    } 
    }

Шаг 4:

внутри build.gradle

  android{
    dexOptions { 
    incremental true 
    javaMaxHeapSize "4g" 
    }
   }
Другие вопросы по тегам