Android studio结合友盟多渠道打包

一、在AndroidManifest.xml中设置

<meta-data
        android:name="UMENG_APPKEY"
        android:value="xxxxxxxxxxxxxxxxxxx" /><!--友盟 Appkey 自己应用注册申请来的-->
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}" /> <!--渠道号,多渠道这里使用了占位符$-->

二、build.gradle(app目录下)

    1.在defaultConfig节点下添加默认渠道号

 manifestPlaceholders = [UMENG_CHANNEL_VALUE: "default_channel"]//添加一个默认渠道号

    2.和defaultConfig同节点添加一个productFlavors节点,内容如下:

 //添加渠道号
    productFlavors {
        tencent{}
        _360{}
        baidu{}
        huawei{}
        xiaomi{}
        wandoujia{}
//        oppo {}
//        vivo {}
    }

 productFlavors 支持多渠道打包,使用它的话,可以为下面每一个市场打包一个apk,里面也是用了manifestPlaceholders 使用相关的值替换了UMENG_CHANNEL_VALUE 。

     3.和defaultConfig同节点添加如下内容:

 productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }

        会遍历productFlavors下面所有的名称替换UMENG_CHANNEL_VALUE ;

 

      4.最后使用gradlew assembleRelease 打生产包 ;gradlew assembleDebug 打测试包 



 附加:android获取app当前的渠道号或者获取application中的任意meta-data(以友盟的多渠道打包为例)

 /**
     * 获取app当前的渠道号或application中指定的meta-data
     *
     * @return 如果没有获取成功(没有对应值,或者异常),则返回值为空
     */
    public static String getAppMetaData(Context context, String key) {
        if (context == null || TextUtils.isEmpty(key)) {
            return null;
        }
        String channelNumber = null;
        try {
            PackageManager packageManager = context.getPackageManager();
            if (packageManager != null) {
                ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
                if (applicationInfo != null) {
                    if (applicationInfo.metaData != null) {
                        channelNumber = applicationInfo.metaData.getString(key);
                    }
                }
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return channelNumber;
    }

例如在需要的地方获取umeng渠道名(清单文件注册的umeng见文章开头处)

String channelNumber = getAppMetaData(getBaseContext(), "UMENG_CHANNEL");//获取app当前的渠道号

 附加:友盟多渠道打包结合android studio3.0+自定义apk名

applicationVariants.all { variant ->
                variant.outputs.all { output ->

                    def fileName = "appindata${variant.versionName}_${variant.productFlavors[0].name}_release_${releaseTime()}.apk"
                    def outFile = output.outputFile
                    if (outFile != null && outFile.name.endsWith('.apk')) {
                        outputFileName = fileName  //  output.outputFile 改为 outputFileName
                    }
                }
            }
def releaseTime() {
    return new Date().format("yyyy.MM.dd", TimeZone.getTimeZone("UTC"))
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值