Android 配置中的 consumerProguardFiles

2020-02-23 13:05:02 +08:00
 befovy

自己搞了一个 aar,并在一个开源库中使用。

https://github.com/befovy/fijkplayer 双击 666 ✨

由于这个 aar 项目本身使用 NDK, 运行时需要查找一些 java class。一旦这些 java class 在 android 打包的时候被混淆,运行时就会报错。

所以需要在 proguard 文件中 keep 一些 java class。但虽然我在 aar 项目打包时 keep 了必要的 java class,但防不住用户 app 打包时对这些 java class 再次混淆。 之前我的办法就是在文档中提示用户,混淆时要加上一些 keep。但还是很多人不看文档,不断上报此类 issue。

最近我发现一个终极解决办法。 在 aar gradle 中加入 consumerProguardFiles,然后 aar 库项目就会把 proguard 文件打包到 aar 输出中,app 项目用到这中 aar,会在打包时自动应用 aar 中自带的 proguard 文件。完美解决了此类问题。


具体解决方案。

aar 项目中的 gradle 配置。

android {
    defaultConfig {
        consumerProguardFiles 'proguard-rules.pro'
    }
}

aar 项目的 proguard-rules.pro 文件

-keep class tv.danmaku.ijk.media.player.** {
    *;
}
7786 次点击
所在节点    Android
3 条回复
winterbells
2020-02-23 13:44:10 +08:00
新建 module 时,这个东西会自动创建(应该是 AS 3.x 开始)。。。
befovy
2020-02-23 14:05:37 +08:00
@winterbells 一直不知道这个东西。 创建项目的时候用的是较早的版本
z42514
2020-02-23 17:09:15 +08:00
这个方法对于 sdk 开发很合适,我之前开发公司内部库就是这样用的。
奈何好多人不知道,尤其是国内那些好多商业的 sdk 都是在 FAQ 中贴一大串规则文件让人复制粘贴,一点都不友好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/646787

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX