Android代码混淆总结
来源:互联网 发布:深圳牛掰seo 编辑:程序博客网 时间:2024/06/16 11:01
最近研究了一下代码的混淆,总结如下:
1.build文件中minifyEnabled设置为true,然后开始配置proguard-rules.pro文件中的内容,分为三部分吧
1)可以直接复制粘贴的,不需要做任何修改的固定内容
#压缩等级,一般选择中间级别5-optimizationpasses 5#包名不混合大小写-dontusemixedcaseclassnames#不去忽略非公共的库类-dontskipnonpubliclibraryclasses#优化 不优化输入的类文件-dontoptimize#预校验-dontpreverify#混淆时采用的算法-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*#保护注解-keepattributes *Annotation*#保持下面的类不被混淆(没有用到的可以删除掉,比如没有用到service则可以把service行删除)-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.preference.Preference-keep public class * extends android.support.v4.app.FragmentActivity-keep public class * extends android.support.** { *;}#如果引用了v4或者v7包-dontwarn android.support.*#忽略警告(开始应该注释掉,让他报错误解决,最后再打开,警告要尽量少)-ignorewarnings#####################记录生成的日志数据,gradle build时在本项目根目录输出#################混淆时是否记录日志-verbose#apk 包内所有class 的内部结构-dump class_files.txt#为混淆的类和成员-printseeds seeds.txt#列粗从 apk 中删除的代码-printusage unused.txt#混淆前后的映射-printmapping mapping.txt#####################记录生成的日志数据,gradle build时在本项目根目录输出结束#################本地的R类不要被混淆,不然就找不到相应的资源-keep class **.R$*{ public static final int *; }#保持内部类,异常类-keepattributes Exceptions, InnerClasses#保持泛型、注解、源代码之类的不被混淆-keepattributes Signature, Deprecated, SourceFile-keepattributes LineNumberTable, *Annotation*, EnclosingMethod#保持自定义控件不被混淆(没有就不需要)-keepclasseswithmembers class * extends android.app.Activity{ public void *(android.view.View);}-keepclasseswithmembers class * extends android.supprot.v4.app.Fragment{ public void *(android.view.View);}#保持 Parcelable 不被混淆(没有就不需要)-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}#保持 Serializable 不被混淆(没有就不需要)-keepnames class * implements java.io.Serializable-keepclassmembers class * { public void *ButtonClicked(android.view.View);}
-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}
2)第三方的jar包,需要去相应的官网查询混淆规则,举几个例子如下
# gson工具不需要混淆-dontwarn com.google.gson**-keep class com.google.gson.**{*;}# volley-dontwarn com.android.volley.jar.**-keep class com.android.volley.**{*;}#友盟混淆配置start-keepclassmembers class * { public <init> (org.json.JSONObject);}-keep public class com.hawk.android.hicamera.R$*{*;}#友盟混淆配置end#极光推送混淆配置-dontoptimize-dontpreverify-dontwarn cn.jpush.**-keep class cn.jpush.** { *; }
3)混淆过程中肯定会有警告,有问题,根据提示解决问题,我遇到的问题就是有的jar包不能混淆,而我给混淆了,所以我加了如下代码:
-dontwarn com.tencent.**-keep class com.tencent.**{*;}# apache-dontwarn org.apache.http.**-keep class org.apache.http.** { *;}
2.代码混淆成功了还有一个地方要配置一下,很有用的:
buildTypes { release { // 如果没有提供混淆规则文件,则设置默认的混淆规则文件(SDK/tools/proguard/proguard-android.txt) pseudoLocalesEnabled true // 不显示Log buildConfigField "boolean", "LOG_DEBUG", "false" //混淆 minifyEnabled true //Zipalign优化 zipAlignEnabled true // 移除无用的resource文件 shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
0 0
- android 代码混淆总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 、混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- [LeetCode]Simplify Path
- 腾讯2017暑期实习生编程题——算法基础-字符移位
- 利用JQuery操作form表单,例如:text,radis,checkbox,file等等之类的
- Javascript模块化编程(一):模块的写法
- js--DOM2--元素遍历
- Android代码混淆总结
- Block
- 学习笔记之JavaSE(17)--面向对象编程8
- ExpandableListView (二级列表)使用demo
- 闭包的概念(js)
- 【WebView】加载本地html及远程URL
- IOS学习笔记(页面传值:属性传值,协议代理传值,闭包传值)
- File "/etc/resolv.conf" is not consistent across nodes
- Fresco 一个强大的图片加载框架