我收到了错误
错误:任务':app:transformClassesAndResourcesWithProguardForDebug'的执行失败。 作业失败,请参阅日志了解详情
我收到很多警告,比如
警告:es.usc.citius.hipster.util.examples.maze.MazeSearch $结果:找不到引用的类java.awt.Point
对我来说看起来很奇怪,因为在我的proguard规则中我添加了这条规则
-keep public class es.usc.citius.hipster.** { *; }
[EDITED] 我也收到像
这样的警告警告: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现在没有失败。但是,我不确定这是否是最佳做法以及在忽略这些警告后可以打破什么?
答案 0 :(得分:2)
库类es.usc.citius.hipster.util.examples.maze.MazeSearch
引用一个包java.awt.Point
,它是JDK的一部分,而不是Android JDK,它不包含此包。
你无法在Android环境中使用它。
答案 1 :(得分:2)
<强>更新强>
而proguard现在并没有失败。但是,我不确定那是否是最好的 练习以及忽略这些警告后可以打破什么?
Android拥有自己的图形库(例如android.graphics
),而不是使用Java AWT
类。
这是来自java.awt.Toolkit的非常有用的评论:
警告:这是AWT加载本机库时出现问题的临时解决方法。 AWT包中的许多类都有一个本机方法initIDs(),它初始化JNI字段和在其实现的本机部分中使用的方法id。由于这些id的使用和存储是由实现库完成的,因此特定AWT实现(例如,&#34; Toolkit&#34; s / Peer)提供了这些方法的实现,例如Motif,Microsoft Windows或者小小的。问题是这意味着必须由java。*类加载本机库,这些类不一定知道要加载的库的名称。更好的方法是提供一个单独的库来定义java.awt。* initID,并将相关的符号导出到实现库中。目前,我们知道它是由实现完成的,我们假设库的名称是&#34; awt&#34;。 -Br。如果更改loadLibraries(),请将更改添加到java.awt.image.ColorModel.loadLibraries()。不幸的是,类可以在依赖于libawt的java.awt.image中加载,并且无法直接调用Toolkit.loadLibraries()。 -hung
<强>原始强>
class java.awt.Point
java.awt.*
类不是Android运行时的一部分。最好的解决方案是删除引用它们的类。
最简单的解决方案就是抑制警告:
-dontwarn java.awt.**