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