Android--多渠道打包那些事儿

为什么要签名打包

签名是为了标识唯一程序,因为每个App间的包名是可能重复的。

什么是多渠道

渠道是国内Android的特有名词,因为google play不能在国内使用,因此出现了众多市场 ,例如华为,小米,乐视应用商店,华为应用商店,就是一个渠道。小米应用商店又是一个渠道。一个渠道就代表一个市场。

使用场景

如果应用只针对某个平台,则无需多渠道(几乎不存在),只要应用提供多种下载途径,就会用到多渠道,例如:官网下载,应用宝下载,360下载。

标识渠道名的作用

打包会生成各渠道对应的App,通过该渠道的表现(下载量,和日活),而相应的决定在这个渠道上是否要加大力度推广等。

友盟统计

a)添加友盟统计依赖

build.gradle

 implementation 'com.umeng.analytics:analytics:latest.integration'

b)在AndroidManifest配置相关信息

AndroidManifest.xml

     <!--友盟统计meta-->
        <!--app key-->
        <meta-data
            android:name="UMENG_APPKEY"
            android:value="588c5ab6ae1bf87552001aee"/>
        <!--渠道号-->
        <!--这里写占位符-->
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENC_CHANNEL_VALUE}"/>

c)build.gradle动态替换占位符

build.gradle中配置默认的渠道号信息,如果没有添加其他渠道,那么就是默认的渠道。

build.gradle

  defaultConfig {
        applicationId "rc.loveq.umengdemo"
        minSdkVersion 21
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        manifestPlaceholders = [UMENC_CHANNEL_VALUE: "umeng"]
        flavorDimensions "versionCode"
    }

一般我们是在release中打多渠道包

signingConfigs {
        debug {}
        //为release添加签名文件配置
        release {
            storeFile file("umeng.jks")
            storePassword "umeng123"
            keyAlias "key0"
            keyPassword "umeng123"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }

添加渠道信息

 productFlavors {
        xiaomi{
            manifestPlaceholders = [UMENC_CHANNEL_VALUE: "xiaomi"]
        }
        wandoujia{
            manifestPlaceholders = [UMENC_CHANNEL_VALUE: "wandoujia"]
        }
    }

当然了如果觉得上面多渠道的配置麻烦,还可以通过这样配置

productFlavors {
        xiaomi {
        }
        wandoujia {
        }
    }
    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [UMENC_CHANNEL_VALUE: name]
    }

通过上面三步,就完成了多渠道的配置了,下面我们开始打包,在控制台输入

gradlew assembleRelease

这将打出所有的release包,此时outputs目录是这样的
这里写图片描述
可以看到,wandoujia包和xiaomi包已经打出来了。在友盟控制平台可以看到
这里写图片描述
证实我们多渠道打包已经成功。

gradlew assembleDebug

打出所有的debug

gradlew assemblexiaomiRelease

打出小米Release

根据不同渠道打的app_name

有时候根据渠道的不同,打对应的app_name,我们可以这样做

    productFlavors {
        xiaomi {
            resValue "string" ,"app_name","xiaomi_app"
        }
        wandoujia {
            resValue "string","app_name","wandoujia_app"
        }
    }

注意:如果这样做必须把在strings.xml中原有的app_name去掉,不然编译不通过。

根据功能不同同时安装两个App

有时候会有两个不同功能的app,但是因为包名相同不能同时安装到手机,这样会给测试带来不便,在打包的时候我们可以这样做

    productFlavors {
        okhttp {
            applicationIdSuffix "okhttp"
            resValue "string", "app_name", "okhttp_app"
        }
        volley {
            applicationIdSuffix "volley"
            resValue "string", "app_name", "volley_app"
        }
    }

可以看到,同时两个app都安装上了。
这里写图片描述

项目例子下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值