Как поместить определенные классы в основной файл DEX?

Мы обнаружили проблему на Amazon market что IAP не работает, если приемники расположены не в основном файле DEX . Вопрос заключается в том, как заставить gradle помещать определенные классы (приемники) в основной файл DEX .

EDIT: обновлено с настройками DEX градиента

 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') 

С Android Plugin для Gradle, версия 2.2.0 (выпущена в сентябре 2016 года), вы можете использовать multiDexKeepFile api

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

Где multidex_keep_file.txt – это файл с одним классом на строку, который должен быть явно добавлен в основной файл

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

Вы также можете использовать multiDexKeepProguard для хранения всего пакета

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

Не нужно вручную добавлять параметры multi-dex к задачам dex.
Это может автоматически обрабатываться плагином Android (с версии v0.14.0).

Удалите раздел afterEvaluate и скомпилируйте ('com.android.support:multidex:1.0.0') из файла build.gradle и вместо этого добавьте следующее:

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

Плагин достаточно умен, чтобы упаковать все компоненты (получатели среди них) в основной файл dex.

Ансвар Сергея Печеницкого только держит некоторый класс в главном dex, но не генерирует два dex. Добавьте --minimal-main-dex в свой builg.gradle . Но это только решить ниже gradle1.5.0 . Вы можете использовать DexKnifePlugin для решения вашей проблемы.

 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' } } 
Intereting Posts