Android ProGuard:找不到引用的类

时间:2015-10-10 00:03:28

标签: java android android-studio proguard android-proguard

在我的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之间有什么区别。?

3 个答案:

答案 0 :(得分:6)

这是最常见的错误,因为许多预编译的第三方库引用了其他未实际使用但因此不存在的库。这在调试版本中工作正常,但在发布版本中,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执行(缩小,优化和混淆)的所有3个步骤中跳过这个包,这根据我的理解是有意义的。

答案 1 :(得分:1)

不要忘记添加包

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

答案 2 :(得分:0)

请改用支持库Nullable:

import android.support.annotation.Nullable;