proguard-rules.pro 和 consumer-rules.pro区别
配置 ProGuard 的文件
在 Android 项目中,proguard-rules.pro 和 consumer-rules.pro 是与代码混淆(ProGuard/R8)相关的配置文件。它们的作用是告诉构建工具在代码优化和混淆阶段 应该保留哪些类、方法或字段不被混淆或移除。
proguard-rules.pro
- 用途:proguard-rules.pro 文件主要用于定义当前项目(通常是 app 模块 或 library 模块)在构建过程中应用的 ProGuard 规则。这些规则决定了哪些代码应该被混淆,哪些代码应该被保留,以及如何处理类、方法、字段等。
- 应用范围:这些规则仅适用于当前项目本身。在库项目中,这意味着这些规则只会在构建库时应用,而不会影响到使用这个库的应用项目。
- 内容示例:
-keep class com.example.yourapp.** { *; }
-keepclassmembers class com.example.yourapp.** {
<methods>;
}
- 使用场景:适用于所有需要对代码进行混淆和优化的 Android 项目,无论是应用还是库项目。
- 如何引用:在 build.gradle 中通过如下方式指定:
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
consumer-rules.pro
- 用途:consumer-rules.pro 文件用于Android Library 模块的混淆规则文件。它会 打包进 aar 文件中 ,并在其他项目依赖该库时自动合并到主项目的 ProGuard 规则中 。
- 应用范围:这些规则会被应用到使用该库的应用项目中,而不是库项目本身。这意味着当应用项目构建时,它会自动包含这些规则,确保库的代码能够正确地工作。
- 内容示例:
-keep class com.example.yourlibrary.** { *; }
-keepclassmembers class com.example.yourlibrary.** {
<methods>;
}
- 使用场景:主要用于库项目,目的是指导应用项目如何正确地处理库中的代码,以避免由于混淆导致的功能失效。
- 如何引用:确保在 build.gradle 中设置 consumerProguardFiles:
android {
defaultConfig {
consumerProguardFiles 'consumer-rules.pro'
}
}
这样在别人使用你的 aar 包时,这些规则会自动合并到他们的 ProGuard 配置中,防止因混淆导致功能异常。
总结
proguard-rules.pro
是为当前项目(应用或库)定义的 ProGuard 规则,用于项目自身的构建过程。consumer-rules.pro
是为库项目的使用者(即依赖该库的应用项目)定义的 ProGuard 规则,确保库代码在应用项目中被正确处理。
在实际开发中,库项目通常会同时使用这两种文件:proguard-rules.pro 用于保护库自身的代码,而 consumer-rules.pro 则用于指导应用项目如何处理库的代码。这样可以确保库在不同应用中都能正常工作,同时保持代码的安全性和性能。