Android ProGuard:找不到引用的类。

8

在我的Android Studio项目中运行ProGuard时,我会收到如下警告:

Warning: com.google.common.collect.Maps: can't find referenced class javax.annotation.Nullable

我可以用以下其中一种方法来解决这个问题:

1

-keep class com.google.common.collect.** { *; }
-dontwarn com.google.common.collect.**

2

-keep class javax.annotation.** { *; }
-dontwarn javax.annotation.**

如何解决上述警告?变体1和2有什么区别?


展示你的 build.gradle 文件。 - Jared Burrows
3个回答

7

这是最常见的错误,因为“许多预编译的第三方库引用了实际上未使用且不存在的其他库。在调试构建中可以正常工作,但在发布构建中,ProGuard需要所有库,以便进行适当的静态分析。”

引自:http://proguard.sourceforge.net/index.html#manual/examples.html

所以,这个javax.annotation.Nullable可能不在你的项目中,但你正在使用的库内部引用了一些和它相关的类。

然而,你可以通过-dontwarn javax.annotation.**--dontwarn com.google.common.collect.**来避免这些警告。但我认为-keep class javax.annotation.** { *; }看起来不合逻辑。

因此,如果你执行-keep class com.google.common.collect.** { *; },你可以跳过此包在Proguard的三个步骤(缩小、优化和混淆)中的处理,根据我的理解,这是有意义的。


1

不要忘记添加包

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

0
请使用支持库 Nullable:
import android.support.annotation.Nullable;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接