多渠道分包详解

惯例:先上图后说话,谢谢各位伙伴的支持! 有你们是我的福分

                            


左图为正常打包(不包括支付) ,右图带有支付功能的包

每日一言:世界没有完美,但努力可以接近完美。


将分包分为三个阶段:

1.基础的,一维度;

2.升级,多维度但都在一个文件中;

3.多维度,并且有顺序,分文件打包。

                                

一.配置文件

1.AndroidManifest.xml 中加入<meta-data>中的内容,SMART_POS_VALUE为变量,下面会用到

<application>
 <meta-data
        android:name="SMART_POS"
        android:value="${SMART_POS_VALUE}" />
</application>

2.项目的build.gradle 的{android }中加入以下内容,flavorDimensions为多维度,比如:是否可以支付类型,品牌类型;applicationId 表示在同一手机可以安装不同功能的几个应用

//定义了可能用到的维度和顺序
flavorDimensions "default", "version"
//防止不会覆盖安装,多渠道支持
productFlavors {
    pay {
        applicationId "com.jiaxufei.framework.pay"
        dimension "default"
    }
    nopay {
        applicationId "com.jiaxufei.framework.nopay"
        dimension "default"
    }
    huawei {
        dimension "version"
    }
    xiaomi {
        dimension "version"
    }
}
//遍历渠道,将每个渠道的name替换到SMART_POS_VALUE中
productFlavors.all {
    flavor -> flavor.manifestPlaceholders = [SMART_POS_VALUE: name]
}

二.在需要调用的地方调用下面的方法,比如:点击付款按钮,在pay的环境下是可以支付的,但是在nopay的环境下是不可以支付的

/**
 * 分情况执行
 */
public void pack(){
    try {
        //从配置文件获取
        ApplicationInfo info=this.getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
        String value=info.metaData.getString("SMART_POS");
        switch (value){
            case "pay":
                Intent intent=new Intent(this, UserLoginActivity.class);
                intent.putExtra("title","可以支付");
                startActivity(intent);
                Toast.makeText(this,"可以支付",Toast.LENGTH_SHORT).show();
                break;
            case "nopay":
                Intent intent1=new Intent(this, UserLoginActivity.class);
                intent1.putExtra("title","不可以支付");
                startActivity(intent1);
                Toast.makeText(this,"不可以支付",Toast.LENGTH_SHORT).show();
                break;
        }
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
}


三.重新编译gradle,如果是基础功能,以上部分已经够用,所有的文件都写在main里面

    但是为了是项目更加清晰,规范,我们进行了如下的优化:在src中新建 Android resource file ,Source set 下拉选择型,其它默认就行,在pay文件中可以新建java文件,layout,values,动画等文件



四.运行项目app会生成不同的包,画红框框的是我们测试的内容,如果打普通包(不能支付),是不会把支付包打进去的。


 感谢你的阅读,共同学习,一起进步,有任何问题可以留言,讨论。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄毛火烧雪下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值