Android代码混淆
一,简介 都知道如果在发布apk的时候没有进行其他一些保护措施的话,那么apk文件 就可以通过apktools等工具把源码和资源文件进行反编译出来,因此为了防止自己的劳动成果被人窃取,有必要对app 进行一定的保护,而代码混淆则是其中的一种方式;本文简单介绍混淆的使用;(代码混淆无法防止二次打包,所以混淆 完了还可以对apk进行加固,爱加密,梆梆,360加固,应用宝也有) 二,代码混淆的使用 本次以Android Studio 工程为例说明(eclipse配置代码相同文件名不同而已) (1)大家也许都注意到新建一个工程会在app下的build.gradle下看到如下代码: buildTypes { release { minifyEnabled true //Zipalign优化 zipAlignEnabled true // 移除无用的resource文件 shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } 以 上代码中的proguard-rules.pro就是被指定的混淆文件的配置文件; (2)最重要的就是在proguard-rules.pro添加混淆的申明了,主要代码如下: #保持webView的interface不被混淆 #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #}
-optimizationpasses 5
-dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -dontshrink #需要生声明出jar包 -libraryjars libs/zxing_3.0.0.jar #忽略zxing警告 -dontwarn com.google.zxing.** #保持v4包不被混淆 -keep class android.support.v4.**{*;} #保持zxing包不被混淆 -keep class com.google.zxing.** { *; } #保持签名不变 -keepattributes Signature #fastjson混淆 -keep class com.alibaba.fastjson.**{*;} -keep class com.alibaba.fastjson.annotation.**{*;} -keep class com.alibaba.fastjson.asm.**{*;} -keep class com.alibaba.fastjson.parser.**{*;} -keep class com.alibaba.fastjson.parser.deserializer.**{*;} -keep class com.alibaba.fastjson.serializer.**{*;} -keep class com.alibaba.fastjson.support.spring.**{*;} -keep class com.alibaba.fastjson.util.**{*;} -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers #-----------------------------------以下是对Android原生的一些保持------------------------------ -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 #保持本地方法不被混淆 -keepclasseswithmembernames class * { native <methods>; }# 保持自定义属性不被混淆 -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); }
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int); }# 保持View不被混淆 -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } # 保持enum不被混淆 -keepclassmembers enum* { public static **[] values(); public static ** valueOf(java.lang.String); }# 保持Parcelable序列化不被混淆 -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; }# 保持Serializable序列化不被混淆-keepclassmembers class * implements java.io.Serializable {<fields>;} 注 : 特定的 jar包需要特定的混淆, 比如Umeng的混淆需要按照官方的混淆来书写混淆代码, 其他的一些第三方
SDK也是一样, 正常的jar保持不被混淆是keep class jar包下的包名.**{*;};(3)以上文件配置完成之后就可以进行签名打包了;(4)混淆完了建议要对apk进行加固;
|
代码混淆(反编译)
最新推荐文章于 2023-06-16 10:29:17 发布