Android之ProGuard使用

目录

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 文件中的规则,保留特定的类和类成员。

Android之APK 瘦身

相关推荐
圆号本昊21 分钟前
Flutter Android Live2D 2026 实战:模型加载 + 集成渲染 + 显示全流程 + 10 个核心坑( OpenGL )
android·flutter·live2d
冬奇Lab1 小时前
ANR实战分析:一次audioserver死锁引发的系统级故障排查
android·性能优化·debug
冬奇Lab1 小时前
Android车机卡顿案例剖析:从Binder耗尽到单例缺失的深度排查
android·性能优化·debug
ZHANG13HAO2 小时前
调用脚本实现 App 自动升级(无需无感、允许进程中断)
android
圆号本昊3 小时前
【2025最新】Flutter 加载显示 Live2D 角色,实战与踩坑全链路分享
android·flutter
小曹要微笑4 小时前
MySQL的TRIM函数
android·数据库·mysql
mrsyf5 小时前
Android Studio Otter 2(2025.2.2版本)安装和Gradle配置
android·ide·android studio
DB虚空行者5 小时前
MySQL恢复之Binlog格式详解
android·数据库·mysql
liang_jy7 小时前
Android 事件分发机制(一)—— 全流程源码解析
android·面试·源码