2015-05-06 7 views
6

Wir haben ein Problem gefunden auf Amazon market, dass IAP nicht funktioniert, wenn es Empfänger nicht in Haupt DEX Datei befindet. Die Frage ist, wie gradle zwingen, bestimmte Klassen (Empfänger) in Haupt DEX Datei zu setzen.Wie legt man bestimmte Klassen in die Haupt-DEX-Datei?

EDIT: aktualisiert mit gradle DEX Einstellungen

afterEvaluate { 
    tasks.matching { 
     it.name.startsWith('dex') 
    }.each { dx -> 
     if (dx.additionalParameters == null) { 
      dx.additionalParameters = [] 
     } 
    dx.additionalParameters += '--multi-dex' 
    dx.additionalParameters += "--main-dex-list=class_files.txt" 
    } 
} 
dexOptions { 
    javaMaxHeapSize "4g" 
    preDexLibraries = false 
} 
compile('com.android.support:multidex:1.0.0') 
+0

In der gradle Config bitte – petey

+0

@petey die Frage bearbeitet, hinzugefügt gradle DEX bezogenen Einstellungen – Taras

Antwort

10

Mit Android Plugin für Gradle, Revision 2.2.0 (im September 2016 freigegeben) Sie multiDexKeepFile api

android { 
    buildTypes { 
     debug { 
      ... 
      multiDexEnabled true 
      multiDexKeepFile file('multidex_keep_file.txt') 
     } 
    } 
} 

Wo multidex_keep_file.txt ist Datei mit einzelner Klasse pro Zeile, die explizit auf die Haupt hinzugefügt werden muss verwenden können dex

com/example/MyClass.class 
com/example/MyClass2.class 

Sie auch multiDexKeepProguard verwenden können ganzes Paket zu halten

-keep class com.example.** { *; } 
+0

Hallo, diese Lösung nicht für mich arbeiten, können Sie meine Frage prüfen: https://stackoverflow.com/questions/ 46600992/multidexkeepfile-ignored-not-working – Benobab

+0

Der 'multiDexKeepProguard' Teil hat bei mir funktioniert. –

0

Keine Notwendigkeit, manuell Multi-dex Parameter hinzufügen Aufgaben dex.
Dies kann automatisch durch das Android-Plugin (seit v0.14.0) behandelt werden.

Entfernen sowohl der afterEvaluate Abschnitt und Kompilierung ('com.android.support:multidex:1.0.0') von Ihrem build.gradle und stattdessen hinzufügen:

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

Das Plugin ist intelligent genug, um alle Komponenten (Empfänger darunter) in der Haupt-Dex-Datei zu verpacken.

0

Sergii Pechenizkyi Antwort nur behalten einige Klasse in Hauptdex, aber nicht zwei dex. Fügen Sie --minimal-main-dex zu Ihrem builg.gradle hinzu. Dies löst aber nur unter gradle1.5.0. Sie können DexKnifePlugin verwenden, um Ihr Problem zu lösen.

afterEvaluate { 
    tasks.matching { 
     it.name.startsWith('dex') 
    }.each { dx -> 
     if (dx.additionalParameters == null) { 
      dx.additionalParameters = [] 
     } 
    dx.additionalParameters += '--multi-dex' 
    dx.additionalParameters += "--main-dex-list=class_files.txt" 
    dx.additionalParameters += '--minimal-main-dex' 
    } 
}