android apk 代码混淆

来源:互联网 发布:java线程是什么意思 编辑:程序博客网 时间:2024/05/24 04:19

一、混淆的原因

原因很简单,无非就是不想让别人很轻易的反编译你的源码

二、混淆方法

apk的混淆主要是在两个文件中改动 project.poperties 和proguard-project.txt

先说 project.poperties 只需加入一行代码足以:proguard.config=proguard-project.txt,这样就打开了代码混淆的开关

proguard-project.txt 这个文件主要是写混淆的规则,规则的编写会稍微麻烦些,其实主要体现在以下几个方面

1、有些类不能被混淆

继承于Activity、Application、Service、BroadcastReceiver、ContentProvider、Preference等的类不参与混淆,写法:

-keep class org.apache.commons.net.** { *; }  
-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 com.android.vending.licensing.ILicensingService

2、引入第三方jar类库

第三方类库一般都是从网上下载的,所以没必要参与混淆比如jackson.jar这个库,可以这样写

-keep class org.codehaus.jackson.** { *;}

引入第三方库有时候会提示一大堆警告导致编译不过,需要去除这些警告,写法:

-dontwarn android.support.v4.**

3、一些成员变量不参与混淆

比如:native方法、enum变量、自定义View等,写法
-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

4、Gson,即:sdk自带的json数据,不参与混淆,不然会有问题,写法:

-keep class com.google.gson.examples.android.model.** { *; }




-keepclasseswithmembernames class com.kogame.god.thing.creature.**
{
*;
}

5、使用过反射的类不能参与混淆

6、接口和抽象类不能参与混淆

三、导出apk

debug版本编译出的apk是不具备混淆的,必须要经过导出并使用签名

方法:http://blog.csdn.net/m370809968/article/details/37698889

四、反编译apk

使用反编译工具dex2jar反编译,使用jd-gui查看反编译后的代码,如果你的代码中出现很多a、b、c、d等令人难懂的类及变量,说明代码混淆成功,还要在真机上多多测试,确保没问题

最后:奉上经过两天研究编写的proguard-project.txt下载地址:http://download.csdn.net/detail/m370809968/7638433,该文件经测试真实有效

0 0
原创粉丝点击