Android 的多渠道打包

本文介绍Android应用多渠道打包的方法和意义,包括如何使用友盟SDK进行渠道统计,以及Gradle配置实现不同渠道的自动化打包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是渠道:

渠道是国内Android平台特有的名词
由于google play无法使用,因此出现了众多的市场
一个渠道代表一个应用市场

应用场景:

如果只针对某个平台,则不需要多渠道(几乎不存在)
只要应用有多种下载途径,就需要多渠道

多渠道的意义:

通过多渠道,我们可以详细统计app被下载的途径
通过多渠道,我们可以查看app在每个渠道中的表现
通过多渠道,可以更利于app的推广

多渠道打包的原理:

就是为我们每个平台或市场的apk指定一个唯一的标识符
在Android中我们通常在Manifest.xml为其指定
在代码中指定,但是一般不用

使用友盟步骤:

1、去友盟官网注册并创建应用,获取appkey
2、下载sdk并集成
3、在AndroidManifest.xml配置渠道号和appkey
</application>

    <!-- 友盟统计相关meta-data -->
    <meta-data
         android:name="UMENG_APPKEY"
         android:value="5a433eb3b27b0a188000000f"/>
    <meta-data
         android:name="UMENG_CHANNEL"
         android:value="${UMENG_CHANNEL_VALUE}"/>

</application>

${UMENG_CHANNEL_VALUE} 使用这个占位符是为了方便在gradle中动态配置。

4、在module中的builde.gradle中编写多渠道脚本
defaultConfig {
        applicationId "com.example.administrator.mymulti_channel_package"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true  //突破应用方法数65535的一个限制
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"] //默认的渠道名,可以不设置此项
    }

假设我们需要以下渠道:

productFlavors {
        huawei{
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei"]
        }

        wandoujia{
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }

        xiaomi{
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
}

或者统一编写:

 //真正的多渠道脚本支持
    productFlavors {
        huawei{
        }
       wandoujia{
        }
       xiaomi{
        }
    }
    //批量修改
    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }

我的builde.gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.2"
    defaultConfig {
        applicationId "com.example.administrator.mymulti_channel_package"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true  //突破应用方法数65535的一个限制
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"] //默认的渠道名,可以不设置此项
    }

    //添加我们的签名文件配置
    signingConfigs {
        debug {
            storeFile file("common.jks")
            storePassword "123456"
            keyAlias "libing"
            keyPassword "123456"
        }
        //为我们的release添加签名文件配置
        release {
            storeFile file("common.jks")
            storePassword "123456"
            keyAlias "libing"
            keyPassword "123456"
        }
    }


    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release   //指定签名文件,如下signingConfigs
            //指定我们release包的输出文件名就是我们的渠道名字
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith(".apk")) {
                        def fileName = "${variant.productFlavors[0].name}" + ".apk"
                        output.outputFile = new File(outputFile.parent, fileName);
                    }
                }
            }
        }
        debug {
            signingConfig signingConfigs.debug  //在debug模式下,使用正式的签名文件
        }
    }

    productFlavors {
        huawei {
//            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei"]
        }

        wandoujia {
//            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }

        xiaomi {
//            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
    }

    //批量修改
    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }

}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile files('libs/umeng-analytics-7.4.1.jar')
    compile files('libs/umeng-common-1.4.1.jar')
}
5、执行打包命令 ./gradlew assembleRelease

除了使用AndroidStudio图形打包操作以外,我们也可以使用命令行进行打包操作,具体步骤如下:

在AndroidStudio窗口左下角打开Terminal面板,输入gradlew assembleRelease命令

如果系统中没有安装Gradle,则会自动下载完成安装及初始化, 初始化完成后,再次执行 gradlew assembleRelease:
这里写图片描述

注意:使用Gradle进行安卓编译时,出现如下错误:

Could not get unknown property ‘release’ for SigningConfig container.
原因:
在主module下的buildTypes{}中使用使用了signingConfig signingConfigs.release,但是由于粗心,将signingConfigs{}放到了buildType{}的后面,导致编译的时候无法找到,当然还有一种可能,那就是signingConfigs{}中真的没有声明release这个属性.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值