繁体   English   中英

Android ProGuard:找不到引用的类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM