安卓adt 使用proguard打混淆包具体步骤【详细】

【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包可读性如何,必定看起来很想哭吧,那就对了,大功告成!

相关文章
相关标签/搜索