项目前段时间要抽取核心功能做成sdk版本,有jar包和apk。牵扯到将项目打包成jar和jar混淆2部分
在eclipse中右键你的项目,export
选择jar file
这个页面之后点击pos_sdk左边的大于号,只勾选src的对号,其他的全部去掉。右边方框里的对号也全部去掉。还要选择生成jar包的路径,之后点击next。
建议点项目前面的黑色框,,这样就会取消所有已勾选的选项,,只需要将src部分的代码进行打包就可以了
这个里面的关于errors的对勾去掉,下面的的关于warnings打上对勾。选择好路径之后next,再点击finish。
此时在刚选的路径处就可以看到对应的jar包了。然后开始混淆(我是用的jd-gui查看的jar包)。
混淆做起来很简单只需要2步,第一编写好pos_sdk.pro文件
-injars D:/dspread_android_sdk.jar
-outjars D:/dspread_android_sdk2.5.5.jar
-libraryjars C:/Program Files/Java/jdk1.7.0_80/jre/lib/rt.jar
-libraryjars D:/adtbundlewindows64/sdk/platforms/android-19/android.jar
第一行是准备混淆的jar的路径;第二行是输出的路径;第三行是jdk的路径,只需要找到jdk的路劲然后找到rt.jar文件就可以了;第四行是sdk的路径,和第三部一样找到android.jar的路径粘贴路径就好。
之后在.pro的文件夹下运行命令行,直接粘进去就行
D:\>java -jar D:/adtbundlewindows64/sdk/tools/proguard/lib/proguard.jar @pos_sdk.pro
以下附上pos_sdk.pro文件,和项目混淆的内容相似
-injars E:/sdk/***.jar
-outjars D:/***.jar
-libraryjars C:/Program Files/Java/jdk1.7.0_51/jre/lib/rt.jar
-libraryjars D:/SDK/android_sdk/platforms/android-19/android.jar
-dontskipnonpubliclibraryclassmembers
-dontshrink
-dontoptimize
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-optimizationpasses 5
-useuniqueclassmembernames
-dontusemixedcaseclassnames
-keeppackagenames
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,Synthetic,EnclosingMethod
-keepparameternames
-dontpreverify
-dontnote
-dontwarn
-keep public class * extends android.app.Activity #所有activity的子类不要去混淆
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService #指定具体类不要去混淆
#-keep,allowshrinking class *
-keep class com.handmark.pulltorefresh.library.** {*;}
####-keepclasseswithmembers class * {
public(android.content.Context, android.util.AttributeSet); #保持自定义控件类不被混淆,指定格式的构造方法不去混淆 }
-keepclasseswithmembers class * { public * ;}
-keepclasseswithmembers class * { public(android.content.Context, android.util.AttributeSet, int); } #保护指定类的成员,如果此类受到保护他们会保护的更好
-keepclassmembers class * extends android.app.Activity { public void *(android.view.View);}
#保持自定义控件指定规则的方法不被混淆
-keep public class * extends android.view.View { public(android.content.Context); public(android.content.Context, android.util.AttributeSet); public(android.content.Context, android.util.AttributeSet, int); public void set*(...); }
-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}
#保持 Parcelable 不被混淆(aidl文件不能去混淆)
-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;} #需要序列化和反序列化的类不能被混淆(注:Java反射用到的类也不能被混淆)
-keepnames class * implements java.io.Serializable
-keepattributes *Annotation* #过滤注解-keepattributes Signature #过滤泛型-keep class **.R$* { *; } #保持R文件不被混淆 #bean类所在包
-keepclassmembernames class com.example.object.** { *; } #转换JSON的JavaBean,类成员名称保护,使其不被混淆
-keepclassmembers class * { public(org.json.JSONObject);}