consumer-rules.pro和 proguard-rules.pro

注意:这个过程是针对 自己打包的aar,并依赖自己的aar(非lib module 模式)

结构

App Module (com.android.application)
└── 依赖
└── Lib Module (com.android.library)
├── proguard-rules.pro <-- 不会被 App 使用 ❌
└── consumer-rules.pro <-- 会被 App 使用 ✅

场景

1.在某个 Library 模块(AAR) 中定义了与 libvlc 相关的类或接口;
2.在该模块的 proguard-rules.pro 中添加了保留规则:
3.构建 App 后仍然出现 FindClass(...MediaPlayer$Title) failed 错误 ❌;
3.把规则移到 consumer-rules.pro 后问题解决 ✅。

❓ 为什么会这样?

🧠 因为 proguard-rules.pro 只作用于当前模块,而不会传递给依赖它的 App 模块。

1.当你在 Library 模块中使用 proguard-rules.pro 添加混淆规则时:
这些规则只对当前 Library 的代码进行混淆控制;
不会自动合并进 App 的 ProGuard 配置中;
所以 App 构建时这些规则没有生效,导致 org.videolan.libvlc.MediaPlayer$Title被混淆或删除 ➜ JNI 找不到类 ➜ FindClass 失败。

2.而当你将规则写入 consumer-rules.pro:
Android Gradle 插件会在构建 App 时自动合并该文件内容;
App 的 ProGuard/R8 配置中包含了这些规则;
因此 MediaPlayer$Title 类名保留了下来 ➜ JNI 成功找到类 ➜ 正常运行 ✅。

解决方案

  1. ✅ 正确使用 consumer-rules.pro 来保留 SDK/AAR 中暴露的类
    如果你开发的是一个 对外提供功能的 Library 模块(如封装 libvlc 功能的 SDK),请将所有需要保留的 ProGuard 规则写入:
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容