ProGuard配置详解:保护Android应用安全
"ProGuard属性详解" 在Android开发中,ProGuard是一款强大的代码优化、压缩、混淆和预校验工具。它能帮助开发者减小程序体积,提高运行效率,并保护应用源码不被轻易反编译。本文将详细介绍`proguard-project.txt`文件中的各项配置指令,以便理解混淆时的代码编写规则。 1. `-optimizationpasses 5`:这个选项指定了优化过程的次数。在这里设置为5,意味着ProGuard会执行5次优化步骤,以尽可能地优化代码。 2. `-dontusemixedcaseclassnames`:此选项防止ProGuard生成大小写混合的类名。启用此选项可以避免在某些平台上的兼容性问题。 3. `-dontskipnonpubliclibraryclasses`:默认情况下,ProGuard会跳过非公共库类。关闭此选项意味着所有库类,包括非公共的,都会被处理。 4. `-dontpreverify`:禁用预验证。预验证是Dalvik虚拟机对优化过的字节码进行的一次检查,但这一步在Android 5.0(API级别21)及以上版本已不再需要。 5. `-verbose`:开启详细日志,输出更多关于ProGuard处理过程的信息,有助于调试和理解混淆过程。 6. `-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*`:这是一组优化规则,禁止对代码简化、字段处理和类合并等特定优化操作。这些可能是为了保持某些代码行为的稳定,或者避免与第三方库冲突。 7. `-keeppublicclass * extends android.app.Activity`:这条规则指示ProGuard保留所有继承自`Activity`的公共类。这是为了确保应用的界面组件不会被混淆,因为它们是Android系统识别的关键部分。 8. 类似的,还有其他如`Application`、`Service`、`BroadcastReceiver`、`ContentProvider`、`BackupAgentHelper`和`Preference`的保留规则,都是为了保持这些关键组件的原貌。 9. `-keeppublicclass com.android.vending.licensing.ILicensingService`:保留特定的类或接口,如这里的Google Play许可服务接口,以确保与外部服务的通信不受影响。 10. `-keepclasseswithmembernames class * { native <methods>; }`:保留包含原生方法(C/C++代码)的类。 11. `-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); }` 和 `-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int); }`:这两个规则保留了带有特定构造函数的类,通常用于自定义视图组件。 12. `-keepclassmembers class * extends android.app.Activity { ... }`:保留`Activity`子类中的特定成员,比如生命周期回调方法,以确保它们不被混淆。 以上就是`proguard-project.txt`文件中部分混淆规则的详细解释。通过理解和正确配置这些参数,开发者可以确保在混淆过程中保留关键功能,同时优化代码,提高应用性能并增强安全性。在实际项目中,开发者应根据具体需求调整这些规则,以达到最佳的混淆效果。
-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);
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 46
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 深入理解23种设计模式
- 制作与调试:声控开关电路详解
- 腾讯2008年软件开发笔试题解析
- WebService开发指南:从入门到精通
- 栈数据结构实现的密码设置算法
- 提升逻辑与英语能力:揭秘IBM笔试核心词汇及题型
- SOPC技术探索:理论与实践
- 计算图中节点介数中心性的函数
- 电子元器件详解:电阻、电容、电感与传感器
- MIT经典:统计自然语言处理基础
- CMD命令大全详解与实用指南
- 数据结构复习重点:逻辑结构与存储结构
- ACM算法必读书籍推荐:权威指南与实战解析
- Ubuntu命令行与终端:从Shell到rxvt-unicode
- 深入理解VC_MFC编程:窗口、类、消息处理与绘图
- AT89S52单片机实现的温湿度智能检测与控制系统