作者:三心两意真实扭 | 来源:互联网 | 2023-09-25 10:01
现在的android有着广泛的应用市场,相对应的渠道也可以说是多种多样,为了方便app更好的推广,运营同学就需要我们支持下数据采集,才能制定后续流程~
题外话:其实渠道统计不仅仅局限于应用市场,在现实生活中我们可以把每一种推广方式也看做是一个渠道,比如:通过人拉人的方式去推广,官网上推广,百度推广等。
随着渠道越来越多,为了运营更好的推广,有时候一次也会打成百的安装包,有的打包方式可能会造成半天或者一天啥也干不了,当然也有分分钟完成打包的方式…
关联篇
- Android进阶之路 - 多渠道分包、打包
- Android进阶之路 - 美团多渠道分包、打包
使用美团多渠道打包
方式,10秒轻松打完上百渠道安装包
- 基础认知
- 前情提要
- 渠道配置
- 渠道打包
- 打包区别
- 原始、友盟多渠道打包
- 美团多渠道打包
- 关于项目实战的一些经验
- 渠道信息
小伙,每天进步一点点,后面会发现迈了一大步,不知不觉都过去快3年咯 ~
基础认知
什么是多渠道包?
渠道包就是要在安装包中添加渠道信息,也就是channel
,对应不同的渠道,例如:小米市场、360市场、应用宝市场等
如何声明一个渠道?它的本质实现是什么?
一般都是在 AndroidManifest
通过meta-data
标签声明渠道信息
,很多时候涉及的多渠道信息会放在build.gradle
中(如:通过原始方式进行多渠道分包、打包)
AndroidManifest
示例
<meta-dataandroid:name&#61;"CHANNEL_ID"android:value&#61;"android" />
多渠道是如何实现分渠道的&#xff1f;
一般多渠道有俩种实现方式
- 动态替换
meta-data
中的value
值&#xff1b;如将上方中value
中的android
替换为huawei
<meta-dataandroid:name&#61;"CHANNEL_ID"android:value&#61;"huawei" />
- 没有在
AndroidManifest
中通过meta-data
声明任何渠道信息&#xff0c;而是通过三方工具或三方平台打多渠道包时&#xff0c;整体插入meta-data内的渠道信息
&#xff08;美团多渠道打包就是如此 &#xff09;
为什么要提供多渠道包&#xff1f;
我们要在安装包中添加不同的标识&#xff0c;应用在请求网络的时候携带渠道信息&#xff0c;方便后台做运营统计
&#xff08;这就是添加渠道信息的用处&#xff09;
前情提要
如果想要观测不同渠道的应用数据&#xff0c;那么渠道分包是一个基础&#xff0c;其中主要涉及到俩部分
-
分渠道包
因为我分渠道的方式使用的是原始&#43;部分Umeng多渠道分包
方式&#xff0c;所以有心人会发现部分Umeng
渠道统计也会进行部分一样的配置
-
打渠道包
这里使用的打包方式是最原始的AndroidStudio自带的一种打包
方式&#xff0c;虽然看起来方便&#xff0c;但是效率很低
&#xff0c;往往在渠道多的情况下&#xff0c;你会发现2分钟能办完的事儿&#xff0c;往往消耗几十分钟或者几个小时
~
渠道配置
这里采用的多渠道配置方式&#xff0c;其实早期是基于友盟方式做处理的
第一步&#xff1a;AndroidMainfest
(清单文件)中的application
内添加
<- 这里是方便Umeng的渠道统计&#xff0c;进行配置 UMENG_CHANNEL 不可改变不然无法识别 -><meta-dataandroid:name&#61;"UMENG_CHANNEL"android:value&#61;"${UMENG_CHANNEL_VALUE}" />
示例&#xff1a;
<manifest xmlns:android&#61;"http://schemas.android.com/apk/res/android"package&#61;"com.example.dow.loadingview"><applicationandroid:allowBackup&#61;"true"android:icon&#61;"&#64;mipmap/ic_launcher"android:label&#61;"&#64;string/app_name"android:supportsRtl&#61;"true"android:theme&#61;"&#64;style/Theme.AppCompat.Light.NoActionBar"><activity android:name&#61;".MainActivity"><intent-filter><action android:name&#61;"android.intent.action.MAIN" /><category android:name&#61;"android.intent.category.LAUNCHER" />intent-filter>activity><meta-dataandroid:name&#61;"UMENG_CHANNEL"android:value&#61;"${UMENG_CHANNEL_VALUE}" />application>manifest>
第二步&#xff1a; build(app)
中&#xff0c;android标签
内添加渠道名
注意&#xff1a; 如果是数字开头是不行的&#xff01;需要添加下划线&#xff01;
buildTypes {debug {
minifyEnabled false proguardFiles getDefaultProguardFile(&#39;proguard-android.txt&#39;), &#39;proguard-rules.pro&#39;,&#39;proguard-fresco.pro&#39;}release {
minifyEnabled false proguardFiles getDefaultProguardFile(&#39;proguard-android.txt&#39;), &#39;proguard-rules.pro&#39;}}
主要有以下是俩种渠道配置方式
productFlavors{uc {manifestPlaceholders &#61; [UMENG_CHANNEL_VALUE: "uc"]}_360 {manifestPlaceholders &#61; [UMENG_CHANNEL_VALUE: "360"]}baidu{manifestPlaceholders &#61; [UMENG_CHANNEL_VALUE: "baidu"]}}
- 方式二&#xff1a;
productFlavors方式添加渠道
productFlavors{default_channel{}wandoujia{}yingyongbao{}xiaomi{}huawei{}jifeng{}}productFlavors.all { flavor ->flavor.manifestPlaceholders &#61; [ UMENG_CHANNEL_VALUE:name ]}
渠道打包
在此时&#xff0c;我们的渠道配置
已经做完&#xff0c;可以进入打包阶段&#xff0c;但需注意你既然要打渠道包&#xff0c;必然是要上appStore
的&#xff0c;这里就涉及到了一个签名
的问题&#xff0c;你可以通过生成 keystore、jks 签名证书进行学习&#xff0c;不然你打出的也是没有签名的包&#xff0c;用户是无法安装的!
这里采用的打包工具是AndroidStudio内的Gradle打包方式&#xff0c;相比别的打包方式会慢挺多的
AndroidStudio
内的Gradle打包
![打包](https://img6.php1.cn/3cdc5/97b0/5a0/543148ffafb0eb16.png)
最终结果&#xff1a;没签名的包状态
![在app内部的apk文件夹下](https://img6.php1.cn/3cdc5/97b0/5a0/d632f6420530d3b1.png)
最终结果&#xff1a;签名的包状态
![在app外部&#xff0c;项目内部](https://img6.php1.cn/3cdc5/97b0/5a0/e33e74ca4d3d9bc6.png)
打包区别
在我目前的从业经历中&#xff0c;对于多渠道打包方面的经验主要有渠道配置和俩种渠道打包的方式
原始、友盟多渠道打包
原&#xff1a; 直接在清单文件
中定义meta-data
标签设置渠道值&#xff0c;读取对应值当做渠道id
↓
现&#xff1a;使用友盟方式分渠道
&#xff0c;原始方式打包
一般来讲&#xff0c;这个渠道的标识会放在AndroidManifest
的Application
的一个meta-data
中&#xff1b;然后就可以通过对用方法获取对应的渠道信息&#xff08;方法位于篇尾&#xff09;
优&#xff1a;配置简单&#xff0c;使用方便
缺&#xff1a;渠道多的时候&#xff0c;效率较低
美团多渠道打包
在 AndroidManifest
配置基础包即可&#xff0c;无需 build.app
内进行任何配置&#xff0c;主要依赖Python写的工具
优&#xff1a;配置之后&#xff0c;使用方便&#xff0c;效率很高
缺&#xff1a;三方工具&#xff0c;安全性方面可能需要稍微考虑下
关于项目实战的一些经验
我们现在打的签名包&#xff0c;大多都会进行加固&#xff0c;然后分渠道&#xff0c;涉及先后顺序
- 先根据签名包打出多渠道包&#xff0c;然后挨个进行加固
- 先加固签名包&#xff0c;然后打出多渠道包
明眼人一看&#xff0c;肯定选第二个&#xff0c;那么你是对的&#xff01;因为亲测之后&#xff0c;加固效果依旧在&#xff0c;同时渠道依旧可以正常识别 ~
渠道信息
以备不时之需 - 附赠一个小方法&#xff08;用于获取当前apk的渠道 - 网上找的&#xff0c;没有亲测 - -~&#xff09;
public String getChannelName() {if (this.mContext &#61;&#61; null) {return null;}String channelName &#61; null;try {PackageManager packageManager &#61; this.mContext.getPackageManager();if (packageManager !&#61; null) {ApplicationInfo applicationInfo &#61; packageManager.getApplicationInfo(this.mContext.getPackageName(), PackageManager.GET_META_DATA);if (applicationInfo !&#61; null) {if (applicationInfo.metaData !&#61; null) {channelName &#61; String.valueOf(applicationInfo.metaData.get("UMENG_CHANNEL"));}}}} catch (Exception e) {e.printStackTrace();}return channelName;}