目录
- [1. 启用 ProGuard](#1. 启用 ProGuard)
- [2.创建 ProGuard 配置文件](#2.创建 ProGuard 配置文件)
- [3.配置 ProGuard 规则](#3.配置 ProGuard 规则)
- [4.常见的 ProGuard 规则](#4.常见的 ProGuard 规则)
- 5.构建项目
- 6.检查混淆结果
- 7.调试和修复问题
ProGuard 是一种代码混淆和优化工具,通常用于减小 APK 文件大小并保护源代码不被反编译。
1. 启用 ProGuard
在 Android 项目中,ProGuard 通常配置在 build.gradle 文件中。要启用 ProGuard,你需要在 buildTypes 中进行配置。
java
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
- minifyEnabled true:启用代码混淆和优化。
- proguardFiles:指定 ProGuard 配置文件。getDefaultProguardFile('proguard-android-optimize.txt') 使用 Android 提供的默认配置文件,proguard-rules.pro 是你自定义的配置文件。
2.创建 ProGuard 配置文件
在项目的 app 目录下创建一个名为 proguard-rules.pro 的文件(如果它还不存在)。这个文件用于定义 ProGuard 的规则。
3.配置 ProGuard 规则
在 proguard-rules.pro 文件中,你可以添加自定义的 ProGuard 规则。例如:
java
# 保留所有类和类成员
-keep class com.example.app.** { *; }
# 保留所有带有特定注释的类和类成员
-keep @interface com.example.app.MyAnnotation
# 保留特定类的构造函数
-keepclassmembers class com.example.app.MyClass {
public <init>(...);
}
# 保留所有带有自定义注释的字段和方法
-keepclassmembers class * {
@com.example.app.MyAnnotation *;
}
# 优化代码
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
# 忽略警告
-dontwarn com.example.app.**
4.常见的 ProGuard 规则
- **保留类和类成员:**防止 ProGuard 混淆特定的类和类成员。
java
-keep class com.example.app.** { *; }
- 保留注解和反射: 防止 ProGuard 混淆使用注解和反射的代码。
java
-keepattributes *Annotation*
-keep class * implements java.lang.annotation.Annotation { *; }
- **保留序列化类:**防止 ProGuard 混淆实现 Serializable 接口的类。
java
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private 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();
}
5.构建项目
配置完成后,使用以下命令构建项目的 release 版本:
java
./gradlew assembleRelease
debug版本命令
java
./gradlew assembleDebug
ProGuard 会在构建过程中自动运行,并生成优化和混淆后的 APK 文件。
6.检查混淆结果
ProGuard 会生成一个映射文件(mapping file),用于将混淆后的代码映射回原始代码。这个文件通常位于
java
app/build/outputs/mapping/release/mapping.txt。
7.调试和修复问题
如果在启用 ProGuard 后遇到问题,可以通过以下步骤进行调试和修复:
- 检查日志:查看构建日志和运行时日志,找出混淆导致的问题。
- 调整 ProGuard 规则:根据日志信息,调整 proguard-rules.pro 文件中的规则,保留特定的类和类成员。