Android 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

我发现了错误

错误:任务执行失败:应用程序:transformClassesAndResourcesWithProguardForDebug'。 作业失败,有关详细信息,请参阅日志

我收到很多警告,比如

警告:es.usc.citius.hipster.util.examples.maze.MazeSearch$Result:找不到引用的类java.awt.Point

这对我来说很奇怪,因为在我的proguard规则中我添加了这个规则

-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.**

非常感谢。我编辑了我的问题。如果您能回答并澄清我的疑问,我将不胜感激。谢谢!我编辑了我的问题。如能回答并澄清我的疑问,我将不胜感激。可能的副本