我有一個奇怪的問題與proguard,不知何故它打破了我有效的可繪製文件。沒有proguard drawable顯示ok。 proguard應該縮小xml drawables嗎?Proguard腐敗的可繪製文件
抽拉/ 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>
變成這樣
<?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);
}
編輯: 此問題是因爲的shrinkResources
。它混淆了僅在style.xml
中指定的所有可繪製對象。 因此,舉例來說,如果我有一個按鈕,具有style="@style/MyStyle"
和styles.xml
:
<style name="MyStyle">
<item name="android:background">@drawable/wide_btn_round_white</item>
</style>.
wide_btn_round_white.xml
是會被打破。但是如果我直接在按鈕上指定背景,那麼一切都會正常工作根據維基我可以創建app/src/main/res/values/keep.xml
:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@drawable/wide_btn_round_white" />
但這個東西不起作用。據我瞭解,它只是指定該文件不應該被刪除。
任何幫助,非常感謝!
最好的方面,
Ty,問題出在'shrinkResources'上,它混淆了所有隻在'style.xml'中指定的drawables。所以我有一個'style =「@ style/MyStyle」'和styles.xml:'''的按鈕。如果我將指定'背景'的位置從樣式直接移至組件屬性,則它可以正常工作。但是我有很多在'styles.xml'中指定的drawable。任何方式我可以解決這個問題,而不是手動列出'tools:keep'中的所有文件? – deathangel908
我也嘗試使用以下內容創建文件'app/src/main/res/values/keep.xml':<?xml version =「1.0」encoding =「utf-8」?> '。該文件無論如何都會被損壞。 –
deathangel908