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

相关推荐
踢球的打工仔2 小时前
PHP面向对象(7)
android·开发语言·php
安卓理事人2 小时前
安卓socket
android
安卓理事人8 小时前
安卓LinkedBlockingQueue消息队列
android
万能的小裴同学9 小时前
Android M3U8视频播放器
android·音视频
q***57749 小时前
MySql的慢查询(慢日志)
android·mysql·adb
JavaNoober10 小时前
Android 前台服务 "Bad Notification" 崩溃机制分析文档
android
城东米粉儿10 小时前
关于ObjectAnimator
android
zhangphil11 小时前
Android渲染线程Render Thread的RenderNode与DisplayList,引用Bitmap及Open GL纹理上传GPU
android
火柴就是我12 小时前
从头写一个自己的app
android·前端·flutter
lichong95113 小时前
XLog debug 开启打印日志,release 关闭打印日志
android·java·前端