【问题标题】:Android support Multidex still generates the 'over than 64K methods in main-dex file' errorAndroid 支持 Multidex 仍然会生成“main-dex 文件中超过 64K 的方法”错误
【发布时间】:2019-06-21 17:03:47
【问题描述】:

我是一名仍然支持 minSdk 19 的 Android 开发人员,但遇到了一个问题,即 Maindex 不适合 main-dex 文件中请求的类。即使按照“启用 multidex”开发人员页面上的推荐步骤进行操作,错误仍然存​​在。我可以做些什么来支持 main-dex 文件中的更多方法,或者更好地在文件之间划分它们?

我已按照https://developer.android.com/studio/build/multidex 页面中建议的步骤进行操作。在 Gradle 文件中,我实现了 'com.android.support:multidex:1.0.3' 依赖项。我的应用程序是从 MultiDexApplication 扩展而来的。

主要问题可能是已经迁移到 AndroidX,所以应用程序导入 androidx.multidex.MultiDexApplication 库而不是导入在依赖项中实现的支持库。

build.gradle(Module:App) 文件内部(仅突出显示重要部分)

...
dexOptions {
   jumboMode true
}
...
defaultConfig {
    minSdkVersion 19
    targetSdkVersion 28
    ...    
    multiDexEnabled true
    multiDexKeepProguard file('multidex-config.txt')
}
...
dependencies {
    ...
    implementation "com.android.support:multidex:1.0.3"
    ...
}

在应用程序文件中:

import androidx.multidex.MultiDexApplication;
...
public class MainApplication extends MultiDexApplication...

通过尝试,预期方法将适合 dex 文件。但是,尝试构建 APK 时错误仍然存​​在:

Error: null, Cannot fit requested classes in the main-dex file (# methods: 66064 > 65536)

【问题讨论】:

    标签: java android gradle androidx android-multidex


    【解决方案1】:

    根据documentation,您的 multidex-config 中必须有您想要保留的类。

    分析您的 APK 并检查主 dex 文件中包含的类和方法,并检查导致达到 64K 限制的包。

    确保您没有将整个项目保存在 multidex-config 文件中。

    如果您使用广泛的包过滤器,文档中给出的示例可能会产生误导:

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

    尽量只保留必要的包裹:

    -keep class com.example.YOUR-PACKAGE** { *; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      相关资源
      最近更新 更多