Android多渠道打包详解
来源:互联网 发布:java经典实例 第三版 编辑:程序博客网 时间:2024/06/08 01:10
Android应用市场百花争艳,应用宝,baidu,小米,豌豆荚等等都是各自占据一方,为了对每个市场的应用下载以及该渠道市场上的一些行为(下单等)数据分析,所以Android要打出不同渠道的包,以方便APP客户端在API请求时带入渠道号区分不同的市场,然后做进一步的分析,指导产品或者市场以及其他方面的下一步决策,今天就和大家一起分享一下Android多渠道打包的几种方法,与大家共勉。
目前多渠道打包有如下几种方法:
(1)在apk文件中的META-INF文件夹中写入以渠道号命名的空文件方式,——Perfect,快,但是需要维护脚本。
(2)gradle自带的manifestPlaceholders && productFlavor方式——Good,简单
(3)代码实现——normal
第一种:思路就是先打包生成一个apk,然后在该apk的基础上生成其他渠道包即可,不需要再重新签名,能节省不少打包时间。(我在APK包文件分析的时候所说的META-INF中插入空文档,直接修改名字作为apk的渠道号)
首先在AndroidManifest.xml中配置如下值:
<meta-data android:name="channel" android:value="${channel}" />
使用apktool decode应用程序apktool d *.apk build
在META-INF目录内添加空文件,可以不用重新签名应用。因此,为不同渠道的应用添加不同的空文件,通过文件名可以唯一标识一个渠道。脚本如下:
import zipfilezipped = zipfile.ZipFile(*.apk, 'a', zipfile.ZIP_DEFLATED) empty_channel_file = "META-INF/channel_{channel}".format(channel=360)zipped.write(empty_file, empty_channel_file)
获取Channel信息:
ApplicationInfo appinfo = context.getApplicationInfo(); String sourceDir = appinfo.sourceDir; 解析对应目录——如果有需要可以发。
第二种:首先分享一个最常用的办法,此方法是基于Umeng的统计,友盟官方文档中规定要在AndroidManifest.xml中配置如下值:
<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>
Channel_ID渠道标识。在编译时候这个值能够自动变化以满足区分多渠道的需求。
项目配置示例:首先在项目的AndroidManifest.xml中配置
<meta-data android:name="UMENG_APPKEY" android:value="......" /><meta-data android:name="UMENG_CHANNEL" android:value="${GRADLE_CHANNEL_VALUE}" />
然后使用Gradle Android插件里的另一个功能,manifestPlaceholders。修改相关打包脚本如下:
ProductFlavors作用是定义产品特性,配合 manifest merger 使用,实现在一次编译过程中为每个渠道包产生不同的 GRADLE_CHANNEL_VALUE的值。
也可以简单配置成如下方式:
android { productFlavors { 360{ manifestPlaceholders = [GRADLE_CHANNEL_VALUE: "360"] } baidu{ manifestPlaceholders = [GRADLE_CHANNEL_VALUE: "baidu"] } wandoujia { manifestPlaceholders = [GRADLE_CHANNEL_VALUE: "wandoujia"] } ...... }
在应用启动的时候获取渠道文件,就可以进行相应的分析记录了,代码如下:
PackageManager pm = context.getPackageManager();ApplicationInfo info = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);return info.metaData.getString("channel");
第三种:在build.grale中配置如下:
android { // 这里是你的其他配置 productFlavors{ 360{ } wandoujai { } baidu{ } } ......}
然后在app/src下面,分别创建和main同级目录的文件夹360, wandoujia, baidu,这三个文件夹里面都各只有一个AndroidManifest.xml文件,文件只需要如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="package.name"> <application> <meta-data android:name="CHANNEL_VALUE" android:value="360"/> </application></manifest>
- Android多渠道打包详解
- Android多渠道打包详解
- android 美团多渠道打包详解
- Android多渠道打包(一):基础多渠道打包
- Android多渠道打包(四):360多渠道打包
- Android多渠道打包(五):360多渠道打包+
- android 多渠道自动打包
- android apk多渠道打包
- Android多渠道打包APK
- android 多渠道打包
- Android 多渠道自动打包
- android应用多渠道打包
- Android Ant 多渠道打包
- Android多渠道Ant打包
- android多渠道打包
- Android多渠道打包工具
- android ant 多渠道打包
- Android studio 多渠道打包
- POST从入门到精通3[JavaScript上篇](在线观看)
- 每天10个前端知识点:数组应用
- 删除已排序数组中的重复数据
- QT学习笔记08QtCreator常见快捷键
- 关于opencv编程get到两个小技巧
- Android多渠道打包详解
- STM32F1系列——固件库函数使用手册摘要(慢更新)
- 在checkebok选项中进行批量删除
- QT学习笔记09QT编程规范
- 【LeetCode】41. First Missing Positive
- 10分钟带你光速入门运维工具之-Puppe
- 敏捷合同VS传统合同
- JavaScript DOM操作
- ORA-04043艰难的解决之路