Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to exclude R*.class files from a proguard build

I am one step away from making the method described here: Targeting Android with Scala 2.8 Trunk builds

work with a single project (vs one project for scala and one for android).

I've come across a problem. Using this input file (arguments to) proguard:

-injars bin;lib/scala-library.jar(!META-INF/MANIFEST.MF,!library.properties)

-outjar lib/scandroid.jar

-libraryjars lib/android.jar

-dontwarn
-dontoptimize
-dontobfuscate
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
                SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-keep public class org.scala.jeb.** { public protected *; }
-keep public class org.xml.sax.EntityResolver { public protected *; }

Proguard successfully builds scandroid.jar, however it appears to have included the generated R classes that the android resource builder generates and compiles. In this case, they are located in bin/org/jeb/R*.class. This is not what I want. The android dalvik converter cannot build because it thinks there is a duplicate of the R class (it's in scandroid and also the R*.class files). How can I modify the above proguard arguments to exclude the R*.class files from the scandroid.jar so the dalvik converter is happy? Edit: I should note that I tried adding ;bin/org/jeb/R.class;etc... to the -libraryjars argument, and that only seemed to cause it to complain about duplicate classes, and in addition proguard decided to exclude my scala class files too.

like image 254
Jeremy Bell Avatar asked May 21 '10 21:05

Jeremy Bell


2 Answers

I use this option. You can find reference from link below and find "A complete Android application". http://proguard.sourceforge.net/index.html#/manual/examples.html

-keepclassmembers class **.R$* {
    public static <fields>;
}
like image 149
theWook Avatar answered Sep 22 '22 16:09

theWook


file filter !**/*R.java in other words this lien forces Proguard to keep all java files except R.java files in the obfuscation

like image 23
Fred Grott Avatar answered Sep 25 '22 16:09

Fred Grott