Android Proguard给了我很多警告,但失败了
我发现了错误 错误:任务执行失败:应用程序:transformClassesAndResourcesWithProguardForDebug'。 作业失败,有关详细信息,请参阅日志 我收到很多警告,比如 警告:es.usc.citius.hipster.util.examples.maze.MazeSearch$Result:找不到引用的类java.awt.Point 这对我来说很奇怪,因为在我的proguard规则中我添加了这个规则Android Proguard给了我很多警告,但失败了,android,proguard,obfuscation,Android,Proguard,Obfuscation,我发现了错误 错误:任务执行失败:应用程序:transformClassesAndResourcesWithProguardForDebug'。 作业失败,有关详细信息,请参阅日志 我收到很多警告,比如 警告:es.usc.citius.hipster.util.examples.maze.MazeSearch$Result:找不到引用的类java.awt.Point 这对我来说很奇怪,因为在我的proguard规则中我添加了这个规则 -keep public class es.usc.citi
-keep public class es.usc.citius.hipster.** { *; }
-dontwarn com.mypackage.android.**
[已编辑]
我也收到了类似这样的警告
警告:com.mypackage.android.dagger.modules.AppModule\u提供的加速度计传感器工厂:
找不到超类或接口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 es.usc.citius.hipster.** { *; }
-dontwarn com.mypackage.android.**
proguard现在没有失败。但是,我不确定在忽略这些警告后,最佳实践是否会被破坏,以及会破坏什么?库类
es.usc.citius.hipster.util.examples.maze.MazeSearch
引用了一个包java.awt.Point
,它是JDK的一部分,但不包含此包的Android JDK。
您无法在Android环境中使用它。已更新 proguard现在没有失败。然而,我不确定这是否是最好的 练习和忽略这些警告后可以打破什么 Android有自己的图形库(例如,
Android.graphics
),使用它代替JavaAWT
类
以下是一条非常有用的评论:
警告:这是AWT加载本机库时出现问题的临时解决方法。AWT包中的许多类都有一个本机方法initIDs(),它初始化实现本机部分中使用的JNI字段和方法ID。由于这些ID的使用和存储由实现库完成,因此这些方法的实现由特定的AWT实现(例如,“Toolkit”s/Peer)提供,例如Motif、Microsoft Windows或Tiny。问题是,这意味着本机库必须由java.*类加载,而java.*类不一定知道要加载的库的名称。更好的方法是提供一个单独的库来定义java.awt.*initid,并将相关符号导出到实现库中。现在,我们知道它是由实现完成的,我们假设库的名称是“awt”-比尔。如果更改loadLibraries(),请将更改添加到java.awt.image.ColorModel.loadLibraries()。不幸的是,类可以加载到依赖于libawt的java.awt.image中,并且无法直接调用Toolkit.loadLibraries()-悬挂
原创
类java.awt.Point
java.awt.*
类不是Android运行时的一部分。最好的解决方案是删除引用它们的类
最简单的解决方案就是抑制警告:
-dontwarn java.awt.**
非常感谢。我编辑了我的问题。如果您能回答并澄清我的疑问,我将不胜感激。谢谢!我编辑了我的问题。如能回答并澄清我的疑问,我将不胜感激。可能的副本