【问题标题】:Generate Signed APK Errors生成签名的 APK 错误
【发布时间】:2017-02-15 04:20:37
【问题描述】:

当我在模拟器中运行应用程序时,它可以工作,但是当我想生成签名的 APK 时,我收到以下错误消息:

[错误:任务执行失败 ':app:transformClassesWithDexForRelease'。 > com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: 方法 ID 不在 [0, 0xffff]: 65536]

这个错误信息是什么意思,有没有办法解决这个问题?

【问题讨论】:

  • Eclipse 和 Android Studio 是完全不同的东西,你用的是哪一个?
  • 尝试建议,如果有任何问题,请更新

标签: java eclipse android-studio


【解决方案1】:

DexIndexOverflowException:溢出意味着已达到限制。

您的dex 文件大小已达到限制,即64K,因此您需要在您的项目follow the official link of docs 中实现Multidex 支持

在下面添加到 build.gradle 以启用多索引支持

defaultConfig {
    ...
    // Enabling multidex support.
    multiDexEnabled true
}

在你的 manifest 应用标签中设置应用名称 multidex 支持

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>

如果你有一个应用程序类,那么在super.onCreate之前启用dex

MultiDex.install(getTargetContext());
super.onCreate(arguments);

一些技巧可能会派上用场: 删除不需要的依赖项、文件并使用特定的 google play 依赖项(如 gms 等)而不是将其作为一个整体添加,而且您可以使用 proguard 规则的最佳实践follow the link for an example

【讨论】:

  • 另外,补充一点,Progaurd 是一个选项,可以删除未使用的代码并保持在 65k 方法限制以下
  • @Shmuel 是的,它很有用,但您最多可以删除日志代码或一些类似的东西,否则 progaurd 会非常高效地完成工作,尽管很多时候我们不得不告诉 progaurd 不要缩小这个(POJO 等)并且那, :P:P 所以它可能有效也可能无效取决于项目,但仍然会提高效率
  • Progaurd 对缩小 3rd 方库非常有用。我从一个项目中删除了超过 2 万行代码。
  • @Shmuel 是的,我同意,但我不确定除了日志之外可以使用哪些额外的 proguard 规则,所以我要添加一个链接,谢谢,如果您有任何建议,请随时提出编辑,:)
猜你喜欢
  • 2016-08-08
  • 1970-01-01
  • 2023-04-01
  • 2023-04-06
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多