浅谈Android多渠道打包

本文介绍如何使用友盟SDK实现Android应用的多渠道打包,包括SDK集成、配置渠道号及AppKey,并通过Gradle脚本自动化生成不同渠道的APK。


注:如转载,请标明出处!

多渠道简介

        渠道是国内Android平台特有的名词,由于google play无法使用,因此出现了众多的市场。所以我们可以理解为一个渠道即代表一个应用市场。所以当我们研发的app应用需要提供多种下载途径,就会用到多渠道。例如:官网下载,豌豆荚下载,应用宝下载等。通过多渠道,可以更详尽的统计app被下载的途径,可以查看app在每个渠道上的表现,可以更有利于我们的app推广。

多渠道打包的实现

        在多渠道打包中,本人习惯用友盟来进行统计等业务需求。那么下面让我来详细的讲解一下使用友盟的步骤:
        1.下载sdk并集成。
        2.在manifest.xml中配置渠道号和Appkey。
        3.在应用module中的build.gradle中编写多渠道脚本。(大家如果有需求的话,可以去学习一个这个脚本,本文中只对需求需要的脚本语言进行编写)

首先让我们去友盟官网获取唯一的appkay



然后在你项目中app下的build.gradle中dependencies中添加以下代码进行sdk集成:

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

下面我们需要对manifest.xml进行编写了:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.liuzhuang.myipctext">

    //切记要添加权限
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        //value为之前得到的唯一appkey
        <meta-data android:value="5850a2829f06fd5b05001ba3" android:name="UMENG_APPKEY"/>
        //value为Channel ID(渠道号),此时让我们用占位符来代替
        <meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/>
    </application>

</manifest>

下面进行最重要也是最复杂的一步,就是在build.gradle中编写主要的脚本了:

android {
    compileSdkVersion 24
    buildToolsVersion "25.0.0"
    defaultConfig {
        applicationId "com.example.liuzhuang.myipctext"
        minSdkVersion 18
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        multiDexEnabled true  //突破应用方法数65535的一个限制
        manifestPlaceholders = [UMENG_CHANNEL_VALUE:"umeng"]//添加渠道,默认是友盟渠道

    }
    productFlavors{
        //可以直接如注释掉的一样写,但是为了方便,我定义了productFlavors.all来循环,只需要在productFlavors中写:渠道名{}就可以了。
        xiaomi{
//            manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        wandoujia{
//            manifestPlaceholders=[UMENG_CHANNEL_VALUE: "wandoujia"]
        }
    }
    productFlavors.all{
        flavor -> flavor.manifestPlaceholders=[UMENG_CHANNEL_VALUE: name]
    }

    //添加签名文件位置
    signingConfigs {
        debug {}
        //这里是签名的信息,这里就不多介绍了
        release {
            storeFile file("appkey.jks")
            storePassword "123456"
            keyAlias "nihao"
            keyPassword "123456"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            //指定去执行signingConfigs的release
            signingConfig signingConfigs.release
            //指定我们release包的输出文件名就是我们的渠道名字
            applicationVariants.all{
                variant -> variant.outputs.each{
                    output -> def outFile=output.outputFile
                        if (outFile!=null&&outFile.name.endsWith(".apk")){
                            def fileName="${variant.productFlavors[0].name}"+".apk"
                            output.outputFile = new File(outFile.parent, fileName);

                        }
                }
            }
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.umeng.analytics:analytics:latest.integration'
    testCompile 'junit:junit:4.12'

}

到此时,基本我们的准备工作已经完成,下面就是检验成果的时候了,要实现多渠道打包的最后一步,我们还需要控制台,下面是一些打包的语句:

    ./gradlew assembleRelease   //去自动的打出所有渠道的包
    ./gradlew assemblewandoujiaRelease   //打单独指定的包

这是最基础的打包方式,如果你使用的是studio,那么它已经为你提供了一个快捷的方法


在Gradle中Tasks下的build中找到相应的语句,然后直接点击运行就可以了。是不是简单了不少呢。

总结

到这里,我们的多渠道打包就已经有完成了。当然了,多渠道打包并不仅仅这一种第三方,还有百度多渠道打包等,只是本人习惯用友盟而已,如果猿友们有别的第三方需求不明白,可以给我留言。最后谢谢审阅。希望我们共同进步。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值