V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
befovy
V2EX  ›  Android

Android 配置中的 consumerProguardFiles

  •  
  •   befovy · 2020-02-23 13:05:02 +08:00 · 12388 次点击
    这是一个创建于 1764 天前的主题,其中的信息可能已经有所发展或是发生改变。

    自己搞了一个 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.** {
        *;
    }
    
    3 条回复    2020-02-23 17:09:15 +08:00
    winterbells
        1
    winterbells  
       2020-02-23 13:44:10 +08:00 via Android   ❤️ 2
    新建 module 时,这个东西会自动创建(应该是 AS 3.x 开始)。。。
    befovy
        2
    befovy  
    OP
       2020-02-23 14:05:37 +08:00
    @winterbells 一直不知道这个东西。 创建项目的时候用的是较早的版本
    z42514
        3
    z42514  
       2020-02-23 17:09:15 +08:00   ❤️ 1
    这个方法对于 sdk 开发很合适,我之前开发公司内部库就是这样用的。
    奈何好多人不知道,尤其是国内那些好多商业的 sdk 都是在 FAQ 中贴一大串规则文件让人复制粘贴,一点都不友好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1039 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 18:16 · PVG 02:16 · LAX 10:16 · JFK 13:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.