使用 productFlavors 的一点小总结

最近因为业务需要,要做马甲包,看了网上很多文章,但是对 productFlavors 的使用做说明,但具体功能是什么却没太多相关的介绍,在些我说一下个人对 productFlavors 的感受。

个人觉得 productFlavors 有点类似子类父类的继承关系,以一套代码以核心,根据不同的 Flavor 进行不同的修改从而生成不同的 apk 包,以此达到定制化的目的。

如何使用就不多说了,以下是几个不错的链接

https://www.jianshu.com/p/4677efee7214

https://www.jianshu.com/p/29cb209197bf

https://www.jianshu.com/p/1ae5c85d2ff2

这里说一下自己在使用后的一些总结:

1.Gradle在构建应用时,会优先使用flavor所属dataSet中的同名资源。

所以如果只是 fragment 或 activity 中的页面布局不同的话,只要在不同的马甲包下创建同名的 xml 布局文件就可以了。

2.有些特殊情况,比如老板脑子发神经,说什么马甲包要特殊功能,和主包不同时。比如主包的个人中心页中没有A功能,但马甲包中的要有,这时马甲包中就要有主包中没有的文件了,方便方法是在马甲包中新建一个继承自主包的个人中心页的页面。

这样,在打包时不同名的文件就会打入包中但不会替换,而在主文件中,就要想办法替换入口了,当打马甲包时,要进入的是马甲包中的子类而不是主包中的父类。

这里介绍一个方法

在 第一行代码 中 郭霖 大神推荐每一个activity 都要有一个公共的 start 方法,如

public static void start(Context context, int actorId, String videoUrl) {
    Intent starter = new Intent(context, ActorPagerActivity.class);
    starter.putExtra(Constant.ACTOR_ID, actorId);
    starter.putExtra(Constant.VIDEO_URL, videoUrl);
    context.startActivity(starter);
}

目的在于方法知道要传入哪些函数给 activity ,如果我们把所有 start 方法都写在一个 helper 类中,即跳转类。然后在马甲包中创建子类,之后复写跳转类把去父类的地方定义成子类,这样打包时跳转类被覆盖,方法就会定向到子类去了。

而 fragment 也类似,每个 fragment 都有其 newInstance 方法

public static salaryFragmentNoticeList newInstance(Bundle bundle) {
    salaryFragmentNoticeList fragment = new salaryFragmentNoticeList();
    fragment.setArguments(bundle);
    return fragment;
}

也用上面 类似 start 的方法统一管理后统一复写的话,就能达到统一替换的方法。

 

总结下来一句话,主包中的父类管理功能。马甲包中的子类可定制页面及根据不同需求拓展一定功能。

如果接了微信的支付和登录的话,在马甲包中也有要相应路径文件,这样才调的起来。

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值