android百度多渠道打包,Android多渠道打包方案的实践与优化

目前使用过的多渠道打包方式有两种 ,一种是通过gradle打包,还有一种是美团的多渠道打包方案具体详情见这里

1、Gradle打包

1.1、在Androidmanifest.xml中添加

android:name="UMENG_CHANNEL"

android:value="${UMENG_CHANNEL_VALUE}" />

1.2、在build.gradle中添加

productFlavors {

// 百度

baidu {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]

}

//魅族

meizu {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "meizu"]

}

//搜狗

sougou {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "sougou"]

}

这时候在Android Studio右侧的Gradle project工作区中就可以看到在这里配置的多个渠道了,双击相应的选项就能build出相应的渠道包了,assembleRelease是build出所有渠道的Release包,这里只使用了少量的渠道作为示例。这里的UMENG_CHANNEL_VALUE需要和meta-data中的value一致才能替换。

c2356fb6e110ba6b389894d5c36a536e.png

1.3、获取渠道号

public static String getApplicationMetadata(Context context,

String metaDataKey) {

ApplicationInfo info = null;

try {

PackageManager pm = context.getPackageManager();

info = pm.getApplicationInfo(context.getPackageName(),

PackageManager.GET_META_DATA);

return String.valueOf(info.metaData.get(metaDataKey));

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

这里的metaDataKey自然就是UMENG_CHANNEL了

2、美团多渠道打包方案

2.1、环境配置

由于美团的多渠道打包方案需要依靠脚本来实现,这里我用的是python,经试验脚本文件在windows 下用3.6版本和mac下用2.7版本都能完美运行。并且需要安装openpyxl模块。

2.2、文件说明

打包的文件有channels.xlsx 和 package.py

channels.xlsx是一个excel表格里面第一列是渠道号的id,第二列是渠道号的名称,第三列是渠道名称的备注(非必须)

7fd96e607871c1fe1684b7cd1e964798.png

package.py 是一个python脚本文件

import datetime

import zipfile

import shutil

import sys

import os

from openpyxl import load_workbook

starttime = datetime.datetime.now()

apk_path = sys.argv[1]

print(os.path.abspath(apk_path))

file_path=os.path.dirname(os.path.abspath(apk_path))+os.path.sep

out_path =file_path+'output'

if not os.path.exists(out_path):

os.makedirs(out_path)

else:

shutil.rmtree(out_path,True)

os.makedirs(out_path)

name = os.path.basename(apk_path)

origin_apk_name = os.path.splitext(name)[0]

wb=load_workbook(filename=file_path+'channels.xlsx',read_only=True)

sheets = wb.get_sheet_names()

ws=wb[sheets[0]]

for row in ws.rows:

idStr=str(row[0].value)

channelStr=str(row[1].value)

channel_apk_name='{}-{}-{}.apk'.format(idStr,channelStr,origin_apk_name)

channel_apk_path=os.path.join(out_path,channel_apk_name)

shutil.copy2(apk_path,channel_apk_path)

zipped=zipfile.ZipFile(channel_apk_path,'a',zipfile.ZIP_DEFLATED)

empty_channel_file="META-INF/channel_{}_{}".format(idStr,channelStr)

zipped.writestr(empty_channel_file, '')

zipped.close()

print(idStr+":"+channelStr)

endtime=datetime.datetime.now()

between=(endtime-starttime).microseconds/1024

print('time:%d ms' % between)

2.3、运行脚本

在命令行中输入 python package.py xxxx.apk

如果Python命令是在package.py所在目录下用上面的方式输入,也可以将package.py和apk文件直接拖入命令窗口中执行,然后就会在apk所在路径下生成一个output文件夹里面有所有生成的渠道包。

2.4、获取渠道号

这时候用Android Studio 打开新生成的渠道包,Build——>Analyze Apk选中刚才生成的apk打开META-INF文件夹可以看到这样的的一个文件channel_{id}_{name}的文件,由于它是一个空文件,所以可以看到它的体积大小为0B。因此新的渠道包也不会需要重新签名。

c3bb16c284502f31689a18a8f426fcb5.png

代码中获取渠道号

public static String[] getChannel() {

ApplicationInfo appinfo = App.getInstance().getContext().getApplicationInfo();

String sourceDir = appinfo.sourceDir;

String ret = "";

ZipFile zipfile = null;

try {

zipfile = new ZipFile(sourceDir);

Enumeration> entries = zipfile.entries();

while (entries.hasMoreElements()) {

ZipEntry entry = ((ZipEntry) entries.nextElement());

String entryName = entry.getName();

if (entryName.startsWith("META-INF/channel")) {

ret = entryName;

break;

}

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (zipfile != null) {

try {

zipfile.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

String[] split = ret.split("_");

if (split != null && split.length >= 2) {

for (int i = 0; i < split.length; i++) {

Logger.e(split[i]);

}

return split;

} else {

return null;

}

}

在这里获取到的split信息应该是[“META-INF/channel”,”18”,”uc”],然后获取自己需要的信息就好了

3、两种打包方式对比

打包方式

特点

优点

缺点

适用场景

gradle

productFlavors下配置渠道号,assembleRelease一键执行打完所有包

配置简单

每个包都需要重新build,耗时较长

渠道包较少时

美团多渠道打包方案

通过脚本文件在apk的META-INF目录下生成包含渠道号的空文件

打包速度快

需要依赖外部的脚本文件来实现,修改脚本有学习成本

渠道包比较多时

4、遇到的其他问题

4.1、umeng的渠道号设置

这种方式不会替换meta-data中的信息,好在umeng提供了在代码中设置channel的方法,详情见这里

4.2、注意事项

渠道包的位置一定要和channel的配置文件在同一目录下

4.3、打包方式优化

这种方式还是需要自己输入命令行,稍后打算写一份.bat文件让他双击运行。

打包脚本下载

转载请注明出处:http://blog..net/zhong1113/article/details/54094770

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一张图 综合交通 解决方案_航天智慧环保 | 重庆跳蹬河智慧水务管理系统解决方案—应用篇...

导读随着社会信息化趋势的不断增强&#xff0c;信息社会作为人类社会环境的一个重要方面&#xff0c;在社会中的地位和作用日益显著。在环境监测领域&#xff0c;对有效信息的把握以及正确的使用与水污染的防治和水环境的管理密切相关。航天智慧公司发挥航天系统工程优势&#…

oc 画一个圆弧_用SolidWorks画的塑料衣架,要用到不少让人头疼的曲线

此图是用SolidWorks2015建模&#xff0c;用KeyShot 8渲染。SW文件在2019年12月3日文件夹。零件一&#xff1a;1.在前视基准面上画样条曲线。2.在右视基准面上画样条曲线。(曲面放样的轮廓)3.新建基准面&#xff0c;参考样条曲线和紫色端点。4.在新基准面上画样条曲线。5.新建基…

红米android4.4.2,新版红米Note配置升级详解:系统其实是基于Android 4.4.2

新版红米Note今天中午&#xff0c;小米正式发布了4G版红米Note&#xff0c;由于该机早就出现在了工信部&#xff0c;因此较早一些的传闻显示该机在7月22日的发布会上就会和我们见面&#xff0c;但最终还是让我们多等了小半个月。和原版有所不同的是&#xff0c;4G版红米Note只有…

批量引号_RcoketMQ 批量发送和消息过滤

一、批量发送消息1、批量发送消息要求参考官方文档&#xff1a;http://rocketmq.apache.org/docs/batch-example/① 不能是延迟消息② 有相同的 Topic 和 waitStoreMsgOK(默认是 true&#xff0c;消息发送时&#xff0c;是否等待消息存储完成后再返回)③ 消息总大小不超过 1MB2…

msflexgrid允许大选择_特大型矿井提升机结构和布置方式的选择

导语&#xff1a;结合葫芦素矿井主井提升系统的设计&#xff0c;介绍了内装式提升机和直联悬挂式提升机的结构特点&#xff0c;比较了塔式提升机和落地式提升机的布置方式&#xff0c;对大型立井提升系统提升机结构和布置方式提出了自己的观点&#xff0c;条件允许时内装式提升…

jqc3ff继电器引脚图_单片机控制继电器驱动电路图原理分析

首先看看继电器的驱动这是典型的继电器驱动电路图,这样的图在网络上随处可以搜到,并且标准教科书上一般也是这样的电路图为什么要明白这个图的原理?单片机是一个弱电器件,一般情况下它们大都工作在5V甚至更低.驱动电流在mA级以下.而要把它用于一些大功率场合,比如控制电动机,显…

java byte[] 文件流 转换成string是乱码_Java学习--IO(二)、多线程

1.标准输入流标准输入流是指从标准输入设备流向程序的数据。Java利用http://System.in来得到一个InputStream字节输入流public static void main(String[] args) throws IOException {// 需求:输入一句话&#xff0c;然原样输出InputStream in System.in;byte[] buf new byte…

HTML字体小于12谷歌不兼容,Chrome谷歌浏览器下不支持css字体小于12px的解决办法...

coder.png在这一年的工作中&#xff0c;我发现很多问题你利用自己的「聪明才智」绕过去了&#xff0c;总有一天它会和你不期而遇&#xff0c;今天我们就来直面一个字体兼容性的小问题&#xff1a;Chrome谷歌浏览器下不支持css字体小于12px。我们先来看个效果图(chrome下)&#…

为什么同大取大同小取小_不锈钢马大型动物雕塑-大同金属雕塑马订制

不锈钢马大型动物雕塑-大同金属雕塑马订制 不锈钢浮雕雕塑所谓不锈钢浮雕雕塑是雕塑与绘画结合的产物&#xff0c;用压缩的办法来处理对象&#xff0c;靠等因素来表现三维空间&#xff0c;并只供一面或两面观看。浮雕一般是在另一平面上的&#xff0c;因此在建筑上使用更多&…

html5之api,HTML5之API(示例代码)

HTML5就是牛&#xff0c;可以直接播放音视频&#xff0c;还可以作图&#xff1b;一、HTML5中播放视频和音频&#xff1a;加载时直接播放音频的方式&#xff1a;new Audio("BY2.mp3").play();播放器视频音频var video $("#mp")[0];video.play();简单播放器…

电子计算机时代 英语,2018年英语专四作文范文:计算机时代

2018年英语专四作文范文&#xff1a;计算机时代1.近年来&#xff0c;计算机的应用越来越广泛2.计算机能做许多有益的事3.计算机也有许多副作用范文&#xff1a;In recent years, computers have grown in popularity. You can find them notonly in the universities but on fa…

cad2010多个文件并排显示_便携式显示器清晰度参数,你知道吗?

便携式显示器清晰度是十分重要的&#xff0c;那么影响便携式显示器清晰度的参数有哪些呢&#xff1f;一起跟随诚易盛小编去看看&#xff0c;感谢大家阅读&#xff01;戳这里直达上文aosiman便携式显示器 15.6英寸1、屏幕尺寸有多少人认为&#xff0c;屏幕越大就越清晰的?其实不…

xp计算机用户密码设置,XP电脑开机密码怎么设置?

电脑开机密码是在我们打开电脑后输入正确的密码后才能启动操作系统。手机上的密码我们都会设置&#xff0c;那么你们知道怎么给电脑设置开机密码呢?接下来&#xff0c;小编就教大家设置电脑开机密码&#xff0c;一起来看一下吧电脑开机密码如何设置呢&#xff1f;由于网络安全…

计算机网络纠错码,纠错码

纠错码(error correcting code)&#xff0c;在传输过程中发生错误后能在收端自行发现或纠正的码。仅用来发现错误的码一般常称为检错码。为使一种码具有检错或纠错能力&#xff0c;须对原码字增加多余的码元&#xff0c;以扩大码字之间的差别 &#xff0c;即把原码字按某种规则…

fopen_s不接受两个参数_如何利用SPC来管理制造过程,不懂SPC还敢混“质”场?

请点击上面  免费关注本账号&#xff01;必读 → 2019年4-5月开课计划(IASC-CN俱乐部)PC是汽车行业品质管理的重要工具之一&#xff0c;AIAG为此写了一整本书。这篇文章略去SPC一些基础知识的介绍&#xff0c;直接来讲一下应如何利用SPC来管理一个制造过程。I. SPC的应用范围…

台式计算机装系统,教你台式电脑重装系统方法

台式电脑重装系统对于大部分用户都会因为台式电脑重装系统一般都不需要修改设置&#xff0c;所以重装系统就不那么麻烦了&#xff0c;通常情况下大家都会使用下面教你们的第一种台式电脑重装系统方法&#xff0c;因为这种方法是傻瓜式的重装教程&#xff0c;所以小编在下文中就…

江苏师范大学计算机全国排名,国内131所二本师范大学最新排名(按录取分数线)...

每年高考录取结束后&#xff0c;“文科生可以考哪些师范大学&#xff0c;这些学校的排名怎么样”都是大家关注的热门问题&#xff0c;小编根据安徽省考试院与圆梦志愿的数据&#xff0c;整理出所有二本师范大学2020年在安徽省文科的分数线排名&#xff0c;希望能够给大家带来参…

3w最简单led灯电路图_Mixly 第19课 光感应灯——光敏电阻使用

第19课 光感应灯——光敏电阻使用光敏电阻器又叫光感电阻&#xff0c;是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器&#xff1b;入射光强&#xff0c;电阻减小&#xff0c;入射光弱&#xff0c;电阻增大。光敏电阻器一般用于光的测量、光的控制和光电…

arcgis xml 下载 切片_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...

内容概览1.openlayers6结合geoserver利用WFS服务实现图层编辑功能2.源代码demo下载效果图如下&#xff1a;本篇主要是参照openlayers6结合geoserver利用WFS服务实现图层新增功能(附源码下载)基础上实现的&#xff0c;openlayers6通过调用geoserver发布的地图服务WFS来达到图层编…

存储性能测试软件怎么用的,《杉岩两语》:Vdbench在分布式存储性能测试中的使用方法...

Vdbench是Oracle编写的一款应用广泛的存储性能测试工具&#xff0c;既支持块设备的性能测试&#xff0c;也支持文件系统性能测试。Vdbench使用java编写&#xff0c;兼容linux和windows的操作系统&#xff0c;使用方便。1、Vdbench使用及结果参看使用vdbench时需要先安装java的j…