android代码混淆
来源:互联网 发布:大排畸数据怎么看 编辑:程序博客网 时间:2024/05/21 17:47
混淆:
android代码混淆主要用到android SDK 提供的ProGuard工具。它使用简单无意义的名字来重命名你的类名、字段名和方法名。经过以上操作的jar文件会变得更小,并很难进行逆向工程。
proguard配置:
1.使用系统生成的混淆文件进行混淆打包:在project.properties文件中配置proguard.config = proguard.cfg但只能混淆不含第三方包的工程。在我们的项目中大量的使用第三方包,因此我们要自定义混淆文件。 2.使用自定义在project.properties文件中指定混淆的文件 proguard.config = proguard-project.txt。
在缺省的情况下,proguard会混淆所有的代码,因此在混淆中需要用到如下的一些关键字:
-keep 保留类和类成员不被混淆, -dontwarn 告知proguard不发出警告(缺省proguard会检查每一个引用是否正确,但是第三方库里面往往有些不会用到的类,没有正确引用。如果不配置的话,系统就会报错。) -keepclassmembers指定的类成员被保留。 -keepclasseswithmembers指定的类和类成员被保留,假如指定的类成员存在的话
混淆的相关语法:
-optimizationpasses 5 -dontusemixedcaseclassnames 【混淆时不会产生形形色色的类名 】 -dontskipnonpubliclibraryclasses 【指定不去忽略非公共的库类。 】 -dontpreverify 【不预校验】 优化 -dontoptimize 不优化输入的类文件 -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 【优化】 -keep public class * extends android.app.Activity 【不进行混淆类名的类,保持其原类名和包名】 -keep public abstract interface com.asqw.android.Listener{ public protected <methods>; 【全部public protected的方法名不进行混淆】 } -keep public class com.asqw.android{public void Start(java.lang.String); 【对该方法不进行混淆】}-keepclasseswithmembernames class * { 【对全部类的native方法名不进行混淆】native <methods>;}-keepclasseswithmembers class * { 【对全部类的指定方法的方法名不进行混淆】public <init>(android.content.Context, android.util.AttributeSet);}-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接口的全部类的类名 不进行混淆,对其成员变量为Parcelable$Creator类型的成员变量的变量名不进行混淆】public static final android.os.Parcelable$Creator *;}-keepclasseswithmembers class org.jboss.netty.util.internal.LinkedTransferQueue {【对指定类的指定变量的变量名不进行混淆】volatile transient org.jboss.netty.util.internal.LinkedTransferQueue$Node head;volatile transient org.jboss.netty.util.internal.LinkedTransferQueue$Node tail;volatile transient int sweepVotes;}-keep public class com.unionpay.** {*; }【对com.unionpay包下全部的类都不进行混淆,即不混 淆类名,也不混淆方法名和变量名】-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);}
常见第三方类库的混淆流程:
1.首先加入-dontwarn增大混淆的成功率;例如:-dontwarn android.support.v4.** 2.指明lib在工程中的路径-libraryjars后面跟要编译in.jar的其它类包,如果是多个,用多行列出 -libraryjars libs/gson-2.2.2.jar 3.引入后,对项目使用到的入口类进行指定,-keep 后跟项目的 入口类 -keep class universal-image-loader-1.8.4-with-sources.** { *; } -keep interface universal-image-loader-1.8.4-with-sources.** { *; } -keep class lockSDK_3.3.** { *; } -keep interface lockSDK_3.3.** { *; } -keep class MobileProbe.jar.** { *; } -keep interface MobileProbe.jar.** { *; } -keep class android.net.http.SslError -keep class android.webkit.**{*;} -keep class cn.sharesdk.**{*;} -keep class com.sina.**{*;}keep就是 告诉proguard不用混淆这个包里面的类
常见的不能混淆的android code
Android 程序,下面这样代码混淆的时候要注意保留。 Android系统组件,系统组件有固定的方法被系统调用。 被Android Resource 文件引用到的。名字已经固定,也不能混淆,比如自定义的View 。 Android Parcelable ,需要使用android 序列化的。 其他Anroid 官方建议不混淆的,如 android.app.backup.BackupAgentHelper android.preference.Preference com.android.vending.licensing.ILicensingService Java序列化方法,系统序列化需要固定的方法。 枚举 ,系统需要处理枚举的固定方法。 本地方法,不能修改本地方法名 annotations 注释 数据库驱动 有些resource 文件 用到反射的地方 ProGuard对文件路径的名名很有讲究,不支持括号,也不支持空格 尽量不要去混淆实体Modle 用到反射的类和方法不要混淆 只有在生成release版本的apk时,混淆配置才会起作用,debug版本的apk不会进行混淆。
0 0
- Android 代码混淆,混淆打包
- Android 代码混淆 webview混淆
- [Android]混淆Android代码
- [Android]混淆Android代码
- Android代码混淆------apk文件代码混淆
- android 代码混淆proguard
- Android项目代码混淆
- android 代码混淆总结
- android 代码混淆
- android代码混淆
- 混淆Android代码
- Android代码混淆 反编译
- android 代码混淆
- Android 代码混淆
- android 代码混淆
- Android代码混淆技术
- android 代码混淆
- Android代码混淆
- QT画图教程7:QT中写文字以及QT中int型转为QString类型
- 树莓派3-改装wifi外置天线
- kali 中间人攻击、ARP MITM、中间人攻击、Pass the Hash
- oracle数据迁移到db2数据库
- iMAG中的复用列表的使用说明
- android代码混淆
- java实例
- WebUI自动化测试的一些问题
- 安卓开发SDK等工具下载地址
- Fighting strength vs Equipment
- 大白菜安装win7
- mybatis中#{}与${}
- 程序员必读的书,StackOverflow 创始人推荐Recommended Reading for Developers
- 《极简欧洲史》 读后思考