2017-01-26 2 views
1

У меня странная проблема с proguard, так или иначе она ломает мой действительный файл. Без прогрессивных шоу. Предполагается ли proguard минимизировать xml-чертежи?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); 
} 

EDIT: Эта проблема возникает из-за shrinkResources. Он запутывает все чертежи, которые указаны ТОЛЬКО в style.xml. Так, например, если у меня есть кнопка, которая имеет style="@style/MyStyle" и в styles.xml:

<style name="MyStyle"> 
    <item name="android:background">@drawable/wide_btn_round_white</it‌​em> 
</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" /> 

Но эта вещь не работает. Насколько я понимаю, он указывает только, что этот файл не следует удалять.

Любая помощь очень ценится!

Самое лучшее отношение,

ответ

1

В общем Proguard не работает на XML-файлов, только Java. Поэтому я думаю, что ваша сборка - это то, как развращать ваш файл. Возможно, вы открываете новый проект и копируете там ваш источник и файл .git (если у вас есть) поможет

Другое может быть Android shrink resources, поэтому попробуйте установить shrinkResources на false и посмотреть, помогает ли это. Если это так, используйте tools:keep, чтобы сохранить свои проблемные ресурсы вдали от усадки.

<?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, проблема возникла из-за 'shrinkResources', он обфускает все чертежи, которые указаны ТОЛЬКО в' style.xml'. Таким образом, у меня была кнопка, которая имела стиль 'style =" @ style/MyStyle "и в styles.xml:' '. Если я переместю место, где я указываю «фон» из стилей напрямую на атрибут компонента, он работает нормально. Но у меня много ярлыков, которые указаны в 'styles.xml'. В любом случае я могу исправить это, а не вручную перечислять все файлы в 'tools: keep'? – deathangel908

+0

Я также попытался создать файл 'app/src/main/res/values ​​/ keep.xml' с контентом:' '. В любом случае файл поврежден. – deathangel908

Смежные вопросы