Proguard给了我很多警告并且失败了
Posted
技术标签:
【中文标题】Proguard给了我很多警告并且失败了【英文标题】:Proguard gives me a lot of warnings and fails 【发布时间】:2017-10-23 02:51:16 【问题描述】:我收到了错误
错误:任务 ':app:transformClassesAndResourcesWithProguardForDebug' 执行失败。 作业失败,查看日志了解详情
我收到很多警告,例如
警告:es.usc.citius.hipster.util.examples.maze.MazeSearch$Result:找不到引用的类 java.awt.Point
这对我来说看起来很奇怪,因为在我的 proguard-rules 中我添加了这条规则
-keep public class es.usc.citius.hipster.** *;
[已编辑] 我也收到类似
的警告警告:com.mypackage.android.dagger.modules.AppModule_ProvideAccelerometerSensorFactory: 找不到超类或接口 dagger.internal.Factory
我添加了匕首规则
-dontwarn dagger.internal.codegen.**
-keepclassmembers,allowobfuscation class *
@javax.inject.* *;
@dagger.* *;
<init>();
-keep class dagger.* *;
-keep class javax.inject.* *;
-keep class * extends dagger.internal.Binding
-keep class * extends dagger.internal.ModuleAdapter
-keep class * extends dagger.internal.StaticInjection
以及保存我的包裹的规则
-keep public class com.mypackage.android.** *;
在关于忽略警告的答案之后,我添加了这条规则
-dontwarn com.mypackage.android.**
proguard 现在不会失败。但是,我不确定这是否是最佳做法以及忽略这些警告后可以打破什么?
【问题讨论】:
proguard hell - can't find referenced class的可能重复 【参考方案1】:库类es.usc.citius.hipster.util.examples.maze.MazeSearch
引用包java.awt.Point
,它是JDK 的一部分,但不是Android JDK,它不包含此包。
你只是不能在 Android 环境中使用它。
【讨论】:
谢谢!我编辑了,我的问题。将不胜感激回答和澄清我的疑问。【参考方案2】:更新
proguard 现在不会失败。但是,我不确定这是否是最好的 实践以及忽略这些警告后可以破坏什么?
Android 有自己的图形库(例如 android.graphics
),请使用它而不是 Java AWT
类。
这是来自java.awt.Toolkit 的非常有用的评论:
警告:这是针对 AWT 加载本机库方式中的问题的临时解决方法。 AWT 包中的许多类都有一个本地方法 initIDs(),它初始化在其实现的本地部分中使用的 JNI 字段和方法 ID。由于这些 id 的使用和存储是由实现库完成的,因此这些方法的实现由特定的 AWT 实现(例如,“Toolkit”s/Peer)提供,例如 Motif、Microsoft Windows 或 Tiny。问题是这意味着本地库必须由 java.* 类加载,它们不一定知道要加载的库的名称。更好的方法是提供一个单独的库来定义 java.awt.* initID,并将相关符号导出到实现库。现在,我们知道它是由实现完成的,我们假设库的名称是“awt”。 -br。如果您更改 loadLibraries(),请将更改添加到 java.awt.image.ColorModel.loadLibraries()。不幸的是,类可以加载到依赖于 libawt 的 java.awt.image 中,并且无法直接调用 Toolkit.loadLibraries()。 -挂
原创
类 java.awt.Point
java.awt.*
类不是 Android 运行时的一部分。最好的解决方案是删除引用它们的类。
最简单的解决方案就是取消警告:
-dontwarn java.awt.**
【讨论】:
谢谢!我编辑了,我的问题。将不胜感激回答和澄清我的疑问。以上是关于Proguard给了我很多警告并且失败了的主要内容,如果未能解决你的问题,请参考以下文章
尽管阅读了常见问题解答,ProGuard 仍因“警告:类 [*] 意外包含类 [*]”而失败
使用 Proguard 混淆 ActionBarSherlock