2015-05-06 12 views
6

Znaleźliśmy problem na Amazon market, że IAP nie działa, jeśli jest to odbiornik nie znajdujący się w głównym pliku DEX. Pytanie brzmi, jak zmusić użytkownika gradle do umieszczenia określonych klas (odbiorników) w głównym pliku DEX.Jak umieścić określone klasy w głównym pliku DEX?

EDIT: na bieżąco z Gradle ustawień 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') 
+0

Dodać Gradle config proszę – petey

+0

@petey edytowane pytanie, dodał ustawienia związane Gradle DEX – Taras

Odpowiedz

10

Z Android Plugin for Gradle, wersja 2.2.0 (wydany we wrześniu 2016 roku) można użyć multiDexKeepFile api

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

Gdzie multidex_keep_file.txt jest plik z jednej klasy na linię, która musi być jawnie dodany do głównego dex

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

można również użyć multiDexKeepProguard utrzymać cały pakiet

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

Cześć, to rozwiązanie nie działa dla mnie, można sprawdzić moje pytanie: https://stackoverflow.com/questions/ 46600992/multidexkeep-ignored-not-working – Benobab

+0

Część 'multiDexKeepProguard' jest dla mnie odpowiednia. –

0

Nie ma potrzeby ręcznego dodawania parametrów multi-Dex do dex zadań.
Może to być automatycznie obsługiwane przez wtyczkę dla systemu Android (od wersji v0.14.0).

Usuń zarówno afterEvaluate sekcja i kompilacji ('com.android.support:multidex:1.0.0') z build.gradle, a zamiast tego dodać:

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

Wtyczka jest wystarczająco inteligentny, aby spakować wszystkie komponenty (wśród nich odbiorcy) w głównym pliku.

0

Odpowiednik Sergii Peczenizjego zawiera tylko niektóre klasy w głównym dokumencie, ale nie generuje dwóch cyfr. Dodaj --minimal-main-dex do swojego builg.gradle. Ale to tylko rozwiązać poniżej gradle1.5.0. Możesz użyć numeru DexKnifePlugin, aby rozwiązać swój problem.

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