2017-05-23 1 views
4

Ich erhalte den FehlerProguard gibt mir eine Menge Warnungen und nicht

Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForDebug'. Job failed, see logs for details

ich viele Warnungen erhalten wie

Warning:es.usc.citius.hipster.util.examples.maze.MazeSearch$Result: can't find referenced class java.awt.Point

, die da in meinem proguard-Regeln für mich komisch aussieht ich habe diese Regel

-keep public class es.usc.citius.hipster.** { *; } 

[EDITED] ich auch Warnungen wie

bekommen

Warning:com.mypackage.android.dagger.modules.AppModule_ProvideAccelerometerSensorFactory: can't find superclass or interface dagger.internal.Factory

Ich habe Dolch Regeln

-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 

und Regel mein Paket

-keep public class com.mypackage.android.** { *; } 

Nach der Antwort für die Aufbewahrung über Warnungen zu ignorieren, habe ich diese Regel

-dontwarn com.mypackage.android.** 

Und proguard scheitert jetzt nicht. Aber ich bin mir nicht sicher, ob das die beste Vorgehensweise ist und was kann nach dem Ignorieren dieser Warnungen gebrochen werden?

+0

Mögliche Duplikat [proguard Hölle - nicht referenzierten Klasse finden] (https://stackoverflow.com/questions/6974231/proguard-hell- cant-find-refered-class) – user1643723

Antwort

2

Die Bibliotheksklasse es.usc.citius.hipster.util.examples.maze.MazeSearch verweist auf ein Paket java.awt.Point, das Teil von JDK ist, aber nicht Android JDK, das dieses Paket nicht enthält. Sie können es einfach nicht in Android-Umgebung verwenden.

+0

Vielen Dank! Ich habe meine Frage bearbeitet. Ich werde dankbar sein für die Antwort und Klärung meiner Zweifel. – qbait

2

Aktualisiert

And proguard doesn't fail now. However, I'm not sure if that the best practice and what can be broken after ignoring these warnings?

Android hat seine eigene Grafikbibliotheken (z android.graphics), verwenden Sie es anstelle der Java AWT Klassen.

Hier ist ein ziemlich nützlicher Kommentar von java.awt.Toolkit:

WARNING: This is a temporary workaround for a problem in the way the AWT loads native libraries. A number of classes in the AWT package have a native method, initIDs(), which initializes the JNI field and method ids used in the native portion of their implementation. Since the use and storage of these ids is done by the implementation libraries, the implementation of these method is provided by the particular AWT implementations (for example, "Toolkit"s/Peer), such as Motif, Microsoft Windows, or Tiny. The problem is that this means that the native libraries must be loaded by the java.* classes, which do not necessarily know the names of the libraries to load. A better way of doing this would be to provide a separate library which defines java.awt.* initIDs, and exports the relevant symbols out to the implementation libraries. For now, we know it's done by the implementation, and we assume that the name of the library is "awt". -br. If you change loadLibraries(), please add the change to java.awt.image.ColorModel.loadLibraries(). Unfortunately, classes can be loaded in java.awt.image that depend on libawt and there is no way to call Toolkit.loadLibraries() directly. -hung

Original-

class java.awt.Point

java.awt.* Klassen sind nicht Teil der Android-Laufzeit. Die beste Lösung wäre, die Klassen zu entfernen, die auf sie verweisen.

Simplest Lösung würde nur die Warnungen unterdrücken:

-dontwarn java.awt.** 
+0

Danke! Ich habe meine Frage bearbeitet. Ich werde dankbar sein für die Antwort und Klärung meiner Zweifel. – qbait

Verwandte Themen