防止在 Android 中达到 65k 方法

Posted

技术标签:

【中文标题】防止在 Android 中达到 65k 方法【英文标题】:Prevent reaching 65k methods in Android 【发布时间】:2016-06-15 20:54:12 【问题描述】:

每次不经考虑地使用外部库都会导致 Gradle 错误达到 65k 方法。所以我想知道防止这种情况的最佳解决方案是什么,我不想考虑使用 Proguard 自定义设置。

我想到的(当然,如果我们使用开源库)只是下载代码并手动将其放入我们的项目中。然后我们可以删除未使用的类和方法。看起来我们正在扮演 Proguard 角色,这很耗时。

问题

但是使用 Gradle 获取 jar 和 手动输入代码?还是在性能上有什么不同?

我将感谢在使用许多库创建项目时的任何最佳实践。

注意:我想暂时停止考虑 Proguard 自定义设置,因为它经常会产生警告,其中省略它们对我来说看起来有点奇怪,例如-dontwarn。另外我有点害怕使用 MultiDex 支持,我认为不建议这样做。

【问题讨论】:

【参考方案1】:

您可以在 gradle 中做的一件事是非常具体地了解您所包含的代码模块。

例如:

compile 'com.google.android.gms:play-services:8.4.0'

将包括更多的东西,而不仅仅是......

compile 'com.google.android.gms:play-services-location:8.4.0'

一般最好让 gradle 管理外部依赖。最大的原因是您可以放心,您可以获得与特定版本相关的代码的快照。如果您只是手动导入代码,很容易忘记您正在使用的代码版本。从第 3 方修改(或有选择地包含)代码的一大风险是当第 3 方更新他们的代码时,可能是为了修复由新版本的 Android 引起的主要错误,并且其中包含一些会破坏您的手动调整的更改。现在你手上的问题比你刚刚将它包含为一个 gradle 依赖项更复杂。

【讨论】:

以上是关于防止在 Android 中达到 65k 方法的主要内容,如果未能解决你的问题,请参考以下文章

Android 解决方法数 65536 (65k) 限制

Android 方法数 65k 限制与 LinearAlloc 限制

android 方法数超过65k,解决dex方法数超过65536

解决Android 应用方法数不能超过65K的问题

Android应用打破65K方法数限制

在 NSDictionary 中达到最深的儿童级别