天天看点

android多渠道打包一、为什么要进行多渠道打包?二、怎么样统计各个渠道的下载量呢?三、Gradle打包(本例以友盟统计为例)四、命令行打包(本例以友盟统计为例)五、文章参考

美团多渠道打包以快出名,早有耳闻,但总觉得神龙见首不见尾,大多文章都是讲原理的东西,却始终难懂到底怎么样用,今天就以初学者的姿态一边探索,一边总结,也希望能帮住大家少走写冤枉路。

首先,明白几个问题:

一、为什么要进行多渠道打包?

安卓应用商店(一个商店也叫做一个渠道,如360,baidu,xiaomi)众多,大大小小几百个,我们发布应用之后需要统计各个渠道的用户下载量,所以才有了多渠道打包。

二、怎么样统计各个渠道的下载量呢?

现在有比较成熟的第三方应用帮我们实现统计功能(比如友盟、腾讯统计分析),统计的本质就是收集用户信息传输到后台,后台生成报表,帮助我们跟踪分析并完善app。通过系统的方法已经可以获取到,版本号,版本名称,系统版本,机型,地区等各种信息,唯独应用商店(渠道)的信息我们是没有办法从系统获取到的,所以我们就人为的在apk里面添加渠道信息(其实就用一个字段进行标识,如360,baidu),我们只要把这些信息打包到apk文件并将信息传输到后台,后台根据这个标识,可以统计各个渠道的下载量了,并没有多么的高大上。

说了那么多,其实多渠道打包只需要关注两件事情:

  • 将渠道信息写入apk文件
  • 将apk中的渠道信息传输到统计后台

其实网上大多数文章都只是告诉读者“怎么样将渠道信息写入apk文件”这一个步骤,导致一些初学者摸不着头脑(我就是其中一个),那么,然后呢?这样就行了吗?总觉得缺了点什么。

三、Gradle打包(本例以友盟统计为例)

1:在AndroidMainfest.xml配置可动态替换的渠道参数**

<meta-data
    android:name="UMENG_CHANNEL"
    android:value="xiaomi" /><!--渠道号为:小米-->
           

如果想动态的替换渠道号怎么办呢?

<meta-data

android:name="UMENG_CHANNEL"

android:value="${CHANNEL_ID}" /><!--动态替换渠道号-->
           

${CHANNEL_ID}

为占位符,其中的

CHANNEL_ID

可以自己任意定义

2:在build.gradle设置productFlavors

android {  
    productFlavors {
        xiaomi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        _360 {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
        }
        baidu {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }
        wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
    }  
}
           

或者批量修改

android {  
    productFlavors {
        xiaomi {}
        _360 {}
        baidu {}
        wandoujia {}
    }  

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

3:使用gradle打包

AS为我们提供了图形界面的方式,点击菜单栏 —> Build —> Generate Signed APK (输入相关的签名证书路径和密码)—> 一步步下去 —> Flavors中全选—> Finish.

android多渠道打包一、为什么要进行多渠道打包?二、怎么样统计各个渠道的下载量呢?三、Gradle打包(本例以友盟统计为例)四、命令行打包(本例以友盟统计为例)五、文章参考
android多渠道打包一、为什么要进行多渠道打包?二、怎么样统计各个渠道的下载量呢?三、Gradle打包(本例以友盟统计为例)四、命令行打包(本例以友盟统计为例)五、文章参考

四、命令行打包(本例以友盟统计为例)

1:在AndroidMainfest.xml配置可动态替换的渠道参数

<meta-data
    android:name="UMENG_CHANNEL"
    android:value="xiaomi" /><!--渠道号为:小米-->
           

如果想动态的替换渠道号怎么办呢?

<meta-data

android:name="UMENG_CHANNEL"

android:value="${CHANNEL_ID}" /><!--动态替换渠道号-->
           

${CHANNEL_ID}

为占位符,其中的

CHANNEL_ID

可以自己任意定义

2:在项目的build.gradle文件中设置打包签名信息 signingConfigs:

新浪微博SSO登录,微信分享这些都需要签名打包,才能看到效果,设置默认签名文件为自己的签名jks,这样就不需要打包了直接运行起来就是正式的签名。

在android.signingConfigs{}下定义一个或者多个签名信息,然后在buildTypes{}配置使用即可。

在app目录下添加你的.jks,然后app的build.gradle文件中的增加以下内容:

(1)debug版本

android {  
    signingConfigs {  
        debug {  
            storeFile file("WuXiaolong.jks")
            storePassword 'android'
            keyAlias 'android'
            keyPassword 'android'
        }          
    }   
}
           

buildTypes没有配置,也是直接取得debug,是不是不配置默认取得是debug呢?

(2)release版本

android {  
    signingConfigs {  
        release {  
            storeFile file("WuXiaolong.jks")
            storePassword 'android'
            keyAlias 'android'
            keyPassword 'android'
        }          
    }  
    buildTypes {
        debug {
            signingConfig signingConfigs.release
        }        
    }
}
           

3:在build.gradle设置productFlavors

android {  
    productFlavors {
        xiaomi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        _360 {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
        }
        baidu {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }
        wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
    }  
}
           

或者批量修改

android {  
    productFlavors {
        xiaomi {}
        _360 {}
        baidu {}
        wandoujia {}
    }  

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

4:使用命令行打包

在AS的内置终端Terminal工具中执行命令:

./gradlew assembleRelease
(所有生成的apk在项目的build\outputs\apk下)
           

五、文章参考

http://www.jianshu.com/p/2f2ce33e670f

http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/

http://wuxiaolong.me/2016/04/01/gradle4android3/

https://as.quanke.name/%E5%A4%9A%E6%B8%A0%E9%81%93%E6%89%93%E5%8C%85.html

继续阅读