I am succesfully using proguard for my Android apps.
However, with one app I am having trouble.
This app uses a java library that has a .xml
file that is stored in the package.
InputStream istream = Library.class.getResourceAsStream("resource.xml");
This library works great when proguard is disabled. However, running proguard, it seems that the xml file is just completely stripped away.
Relevant proguard.cfg
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
#-dontobfuscate
#-repackageclasses '' //THIS IS DISABLED
-keepattributes *Annotation*
-keepattributes Signature
-verbose
-dontwarn roboguice.activity.RoboMapActivity
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
Any ideas on how to force keep this xml file?
You shoud add a new file keep.xml under res/raw.
<?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" />
In tools:keep, you list the layouts you want to keep. You can even keep specefic drawables if you use reflection in your code to get your drawable
tools:keep="@drawable/ico_android_home_infosperso"
I prefer to add tools:shrinkMode="strict"
so that i make sur no resource is eliminated unless it is not used for sure. You may want to have a look at this link Shrink your code.
Don't Forget to add these lines to your proguard rules:
-keepattributes InnerClasses
-keep class **.R
-keep class **.R$* {
<fields>;
}