【ProGuard探索之路系列】之三:APK代码混淆
来源:互联网 发布:linux lamp包 编辑:程序博客网 时间:2024/06/05 11:47
作者:郭嘉
邮箱:allenwells@163.com
博客:http://blog.csdn.net/allenwells
github:https://github.com/AllenWells
本文主要介绍Android应用程序APK的混淆方式。下面会以图文的形式,详尽的叙述eclipse下ProGuard的使用方法。
一 ProGuard配置文件引用
eclipse中的Android工程会有以下两个文件(较早版本的ADT是proguard.cfg文件),如图所示:
- proguard-project.txt:代码混淆配置文件。
- project.properties:Android工程属性文件,用来引用proguard-project.txt文件作代码混淆。
proguard-project.txt配置文件,初始没有任何配置选项,如下图所示:
project.properties工程属性文件,如图中红框所示,指定了两个ProGuard的配置文件,系统默认配置文件proguard-android.txt和自定义配置文件proguard-project.txt。
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
这样显得有些繁琐了,后续会把所有的配置都写在一个文件里,命名为proguard-for-apk.txt,在project.properties文件中,用以下方式引用它。
proguard.config=proguard-for-apk.txt
二 ProGuard配置文件书写
配置文件的书写因工程而异,下面给出一些常见的配置选项,并作说明。
2.1 参数选项配置
#指定不去使用混淆的类名-dontusemixedcaseclassnames#指定不去忽略非公共的库类-dontskipnonpubliclibraryclasses-verbose-ignorewarnings# 支持库包含对新平台的版本,这些版本是安全的,无需发出警告。-dontwarn android.support.**
2.2 保留选项配置
#指定保留Annotation-keepattributes *Annotation*#指定保留JavaScript接口方法-keepclassmembers class * { @android.webkit.JavascriptInterface <methods>;}-keepclassmembers class fqcn.of.javascript.interface.for.webview{ public *;}#指定保留需要在AndroidManifest.xml文件中注册的组件-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 -keepattributes *Annotation*-keep public class com.google.vending.licensing.ILicensingService-keep public class com.android.vending.licensing.ILicensingService#指定保留在布局文件中注册的方法,比如onclick属性等-keepclassmembers class * extends android.content.Context { public void *(android.view.View); public void *(android.view.MenuItem);}#指定保留需要Context和AttributeSet进行构造的类-keep public class * extends android.view.View { public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); public void set*(...);}-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int);}# 指定保留本地方法名和它们的类-keepclasseswithmembernames,includedescriptorclasses class * { native <methods>;}# 枚举类也应该被保留。-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}#保留所有具有公有访问权限的类和其公共成员-keepclasseswithmembers class *{ public *;}# 指定保留保留实现了Parcelable接口类中的静态变量-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}#指定保留静态变量-keepclassmembers class **.R$* { public static <fields>;}#指定其他需要保留的类,比如某些通过Class.forName等方式动态创建的类。# -keep public class mypackage.MyClass# -keep public interface mypackage.MyInterface# -keep public class * implements mypackage.MyInterface#指定保留所有Serialization和Parcelable-keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve();}-keepclassmembers class * implements android.os.Parcelable { static android.os.Parcelable$Creator CREATOR;}
2.3 压缩选项配置
2.4 优化选项配置
#删除Log代码-assumenosideeffects class android.util.Log { public static boolean isLoggable(java.lang.String, int); public static int v(...); public static int i(...); public static int w(...); public static int d(...); public static int e(...);}#指定不去优化-dontoptimize#指定不去校验-dontpreverify
2.5 混淆选项配置
以上说明 的配置文件,点此下载,欢迎大家反馈交流。
“`
0 0
- 【ProGuard探索之路系列】之三:APK代码混淆
- 【ProGuard探索之路系列】之二:ProGuard配置选项
- 【ProGuard探索之路系列】之一:ProGuard开篇
- android 代码混淆之proguard
- JAVA之代码混淆proguard
- JAVA之代码混淆proguard基础(三)从异常堆栈中还原 ProGuard 混淆过的代码
- JAVA之代码混淆proguard基础(一)
- JAVA之代码混淆proguard基础(二)
- JAVA之代码混淆proguard基础
- ProGuard之——代码混淆
- Android进阶之ProGuard代码混淆
- Android中代码混淆之proguard
- Android混淆之ProGuard
- Android 多渠道打包之混淆文件ProGuard技术详解-特别篇(打包系列教程之三)
- Android开发之反编译、apk重新打包、apk混淆、apk对齐与不对齐、jar混淆、proguard
- Android开发之反编译、apk重新打包、apk混淆、apk对齐与不对齐、jar混淆、proguard
- Android系统工具之Proguard 代码混淆器
- Android之ProGuard混淆器
- Github-iOS备忘
- Web网站性能优化的相关技术
- android颜色设置与数值的关系表
- tomcat连接池配置
- 优先队列(堆) - C语言实现(摘自数据结构与算法分析 C语言描述)
- 【ProGuard探索之路系列】之三:APK代码混淆
- Java&Android代码注释规范
- 截取图片正中间
- 黑马程序员——异常处理
- 递归替换算法之尾递归
- 使用AChartEngine画动态曲线图
- SGU 105. Div 3
- 【日常学习】【SPFA负环+数组模拟链表实现】codevs2645 Spore题解
- 无所事事