[英]Android ProGuard: can't find referenced class
在我的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之间有什么区别?
这是最常见的错误,因为“许多预编译的第三方库引用了其他未实际使用但因此不存在的库。这在调试版本中工作正常,但在发布版本中,ProGuard期望所有库,所以它可以进行适当的静态分析。“
来自: http : //proguard.sourceforge.net/index.html#manual/examples.html
因此,这个javax.annotation.Nullable
可能不在您的项目中,但您使用的库中有一些内部引用它们的类。
但是,您可以通过-dontwarn javax.annotation.**
或--dontwarn com.google.common.collect.**
来避免这些警告--dontwarn com.google.common.collect.**
。 但我不认为-keep class javax.annotation.** { *; }
-keep class javax.annotation.** { *; }
,看起来不合逻辑。
所以,如果你做了-keep class com.google.common.collect.** { *; }
-keep class com.google.common.collect.** { *; }
您跳过此包从所有3个步骤的Proguard
执行(收缩,优化和混淆)根据我的理解这是有道理的。
别忘了添加包
-keep class com.package_name.** { *; }
使用支持库Nullable代替:
import android.support.annotation.Nullable;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.