自己搞了一个 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.** {
    *;
}
|  |      1300      2020-02-23 13:44:10 +08:00 via Android  2 新建 module 时,这个东西会自动创建(应该是 AS 3.x 开始)。。。 | 
|      2befovy OP @winterbells 一直不知道这个东西。 创建项目的时候用的是较早的版本 | 
|  |      3z42514      2020-02-23 17:09:15 +08:00  1 这个方法对于 sdk 开发很合适,我之前开发公司内部库就是这样用的。 奈何好多人不知道,尤其是国内那些好多商业的 sdk 都是在 FAQ 中贴一大串规则文件让人复制粘贴,一点都不友好 |