2017-01-26 2 views
1

Ich habe seltsames Problem mit Proguard, irgendwie bricht es meine gültige zeichnende Datei. Ohne Programm zeichnbare Shows ok. Soll Proguard xml drawables minimieren?Proguard verdirbt Zeichnungsdateien

ziehbar/wide_btn_round_white.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="rectangle" > 
      <corners android:radius="25dip" /> 
      <padding android:bottom="10dp"/> 
      <padding android:top="10dp"/> 
      <solid android:color="@color/colorOrangeGetStarted" /> 
     </shape> 
    </item> 
</selector> 

wird wie dieser

<?xml version="1.0" encoding="utf-8"?> 
<x /> 

build.gradle:

release { 
     minifyEnabled true 
     shrinkResources true 
     signingConfig signingConfigs.release 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 

proguard-rules.pro:

-keepattributes *Annotation* 
-keepattributes Signature 
-keepclassmembers class ** { 
    @com.squareup.otto.Subscribe public *; 
    @com.squareup.otto.Produce public *; 
} 
-dontwarn okio.** 
-dontwarn retrofit2.Platform$Java8 
-assumenosideeffects class android.util.Log { 
    public static boolean isLoggable(java.lang.String, int); 
    public static int v(...); 
    public static int i(...); 
    public static int w(...); 
    public static int d(...); 
    public static int e(...); 
} 
-keep class com.stripe.** { *; } 
-keepclassmembers class com.myapp.services.http.** { 
    <fields>; 
} 
-keepclassmembers class com.myapp.services.ws.** { 
    <fields>; 
} 
-keepclassmembers class * extends java.lang.Enum { 
    <fields>; 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

EDIT: geschieht Dieses Problem tritt aufgrund von shrinkResources. Es verschleiert alle Zeichen, die NUR in style.xml angegeben sind. So zum Beispiel wenn ich eine Taste, die style="@style/MyStyle" und in styles.xml hat:

<style name="MyStyle"> 
    <item name="android:background">@drawable/wide_btn_round_white</it‌​em> 
</style>. 

wide_btn_round_white.xml ist gonna gebrochen werden. Aber wenn ich den Hintergrund direkt auf der Schaltfläche festlege, würde alles OK funktionieren. Nach dem Wiki kann ich app/src/main/res/values/keep.xml erstellen:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@drawable/wide_btn_round_white" /> 

Aber dieses Ding funktioniert nicht. Wie ich es verstehe, gibt es nur an, dass diese Datei nicht entfernt werden soll.

Jede Hilfe wird sehr geschätzt!

Beste Hinsicht

Antwort

1

Im Allgemeinen Proguard funktioniert nicht auf XML-Dateien, nur Java. Ich denke, Ihr Build ist etwas, das Ihre Datei korrumpiert. Vielleicht ein neues Projekt zu öffnen und kopieren Sie dort Ihre Quelle und die .git-Datei (wenn Sie eine haben) wird helfen

Die andere Sache könnte , so versuchen Sie, shrinkResources auf false und sehen, ob es hilft. Wenn dies der Fall ist, verwenden Sie tools:keep, um Ihre problematischen Ressourcen von Shroker zu trennen.

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:tools="http://schemas.android.com/tools" 
    tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*" 
    tools:discard="@layout/unused2" /> 
+0

Ty, war die Frage wegen 'shrinkResources', es verschleiert alle Drawables, die nur in' style.xml' angegeben sind. Also hatte ich einen Button mit 'style =" @ style/MyStyle "' und in styles.xml: ''. Wenn ich den Ort verschiebe, an dem ich 'background von Styles direkt zum Komponentenattribut gebe, funktioniert es OK. Aber ich habe viele Zeichen in "styles.xml". Irgendwie kann ich das beheben, anstatt manuell alle Dateien in 'tools: keep' aufzulisten? – deathangel908

+0

Ich habe auch versucht, die Datei 'app/src/main/res/values ​​/ keep.xml' mit Inhalt zu erstellen:' '. Die Datei wird trotzdem beschädigt. – deathangel908