J'utilise les paramètres ci-dessous via gradle
:
compileSdkVersion 21
Android_BUILD_MIN_SDK_VERSION=14
Android_BUILD_TARGET_SDK_VERSION=21
Android_BUILD_TOOLS_VERSION=21.0.2
Android_BUILD_SDK_VERSION=21
J'ai également les paramètres suivants dans mon fichier Gradle:
compile 'com.Android.support:support-annotations:21.0.0'
compile 'com.Android.support:appcompat-v7:21.0.0'
compile 'com.Android.support:support-v4:21.0.0'
J'ai toujours l'erreur UNEXPECTED TOP LEVEL EXCEPTION
.
Mais quand je fais le 21.0.0
à 20.0.0
ça marche très bien ... mais je ne peux accéder à aucune des Android API 21. Y a-t-il un problème que je me trompe ici? Comment puis-je le compiler sans cette exception? Je n’ai les bocaux d’appui nulle part ailleurs en dehors des autres projets (facebook, etc.).
Voici la trace de pile complète:
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:283)
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:302)
at com.Android.dx.command.dexer.Main.run(Main.Java:245)
at com.Android.dx.command.dexer.Main.main(Main.Java:214)
at com.Android.dx.command.Main.main(Main.Java:106)
Ce message semble indiquer que votre projet est trop volumineux.
Vous avez trop de méthodes. Il ne peut y avoir que 65536 méthodes pour dex .
Depuis le plugin Gradle 0.14.0 et Build Tools 21.1.0, vous pouvez utiliser le support multidex .
Ajoutez juste ces lignes dans le build.gradle
:
Android {
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.Android.support:multidex:1.0.1'
}
Également dans votre Manifest
ajouter la classe MultiDexApplication
de la bibliothèque de support multidex à l'élément d'application
<?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>
Si vous utilisez une propre classe Application
, changez la classe parente de Application
à MultiDexApplication
.
1) ajouter une dépendance au fichier build.gradle de l'application
compile 'com.Android.support:multidex:1.0.2'
2) Si vous ne remplacez pas la classe Application, modifiez votre fichier manifeste pour définir Android: name dans la balise comme suit:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.myapp">
<application
Android:name="Android.support.multidex.MultiDexApplication" >
...
</application>
</manifest>
Si vous remplacez la classe Application, changez-la pour étendre MultiDexApplication (si possible) comme suit:
public class MyApplication extends MultiDexApplication { ... }
Ou bien, si vous substituez la classe Application mais qu'il n'est pas possible de modifier la classe de base, vous pouvez alors remplacer la méthode attachBaseContext () et appeler MultiDex.install (this) pour activer multidex:
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
3) Ajoutez le support multidex à defaultConfig à build.gradle
defaultConfig {
...
minSdkVersion 16
targetSdkVersion 26
...
// Enabling multidex support.
multiDexEnabled true
}
...
Soit la solution est trop grosse (utilisez MultiDex), soit vous compilez et incluez dans votre projet des choses inutiles. J'ai eu ce problème sur mon petit projet. Voici ce que j'ai fait pour le réparer:
J'ai enlevé ceci de build.gradle
:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
Et j'ai manuellement supprimé mon dossier de construction à la racine de l'application. Problème résolu.
Suivez this guide pour contourner la limite de 65K.
J'ai résolu ce problème en réglant multiDexEnabled true
et prolonger mon application avec class MyApp extends MultiDexApplication
J'ai fait face à ce problème lorsque j'ai compilé l'intégralité du package des API de services Google Play dans mon application. J'ai résolu le problème en utilisant une API sélective.
Par exemple, pour inclure uniquement les API Google Fit et Android Wear, remplacez la ligne suivante dans votre fichier build.gradle:
compile 'com.google.Android.gms:play-services:11.0.2'
avec ces lignes:
compile 'com.google.Android.gms:play-services-fitness:11.0.2'
compile 'com.google.Android.gms:play-services-wearable:11.0.2'
Le problème est expliqué dans la suite lien .
D'abord, assurez-vous que la minification est activée dans app/build.cradle
:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
debug {
signingConfig signingConfigs.config
}
}
Si cela ne résout pas le problème, activez multidex build pour votre application.
J'ai simplement commenté la compilation filetree(include: ['*.jar'], dir: 'libs')
dans le build.gradle
fichier (comme suggéré ci-dessus) et reconstruit le projet. Compilé sans aucune erreur. Je n'ai pas eu besoin de déplacer des dossiers.