2016-07-12 22 views
2

Ich habe hier ein kleines Problem, wenn ich eine APK im Android Studio aufbauen will bekomme ich diese Fehlermeldung:Ich kann meine App wegen .dex-Dateifehler nicht erstellen. (Android)

Error:The number of method references in a .dex file cannot exceed 64K. 

Erfahren Sie, wie Sie dieses Problem zu beheben, bei https://developer.android.com/tools/building/multidex.html

Error:Execution failed for task ':app:transformClassesWithDexForDebug'. 
com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: 
java.util.concurrent.ExecutionException: 
com.android.ide.common.process.ProcessException: 
org.gradle.process.internal.ExecException: 
    Process 'command '/usr/local/java/jdk1.8.0_77/bin/java'' finished with non-zero exit value 2 

ich fand eine Antwort auf die Stackoverflow diese Abhängigkeit in meiner Gradle Datei zu kompilieren gesagt:

compile 'com.android.support:multidex:1.0.0' 

aber, dass di funktionierte nicht.

Hier ist meine Gradle Datei:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.4.0' 
    compile 'com.android.support:design:23.4.0' 
    compile 'com.android.support:support-v4:23.4.0' 
    compile 'com.google.android.gms:play-services:9.0.2' 
    compile 'com.android.support:multidex:1.0.0' 
} 
+0

prüft dieses Thema: http://stackoverflow.com/questions/26925264/android-support-multidex-library-implementation – Rafal

+0

Android Entwickler Link, den Sie erwähnt haben, deckt alle Sachen über 64k Grenze. Und yeap, Sie müssen definitiv multiidex Unterstützungsbibliothek einschließen. Aber zuerst aktivieren Sie einfach proguard und schauen Sie, wie es Ihnen helfen wird, –

+0

Bitte [Bearbeiten], um Ihre Build.Gradle-Datei anzuzeigen, und wir können Ihnen sagen, einige große Bibliothek zu entfernen. Einschließlich vieler Bibliotheken ist ein Anti-Muster in Android-Entwicklung –

Antwort

3

Sie müssen in Ihrer Anwendung das Multidexing aktivieren, indem Sie das Flag multiDexEnabled in Ihrem build.gradle auf true setzen. Beachten Sie, dass Ihre SDK-Mindestversion auch 14 oder höher sein muss.

android { 
    compileSdkVersion 21 
    buildToolsVersion "21.1.0" 

    defaultConfig { 
     ... 
     minSdkVersion 14 
     targetSdkVersion 21 
     ... 

     // Enabling multidex support. 
     multiDexEnabled true 
    } 
    ... 
} 

dependencies { 
    compile 'com.android.support:multidex:1.0.0' 
} 

Anschließend konfigurieren Sie Ihr Anwendungselement innerhalb des Manifests:

<?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> 
0

die Sie interessieren in Ihrem android { // }build.gradle Datei:

dexOptions { 
    javaMaxHeapSize "4g" 
    incremental true 
    preDexLibraries = false 
} 

Dann in Ihre Abhängigkeiten, fügen Sie diese:

dependencies{ 
    compile 'com.android.support:multidex:1.0.1' 
} 

aktualisieren

Wenn Sie Anwendung in Ihrem Projekt erweitern, schalten diese zu verlängern:

public class MyApp extends MultiDexApplication{ 

    //inside here, override 

    @Override 
    protected void attachBaseContext(Context base) { 
     super.attachBaseContext(base); 
     MultiDex.install(this); 
    } 
} 

Schließlich stellen Sie Ihren Anwendungsnamen in der AndroidManifest Datei als

<application 
    android:name=".MyApp"> 

Diese Sie von diesem Problem sparen sollte ; Viel Glück!

+0

Das Manifest muss noch aktualisiert werden, um die MultidexApplication-Klasse zu verwenden. Das einfache Hinzufügen der Gradle-Abhängigkeit behebt das Problem nicht –

+0

Sie müssen diese Klasse nicht erweitern, Sie können direkt im Manifest verwenden. Als Referenz dient Ihre Erweiterung [tut nichts extra] (https: // android.googlesource.com/platform/frameworks/multidex/+/master/library/src/android/support/multidex/MultiDexApplication.java) –

+0

Dieser Fall gilt für eine Situation, in der Sie die Application-Klasse bereits erweitern, aber Sie müssen dies nicht tun wenn Sie keine Kundenanwendungsklasse haben – Eenvincible