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

相关推荐
Huang兄1 小时前
Android 项目中配置了多个 maven 仓库,但依赖还是下载失败,除了使用代理,还有其他方法吗?
android·gradle·maven
snail2012111 小时前
Flutter接入ProtoBuff和原生Android通信【性能最优】
android·flutter
難釋懷2 小时前
Android开发-常用布局
android·gitee
墨菲斯托8883 小时前
fakebook
android
s11show_1634 小时前
hz2新建Keyword页面
android
越努力越幸运~4 小时前
拆分sql数据,(shop_backup)sql文档过大(>5G)
android·adb
进击的CJR5 小时前
MySQL 8.0 OCP 英文题库解析(二)
android·mysql·开闭原则
Lu Yao_5 小时前
golang -- 如何获取变量类型
android·java·golang
EQ-雪梨蛋花汤6 小时前
【Part 2安卓原生360°VR播放器开发实战】第三节|实现VR视频播放与时间轴同步控制
android·交互·vr
拾贰_C7 小时前
【IDEA_Maven】(进阶版)永久性的更改IDEA中每个项目所依赖的Maven默认配置文件及其仓库路径
android·maven·intellij-idea