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 瘦身

相关推荐
巴博尔19 分钟前
UNIAPP中NVUE页面 动画
android·前端·javascript·ios·uni-app
abc_ABC123A5 小时前
flutter开发安卓APP所需搭建的环境
android
xq95276 小时前
Google 授权登录 V2 接入文档 王者归来
android
李少兄7 小时前
MySQL分页重复问题深度剖析
android·数据库·mysql
_李小白8 小时前
【android opencv学习笔记】Day 24: 最大稳定极值区域
android·opencv·学习
问心无愧05139 小时前
ctf show web入门257
android·前端·笔记
张小潇9 小时前
AOSP15 WMS/AMS系统开发 - 远程动画 (ShellAnimation) 源码深度分析
android
朱涛的自习室10 小时前
30天11万行代码,我用 Trae 和 Gemini 造了个 AI 测试引擎
android·前端·人工智能
Digitally10 小时前
如何删除三星 Galaxy 手机中的重复音乐?
android
ch_ziyuan10 小时前
2026新优化神马TV8.5影视点播系统保姆级搭建教程:三后台配置+反编译修改
android·ios·php