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

【Bluecoffee原创】转载请注明出处哦!

要想打出混淆包,总共分几步:

第一步:将安卓项目中的Java代码导出为Jar包。

导出方式:src下的目录,右键选择Export,如下图选择导出jar包

输入图片说明

next下一步,注意src下面的文件夹要都勾选上,如下图,

输入图片说明

finish,导出jar包成功,如果不放心jar包里面的类是否完整,可以使用jd-gui工具反编译来查看。

第二步:copy一个同样的项目(可以copy到另一个工作空间),把src下面的java类全部删掉,把第一步导出jar包放到lib下面,运行一下app,看功能是否正常。如果正常,那么请进入第三步,如果不正常,请回退到第一步检查是否有类没有导出成功。

第三步:重头戏来了,使用proguard混淆第一步导出的jar包。

proguard在哪里呢?请见“Your sdk 路径\tools\proguard”,sdk中已经有proguard工具了,不需要另外下载。 在proguard\bin下,运行proguardgui.bat,见下图:

扫描二维码关注公众号,回复: 132091 查看本文章

输入图片说明

点击Load Configuration,load进去一个文件,里面可以写好需要keep的类,下面,我给出一个例子:

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

猜你喜欢

转载自my.oschina.net/u/1011854/blog/775777
今日推荐