我们在Amazon市场上发现了一个问题,如果接收器不在主DEX
文件中,IAP将无法工作。问题是如何强制gradle
将特定类(接收器)放入主DEX
文件中。
以下是Gradle 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')
4条答案
按热度按时间rqenqsqc1#
借助Android插件for Gradle修订版2.2.0(2016年9月发布),您可以使用multiDexKeepFile API
其中
multidex_keep_file.txt
是每行包含一个类的文件,需要显式添加到主目录中您还可以使用
multiDexKeepProguard
来保留整个包zdwk9cvp2#
我也遇到了同样的问题。主要的问题是,你必须在“multiDexEnabled true”之前设置“minSdkVersion 16”,否则你的应用程序类可能会被放置在第二个Dex中,应用程序将在Android Lower 5. 0上崩溃
kyks70gy3#
不需要手动添加multi-dex参数到dex任务。
这可以由android插件自动处理(从v0.14.0开始)。
从build.gradle中删除 afterEvaluate 部分和 compile('com.android.support:multidex:1.0.0'),并添加以下内容:
该插件是足够聪明的包所有的组件(其中接收器)在主要的dex文件。
iyfamqjs4#
Sergii Pechenizkyi的答案只是在主dex中保留一些类,而不是生成两个dex。将
--minimal-main-dex
添加到您的builg.gradle
中。但这只能解决gradle1.5.0
以下的问题。您可以使用DexKnifePlugin来解决您的问题。