android - 使用Gradle将外部库拆分为单独的dex文件解决Android Dalvik 64k方法限制

标签 android gradle dalvik

有没有一种正确/简单的方法来解决使用 Gradle 的 64k 方法限制?

我的意思是一些自定义 Gradle 任务,使用预 dexed jar 来创建单独的 dex 文件,而不是单个 classes.dex

谢谢

伊万

当前状态

目前,我在 GMS 上苦苦挣扎:它引入了 20k 种方法来使用 Analytics。我使用 Proguard 去除不需要的东西,但仍然...... 72k 方法和计数......

我可以使用 dx 参数 --multi-dexclasses.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/

相关文章:

java-native-interface - LibGDX : JNI ERROR (app bug): non-zero capacity for NULL pointer: 80000 错误

java - 使用AsyncTask Android ListView加XML解析

java - Gradle 为 Spring 获取错误的库版本

macos - Gradle exec commandLine无法按预期工作

java - Android Studio gradle版本错误

Android NDK 溢出 dalvik JNI 本地引用表

android - 在拖动时选择编辑文本中的一些文本

android - 如何创建一个包含两个相邻实体的图层列表?

android - 如何防止 .setDisplayHomeAsUpEnabled 重新创建父 Activity ?

java - Dalvik内存分配