【Bluecoffee原创】转载请注明出处哦!java
要想打出混淆包,总共分几步:android
第一步:将安卓项目中的Java代码导出为Jar包。apache
导出方式:src下的目录,右键选择Export,以下图选择导出jar包app
next下一步,注意src下面的文件夹要都勾选上,以下图,ide
finish,导出jar包成功,若是不放心jar包里面的类是否完整,能够使用jd-gui工具反编译来查看。工具
第二步:copy一个一样的项目(能够copy到另外一个工做空间),把src下面的java类所有删掉,把第一步导出jar包放到lib下面,运行一下app,看功能是否正常。若是正常,那么请进入第三步,若是不正常,请回退到第一步检查是否有类没有导出成功。测试
第三步:重头戏来了,使用proguard混淆第一步导出的jar包。ui
proguard在哪里呢?请见“Your sdk 路径\tools\proguard”,sdk中已经有proguard工具了,不须要另外下载。 在proguard\bin下,运行proguardgui.bat,见下图:google
点击Load Configuration,load进去一个文件,里面能够写好须要keep的类,下面,我给出一个例子:code
-injars 第一步的jar包.jar -outjars 导出的jar包.jar -libraryjars '你的项目路径\libs\android-support-v4.jar' -libraryjars '你的jdk路径\jdk1.6.0_37' -libraryjars '你的sdk路径\platforms\android-21' -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -optimizationpasses 5 -printmapping mapping.txt -dontusemixedcaseclassnames -keepattributes *Annotation*,Signature -dontpreverify -verbose -dontwarn com.alipay.android.phone.mrpc.core**,com.alipay.apmobilesecuritysdk.face**,cn.jpush**,com.lidroid**,com.sinovoice**,com.baidu**,com.android.volley.toolbox**,com.google.gson**,org.apache.http**,com.handmark.pulltorefresh**,com.squareup.picasso**,com.cheweishi.android.entity** -keep class * extends java.lang.annotation.Annotation { <fields>; <methods>; } -keep public class * extends android.app.Fragment -keep public class * extends android.app.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 * extends android.support.v4.** -keep public class * extends android.support.v7.** -keep class com.alipay.android.phone.mrpc.core.** { <fields>; <methods>; } -keep class com.alipay.apmobilesecuritysdk.face.** { <fields>; <methods>; } -keep class cn.jpush.** { <fields>; <methods>; } -keep class com.lidroid.** { <fields>; <methods>; } # 自定义控件不须要混淆 -keep class com.cheweishi.android.widget.** { <fields>; <methods>; } -keep class com.sinovoice.** { <fields>; <methods>; } -keep class com.baidu.** { <fields>; <methods>; } -keep class vi.com.gdi.bgl.android.** { <fields>; <methods>; } -keep class com.android.volley.toolbox { <fields>; <methods>; } -keep class com.google.gson.** { <fields>; <methods>; } -keep class org.apache.http.** { <fields>; <methods>; } -keep class com.handmark.pulltorefresh.** { <fields>; <methods>; } -keep class com.squareup.picasso.** { <fields>; <methods>; } -keep class com.cheweishi.android.entity.** { <fields>; <methods>; } -keep class com.cheweishi.android.response.BaseResponse -keep public class com.android.vending.licensing.ILicensingService -keep class * extends android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -keepclasseswithmembers,allowshrinking class * { public <init>(android.content.Context,android.util.AttributeSet); } -keepclasseswithmembers,allowshrinking class * { public <init>(android.content.Context,android.util.AttributeSet,int); } # Also keep - Enumerations. Keep the special static methods that are required in # enumeration classes. -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } # Keep names - Native method names. Keep all native class/method names. -keepclasseswithmembers,allowshrinking class * { native <methods>; }
汉字路径请先自行替换,若是文件都更改正确,接下来能够一路next按钮就能够,假若有些地方须要修改,能够逐个next修改配置,举个栗子:
在第二个选项卡input、output就能够修改导入导出的jar路径,及依赖的类库路径,接下来还能够配置须要keep的路径,再也不赘述。
最后,来到process标签页,点击Process!,就开始混淆啦,通过一堆log以后,混淆结束。 注意:在log中,Note级别没有问题,存在warn,error一类的log那么就是有问题了,请根据错误提示,修改配置便可。
第四步:接近成功了!将混淆过导出的jar包放到第二步的copy项目中,不要忘记把原来测试的jar包删掉。
接下来运行app,看看混淆后的app是否正常工做。在用jd-gui看看混淆事后的jar包可读性如何,必定看起来很想哭吧,那就对了,大功告成!