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,一经查实,立即删除!

相关文章

与smart_近视激光手术之smart篇

今天我们说的Smart&#xff0c;不是奔驰的smart哦&#xff0c;是近视激光手术的一种手术类型&#xff0c;也是原先tprk手术的升级版。浙江省眼科医院之江院区&#xff08;杭城最早开展SMART全激光手术医院&#xff09;手术设备&#xff1a;德国阿玛仕750s&#xff08;很多网友会…

android 下滑,Android实现下滑和上滑事件

public class MainActivity extends Activity implementsIXListViewListener{privateXListView mListView;private ArrayAdaptermAdapter;private ArrayList items new ArrayList();privateHandler mHandler;private int start 0;//数据起始位置private static int refreshCn…

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

导读随着社会信息化趋势的不断增强&#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…

android打开4g开关,【VoLTE】如何让手机的增强型4GLTE开关默认处于关闭状态?

[DESCRIPTION]MTK默认的版本中&#xff0c;Setting里面的增强4GLTE开关(VoLTE)默认是开启的&#xff0c;如果想要将其默认设置为关闭状态的话请参考如下修改即可&#xff1a;[SOLUTION](1)package com.android.providers.settings;DatabaseHelper.javaloadSetting(stmt, Settin…

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

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

Android开机时间统计,android 开机时间检测

基于SPRD平台&#xff0c;根据关键字检查开机耗时#codingutf-8__author__"ao.deng"import ctypes, sys,osimport reSTD_INPUT_HANDLE -10STD_OUTPUT_HANDLE -11STD_ERROR_HANDLE -12# 字体颜色定义 text colorsFOREGROUND_BLUE 0x09 # blue.FOREGROUND_GREEN 0x…

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

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

php html转换数组,将html标签转换为php数组

我有一个来自我想要转换的合作伙伴的系统状态页&#xff0c;这样我就可以将其输入自动化到我自己的服务页面中。该服务的状态由课程提供。我知道这很不理想&#xff0c;但这是他们提供更新的唯一方式。将html标签转换为php数组下面是HTML的一个副本&#xff1a;SERVICE 1Update…

oracle9i 随机端口_修改 Oracle9i 8080端口问题

1.使用sys登录Oracle&#xff0c;利用dbms_xdb修改端口设置SQL> -- Change the HTTP/WEBDAV port from 8080 to 8081SQL> call dbms_xdb.cfg_update(updateXML(2 dbms_xdb.cfg_get()3 , /xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()4 …

html页面导出,HTML页面导出execl表格

点击导出按钮时触发method5(“传入表格ID”)var idTmr;function getExplorer() {var explorer window.navigator.userAgent;//ieif(explorer.indexOf("MSIE") > 0) {return ie;}//firefoxelse if(explorer.indexOf("Firefox") > 0) {return Firefox…

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…

济宁市机器人科技乐园_人工智能的“游乐场”,邀你免费畅玩!

原标题&#xff1a;人工智能的“游乐场”&#xff0c;邀你免费畅玩&#xff01;好奇心与荷尔蒙&#xff0c;探索欲与脑洞大开AI就像一座多种多类游乐园家、学校、公司、商场……无论在哪个地方&#xff0c;AI都在努力的创造更优越的应用场景你有没有亲身体验过AI &#xff1f;我…

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

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