Инструменты сборки 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"
}
}