使用 Guava 达到极限的 Android 项目
Posted
技术标签:
【中文标题】使用 Guava 达到极限的 Android 项目【英文标题】:Android project with Guava hitting the limit 【发布时间】:2015-05-12 16:37:33 【问题描述】:我在一个 android 项目中使用 Guava。我达到了 65k 方法限制,导致 gradle 构建失败。我发现这可以通过使用proguard来解决。我在发布版本上运行 Proguard,它工作正常。我不想在调试版本上运行 proguard,因为它使调试变得困难。我想知道是否有办法解决这个问题?我正在考虑的一个选择是构建一个本地 guava.jar 并将其定义为依赖项,而不是从 maven Central 中提取它。有没有更好的方法来做到这一点?
【问题讨论】:
在调试版本上运行 ProGuard 并不可怕 - 它可以帮助您及早发现任何 ProGuard 配置错误,而不是试图在您的发布版本中跟踪它们。 每次在调试版本中运行 proguard 会浪费很多时间。你能检查你正在使用的所有库的方法计数吗?您是否使用精简版的 google play 服务? 谢谢@Gaurav,我正在使用剥离版本的谷歌播放服务,现在番石榴是最大的罪犯,仅使用 14K+ 方法。 你能从 guava lib 中排除一些包吗,通过在 gradle 依赖项中使用 'exclude最新的 Android 构建工具支持 MultiDex 选项。这允许使用超过 65k 方法构建应用程序。只需关注official guide。
您还可以与 ProGuard 一起启用自动资源缩减:
android
buildTypes
release
minifyEnabled true
shrinkResources true
【讨论】:
我应该更清楚。此问题适用于非 proguarded 调试版本。如果我运行 proguard 我会达到极限但是我不想在调试变量上运行 proguard 抱歉,错过了。也许您只能在调试版本中使用 MultiDex。 天真地包括巨大的库使得下载、安装和启动时间更长。【参考方案2】:根据official doc of Guava,可以使用如下:
-injars path/to/myapplication.jar
-injars lib/guava-r07.jar
-libraryjars lib/jsr305.jar
-outjars myapplication-dist.jar
-dontoptimize
-dontobfuscate
-dontwarn sun.misc.Unsafe
-dontwarn com.google.common.collect.MinMaxPriorityQueue
-keepclasseswithmembers public class *
public static void main(java.lang.String[]);
这将使您的方法保持相同的名称而不会混淆。这意味着您仍然可以使用按原样编写的所有适当名称进行正确调试。
【讨论】:
那么您将如何为您的调试版本设置它,使其仅适用于 guava jar?我已经在使用 proguard 进行发布构建并且可以正常工作。 我确实找到了***.com/questions/16559723/…,但这仍然很难调试以上是关于使用 Guava 达到极限的 Android 项目的主要内容,如果未能解决你的问题,请参考以下文章
为啥从 Realm DB 加载图像时 SwiftUI List 会崩溃? RAM 达到极限