android 代码混淆

来源:互联网 发布:js简繁体切换 编辑:程序博客网 时间:2024/06/06 03:53

什么是混淆:直观点说混淆就是把源码中的类名、变量名、函数名变成了a,b,c等魔数,使得反编译后的源码难以阅读,还有对程序运行不起作用的代码混淆之后会消失,比如注释什么的,这样呢就能压缩apk的体积。其中混淆规则是保持某些重要的代码不被混淆,如果混淆了,apk的运行很可能就会有问题,比如引进三方的时候,人家就有明确的要求一些东西不能被混淆,否则就会影响其功能。
1压缩app体积,没有用到的代码不会被生成class文件
2防止反编译(没有用到的代码被混淆掉,反编译出来看到的是魔数,有用的代码没被混淆怎么还防止反编译了?因为混淆之后你的apk是要能运行的,如果混淆了核心的东西,apk就无法运行了,比如:清单文件,自定义view,三方的规则,事件的监听事件)

加固的是debug包
附一份混淆规则供大家参考

# Add project specific ProGuard rules here.# By default, the flags in this file are appended to flags specified# in D:\studio_sdk\sdk/tools/proguard/proguard-android.txt# You can edit the include path and order by changing the proguardFiles# directive in build.gradle.## For more details, see#   http://developer.android.com/guide/developing/tools/proguard.html# Add any project specific keep options here:# If your project uses WebView with JS, uncomment the following# and specify the fully qualified class name to the JavaScript interface# class:#-keepclassmembers class fqcn.of.javascript.interface.for.webview {#   public *;#}-ignorewarnings                     # 忽略警告,避免打包时某些警告出现  -optimizationpasses 5               # 指定代码的压缩级别  -dontusemixedcaseclassnames         # 是否使用大小写混合  -dontpreverify                      # 混淆时是否做预校验  -verbose                            # 混淆时是否记录日志  -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*        # 混淆时所采用的算法  -dontwarn android.support.v4.**    -dontwarn android.os.**  #缺省proguard 会检查每一个引用是否正确,但是第三方库里面往往有些不会用到的类,没有正确引用。如果不配置的话,系统就会报错。  #-libraryjars libs/fastjson-1.2.8.jar#-libraryjars libs/universal-image-loader-1.9.5.jar#-libraryjars libs/alipaySdk-20160516.jar#-libraryjars libs/MobCommons-2016.0303.1229.jar#-libraryjars libs/SMSSDK-2.0.2.aar#-libraryjars libs/SMSSDKGUI-2.0.2.aar-keep class android.support.v4.** { *; }        # 保持哪些类不被混淆   -keep class android.os.**{*;}  -keep class com.mob.tools.**{*;} -keep class com.mob.commons.**{*;} -keep class cn.smssdk.**{*;} -keep class com.alibaba.fastjson.**{*;} -keep class com.nostra13.universalimageloader.**{*;} -keep interface android.support.v4.app.** { *; }    -keep public class * extends android.support.v4.**    -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.support.v4.widget  -keep public class * extends com.example.sj.library.base.BaseFragment{*;}  -keep public class * extends com.example.sj.library.base.BaseActivity{*;} -keep  class * implements com.example.sj.library.net.NetOverListener{*;} -keep  class com.example.sj.library.**{*;}  -keep class com.alipay.android.app.IAlixPay{*;}-keep class com.alipay.android.app.IAlixPay$Stub{*;}-keep class com.alipay.android.app.IRemoteServiceCallback{*;}-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}-keep class com.alipay.sdk.app.PayTask{ public *;}-keep class com.alipay.sdk.app.AuthTask{ public *;} -keepclasseswithmembernames class * {       # 保持 native 方法不被混淆      native <methods>;  }  -keepclasseswithmembers class * {            # 保持自定义控件类不被混淆      public <init>(android.content.Context, android.util.AttributeSet);  }  -keepclasseswithmembers class * {            # 保持自定义控件类不被混淆      public <init>(android.content.Context, android.util.AttributeSet, int);  }  -keepclassmembers enum * {                  # 保持枚举 enum 类不被混淆      public static **[] values();      public static ** valueOf(java.lang.String);  }  
原创粉丝点击