submodule + gradle配置实现动态打包

项目背景

最近的项目是一个通用的播放框架。内部集成了目前市面上主流的视频网站的播放sdk,比如爱奇艺、腾讯、华数等。另外,还需要支持明流的url播放。这个通用的播放框架需要在多个项目中使用,各个项目需要支持的播放方式也是不一样的。有的项目只需要支持url播放,有的项目需要支持所有的播放方式。如果统一的只提供一个jar或者aar,将导致只需要url播放的应用也需要集成一个巨大无比的库。而且,这个库里,so和资源文件体积都很大,无法通过proguard的方式减小体积。所以,有必要实现一种简单的方式,让项目能够自己配置需要集成的第三方库,以支持多个项目不同的播放需求。


如何集成?

普通的maven方式集成第三方库简单方便,但是无法实现上述需求。当然,你可以自己设计一个专门的打包脚本,针对多个不同的需求,打包不同的第三方sdk,然后上传到maven仓库给其它项目使用。但是随着需求的复杂化和集成第三方sdk的增多,你需要维护的库文件将指数级增长。submodule集成第三方库提供了一种相当灵活的集成方式。但是并没有解决上一节中提到的问题。


如何动态配置依赖?

下面以第一节提到的播放框架来做示例。在这个示例中,播放框架支持url、wasu、qiyi和tencent共四种视频资源的播放,demo中只配置了其中的3种url、wasu和qiyi,tencent的sdk并未被打包到demo中。

  • 项目结构如下图:
    项目结构

    BaseLibs是一个被很多项目依赖的项目,内部包含了一个测试demo、一个logger模块和一个widget模块。widget就是我们在第一节中提到的统一播放框架。

  • widget模块的目录结构如下图:
    widget模块的目录结构

    src目录存放播放框架的代码,sdk目录存放第三方sdk的so、jar和assets,libs里存放框架代码必须依赖的jar和aar文件。

  • widget模块的gradle配置如下图:
    widget模块的gradle配置

    图中的配置,省略了通用配置,只列出了3个关键部分。

    1、从gradle.ext中获取外部定义的video_licenses数据。如果外部没有定义,则取默认的licenses。
    2、sourceSets中,遍历licenses数组,并针对每一个license,将其对应的so库和assets文件加入编译。
    3、dependencies中,遍历所有的licenses,针对每一个license对应的jar文件,根据配置采用provided或者compile方式编译打包。

  • demo模块的gradle配置如下图:
    demo模块的gradle配置


总结

结合submodule集成第三方库和gradle的配置脚本,轻松实现了按需打包。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值