安卓混淆
来源:互联网 发布:数据备份怎么做 编辑:程序博客网 时间:2024/05/22 04:44
首先,在你的工程目录下,找到proguard-rules.pro文件,它就是你要进行编写混淆配置的文件:
光编写该文件还不够哦,你还需要在你module的build.gradle文件中引用该混淆文件:
好了,知道在哪配置混淆文件后,下面开始讲讲如何配置混淆:
混淆文件 proguard-rules.pro 参数详解:
- -optimizationpasses 5 # 指定代码的压缩级别
- -dontusemixedcaseclassnames # 是否使用大小写混合
- -dontskipnonpubliclibraryclasses # 是否混淆第三方jar
- -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 * extends android.app.backup.BackupAgentHelper # 保持哪些类不被混淆
- -keep public class * extends android.preference.Preference # 保持哪些类不被混淆
- -keep public class com.android.vending.licensing.ILicensingService # 保持哪些类不被混淆
-
- -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 class * extends android.app.Activity { # 保持自定义控件类不被混淆
- public void *(android.view.View);
- }
-
- -keepclassmembers enum * { # 保持枚举 enum 类不被混淆
- public static **[] values();
- public static ** valueOf(java.lang.String);
- }
-
- -keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆
- public static final android.os.Parcelable$Creator *;
- }
-
- -keep class MyClass; # 保持自己定义的类不被混淆
以上是最基础的配置,几乎每个项目都需要进行这些地方的混淆(或保持不混淆)。如果你仔细看过上方的注释,就会了解一些基本代码混淆策略了。
只是,这还远远不够,因为你在项目中,总会不可避免的引用第三方的library库或是jar包,那,如果你不能够正确的混淆第三方的资源,可能会导致你的应用无法使用。(我就因为忘了配置Gson相关的混淆,导致页面一直没有数据显示,蛋疼的一笔)。
贴出我项目中关于第三方的混淆部分:
以上的配置,即是对一个项目的混淆配置了,相对比较完整,大家可以依葫芦画瓢,写更多的配置,对于一些第三方项目的使用,一般官方会给出如何配置混淆,大家需要小心,别忘了配置。
好啦,如果你已经写好自己的混淆配置文件,不要忘了在build.gradle文件中再次配置下,打开混淆文件:
- buildTypes {
- debug {
- // 显示Log
- buildConfigField "boolean", "LOG_DEBUG", "true"
-
-
- versionNameSuffix "-debug"
- minifyEnabled false
- zipAlignEnabled false
- shrinkResources false
- signingConfig signingConfigs.assist
- }
-
-
- release {
- // 不显示Log
- buildConfigField "boolean", "LOG_DEBUG", "false"
-
- //混淆
- minifyEnabled true
-
- //Zipalign优化
- zipAlignEnabled true
-
-
- // 移除无用的resource文件
- shrinkResources true
- //加载默认混淆配置文件
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- //签名
- signingConfig signingConfigs.<span style="font-family: Arial, Helvetica, sans-serif;">assist</span>
-
- }
- }