Как поместить определенные классы в основной файл 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
Ionic Android build: java.lang.IllegalStateException: buildToolsVersion не указывается Добавить пользовательские заголовки, исходящие из веб-сайта android Трансформатор Asus не отображается через adb Android Studio: «Предупреждение libpng: iCCP: не распознавание известного профиля sRGB, который был отредактирован» SwipeRefreshLayout из библиотеки поддержки. V21 не работает со статическим содержимым Какова семантика возвращаемого значения функций ведения журнала Android (например, Log.v ())? Что вызывает метод OnDraw для вызова View и когда Как вы теперь находите ParseRoles, связанные с текущим ParseUser? Черные края вокруг снятого скриншота Как распечатать данные из приложения Android на WIFI-принтер? Это хорошая идея написать мобильные игры в ActionScript3, а не Java / Objective-C? Какая польза от разрешения Android Wake Lock? Android Keystore – может ли пользовательский ключ извлекаться root, если он настроен для этого пользователя? Как я могу реализовать эту простую схему XAML Grid в Android AXML? Невозможно переопределить конечный метод из ActionBarActivity