有没有一种正确/简单
的方法来解决使用 Gradle 的 64k 方法限制?
我的意思是一些自定义 Gradle 任务,使用预 dexed jar 来创建单独的 dex 文件,而不是单个 classes.dex
。
谢谢
伊万
当前状态
目前,我在 GMS 上苦苦挣扎:它引入了 20k 种方法来使用 Analytics。我使用 Proguard 去除不需要的东西,但仍然...... 72k 方法和计数......
我可以使用 dx
参数 --multi-dex 将 classes.dex
拆分为两个文件。我实现了手动编辑
sdk/build-tools/android-4.4W/dx
并像这样编辑最后一行:
exec java $javaOpts -jar "$jarpath" --multi-dex "$@"
我的 APK 文件现在包含 __classes.dex__ 和 __classes2.dex__
。
我正在尝试使用几种方法动态加载第二个文件:
不幸的是,仍然没有运气。我真的希望一些 Google/Facebook/Square 大师可以提供一个适当的解决方案。
最佳答案
Android Gradle 插件 2.2.0 更新: 无法再访问 dex
任务,但作为交换,引入了 additionalParameters
作为 dexOptions
的一部分。像这样使用它
android {
dexOptions {
additionalParameters += '--minimal-main-dex'
// additionalParameters += '--main-dex-list=$projectDir/<filename>'.toString()
// additionalParameters += '--set-max-idx-number=55000'
}
}
Android Gradle 插件 0.14.0 更新: 现在通过新的 multiDexEnabled true
指令直接支持多 dex(需要 build-tools 21.1.0,支持存储库修订版 8 和 Android Studio 0.9)。
原答案:自从 Gradle Android 插件 0.9.0 以来,您实际上可以将 --multi-dex
传递给 dx
将其添加到您应用的 build.gradle
文件中:
afterEvaluate {
tasks.matching {
it.name.startsWith('dex')
}.each { dx ->
if (dx.additionalParameters == null) {
dx.additionalParameters = ['--multi-dex']
} else {
dx.additionalParameters += '--multi-dex'
}
// Add more additional parameters like this:
dx.additionalParameters += '--main-dex-list=class-list.txt'
dx.additionalParameters += '--minimal-main-dex'
}
}
到目前为止,正在创建多个 dex 文件。要真正使用多个 dex 文件,请查看 https://github.com/casidiablo/multidex (这是 Google 即将推出的 MultiDex 支持库的一个分支)。
关于android - 使用Gradle将外部库拆分为单独的dex文件解决Android Dalvik 64k方法限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23614095/