番石榴达到极限的Android项目

番石榴达到极限的Android项目,android,proguard,guava,android-gradle-plugin,android-guava,Android,Proguard,Guava,Android Gradle Plugin,Android Guava,我正在Android项目中使用番石榴。我达到了65k方法的极限,这使gradle构建失败。我发现使用proguard可以解决这个问题。我在发布版本上运行Proguard,它运行得很好。我不想在调试构建上运行proguard,因为它会使调试变得困难。我想知道是否有办法解决这个问题?我正在考虑的一个选择是构建一个本地guava.jar,并将其定义为依赖项,而不是从maven central获取它。有更好的方法吗?最新的Android构建工具支持多索引选项。这允许使用超过65k的方法构建应用程序。只需

我正在Android项目中使用番石榴。我达到了65k方法的极限,这使gradle构建失败。我发现使用proguard可以解决这个问题。我在发布版本上运行Proguard,它运行得很好。我不想在调试构建上运行proguard,因为它会使调试变得困难。我想知道是否有办法解决这个问题?我正在考虑的一个选择是构建一个本地guava.jar,并将其定义为依赖项,而不是从maven central获取它。有更好的方法吗?

最新的Android构建工具支持多索引选项。这允许使用超过65k的方法构建应用程序。只需遵循规则

您还可以与ProGuard一起启用自动资源收缩:

android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
        }
    }
}
根据,您可以使用以下各项:

-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[]);
}

这将使您的方法保持相同的名称,而不会混淆。这意味着您仍然可以按原样编写所有适当的名称进行正确调试。

在调试版本上运行ProGuard并不可怕-它将帮助您尽早捕获任何ProGuard配置错误,而不是试图在发布版本中跟踪它们。每次在调试版本中运行ProGuard都将浪费大量时间。您能检查您正在使用的所有库的方法计数吗?您是否使用精简版的google play服务?谢谢@Gaurav,我使用的是精简版的google play服务,目前仅guava是使用14K+方法的最大罪犯。您能从guava库中排除一些软件包吗,通过在gradle依赖项中使用“exclude”。我检查了依赖项,发现它们大多使用“common.collect.”包,但其中的内容引用了其他内容。现在,我可以使用jarjar来构建一个包含该包中的类的jar。此问题适用于非预检调试版本。如果我运行proguard,我会达到极限,但是我不想在调试变量上运行proguard抱歉,错过了。也许您只能在调试版本中使用MultiDex。简单地说,包含巨大的库会使下载、安装和启动时间更长。那么,您如何为调试版本设置MultiDex,使其仅适用于guava jar?我已经在使用proguard进行发布构建,这很有效。我确实发现了这一点,但这仍然使调试变得困难