首页 > 代码库 > Android 简单的代码混淆

Android 简单的代码混淆

Android的代码混淆是开发者需要了解的相关知识,它能够防止android应用程序的反编译。因为android程序多数是java语言开发的,而java代码很容易被反编译,所以为了使android应用程序代码应用一定的安全性,进行android代码的混淆是非常有必要的。

在了解代码混淆之前,先了解android的反编译。进行android的反编译需要借助两个工具dex2jar和jd-gui。

1.代码的反编译

在两个工具准备好之后,将apk文件的直接解压。在解压后的文件中,将classes.dex复制到dex2jar的文件夹中。输入命令:dex2jar.bat classes.dex ,回车。在dex2jar文件夹中会生成classes_dex2jar压缩文件。用jd-gui打开该文件,即可看到android应用程序的源代码。

2.代码混淆

在android工程中添加proguard.cfg.文件。在project.properties中添加proguard.config=proguard.cfg。

-ignorewarnings-libraryjars libs/android-support-v4.jar-libraryjars libs/gson-2.2.4.jar-optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontpreverify-verbose-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*-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 com.android.vending.licensing.ILicensingService-keepclasseswithmembernames class * {    native <methods>;}-keepclasseswithmembernames class * {    public <init>(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembernames class * {    public <init>(android.content.Context, android.util.AttributeSet, int);}-keepclassmembers enum * {    public static **[] values();    public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable {  public static final android.os.Parcelable$Creator *;}
proguard.cfg

3.项目打包

右键工程,选择androidtools-export unsinged application package。对打包的apk进行反编译。

 

可以看到,代码都已经进行编译过了。未签名的apk包并不能够安装,还需要将apk进行签名。

Android 简单的代码混淆