仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1279|回复: 12
打印 上一主题 下一主题

[学习教程] IOS制作之Android批量打包提速 - 1分钟900个市场不是梦仓酷云

[复制链接]
变相怪杰 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:26:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在python中的函数__xxxNSString字符串NSArray数组NSDictionary字典这些都需要弄很清楚其他的类都是一个套路NSMutableArray这样带Mutable的类代表可变的拂晓前的暗中

利用Ant大概Gradle来给程序举行多渠道批量打包,一般都是在manifest文件中写进一个meta标签:
  1. <meta-dataandroid:name="CHANNEL"android:value="xxx"/>
复制代码
meta的key值流动,经由过程轮回改动meta中的value值来完成市场渠道的写进。
Ant批量打包完成绝对贫苦,之前写的时分多亏了谦善的世界-《App主动化之利用Ant编译项目多渠道打包》。假如没有这篇帖子,真不晓得事先Ant要折腾几回才干写好。
Gradle作为新的安卓官方构建工具,有Google老迈撑腰,它的批量打包完成会绝对复杂些。能够参考《迁徙到AndroidStudio》。固然这内里有些指令过期了,比方:runProguard已被minifyEnabled替换了。
以上两种都是传统的批量打包体例,他们最年夜的弱点就是打包工夫长。
在后期渠道很少时这类办法还能够承受,但只需渠道略微增加该办法就不再合用了,缘故原由是每打一个包都要实行一遍构建历程,效力太低。(电脑对照烂,之前一样平常打包都要消费个30-40分钟。)
打包界的曙光

头几天看到美团的手艺分享文档:《美团Android主动化之旅—天生渠道包》,个中第三种体例提到:
假如能间接修正apk的渠道号,而不必要再从头署名能节俭很多打包的工夫。侥幸的是我们找到了这类办法。间接解压apk,解压后的根目次会有一个META-INF目次,以下图所示:

<br>
假如在META-INF目次内增加空文件,能够不必从头署名使用。因而,经由过程为分歧渠道的使用增加分歧的空文件,能够独一标识一个渠道。
接纳这类体例,每打一个渠道包只需复制一个apk,在META-INF中增加一个利用渠道号定名的空文件便可。
这类打包体例速率十分快,900多个渠道不到一分钟就可以打完。
OK,到这里,思绪就有了。

  • 在META-INF中安排一个相似channel_xxx的空文件来标识市场。
  • 在Java代码中剖析这个文件名猎取市场xxx便可。
因为文档中的代码完成较少,这里我来说述一下我的完成。
我的完成

基于以上总结的美团思绪,完成了一套本人的代码,便利引进到工程后完成这类打包体例。
代码在Github:GavinCT/AndroidMultiChannelBuildTool
Python工具完成(基于Python3)


  • 起首创立一个空文件,守候写进META-INF目次作为channel_xxx文件
    1. #空文件便于写进此空文件到apk包中作为channel文件src_empty_file=info/czt.txt#创立一个空文件(不存在则创立)f=open(src_empty_file,w)f.close()
    复制代码
  • 猎取渠道列表。
    思索到渠道的更新不该该是程序员来做,因而在info文件夹下安排一个channel文件,便于不懂程序的人更新渠道。(每一个渠道以换行停止)
    1. #猎取渠道列表channel_file=info/channel.txtf=open(channel_file)lines=f.readlines()f.close()
    复制代码
  • 找到初始apk
    思索到实际中为了避免安装包过年夜,我们一般分为arm和x86两个版本,以是python中撑持以后目次下放多个apk来举行打包。
    固然有人会说共用了一个channel文件,多个apk会天生不异市场的对应包。
    你也能够修正一下python,使分歧的apk往找分歧的channel文件举行打包。
    这里因为我的营业场景如许更便利,我就不修正了。
    1. #猎取以后目次中一切的apk源包src_apks=[]forfileinos.listdir():ifos.path.isfile(file):extension=os.path.splitext(file)[1][1:]ifextensioninapk:src_apks.append(file)
    复制代码
  • 遍历渠道号并写进apk。
    多个apk只是for轮回成绩,我们来看单个apk天生多市场包的代码
    1. #filename(withextension)src_apk_file_name=os.path.basename(src_apk)#支解文件名与后缀temp_list=os.path.splitext(file)#namewithoutextensionsrc_apk_name=temp_list[0]#后缀名,包括.比方:".apk"src_apk_extension=temp_list[1]#创立天生目次,与文件名相干output_dir=output_+src_apk_name+/#目次不存在则创立ifnotos.path.exists(output_dir):os.mkdir(output_dir)#遍历渠道号并创立对应渠道号的apk文件forlineinlines:#猎取以后渠道号,由于从渠道文件中取得带有n,一切strip一下target_channel=line.strip()#拼接对应渠道号的apktarget_apk=output_dir+src_apk_name+"-"+target_channel+src_apk_extension#拷贝创建新apkshutil.copy(src_apk,target_apk)#zip猎取新创建的apk文件zipped=zipfile.ZipFile(target_apk,a,zipfile.ZIP_DEFLATED)#初始化渠道信息empty_channel_file="META-INF/cztchannel_{channel}".format(channel=target_channel)#写进渠道信息zipped.write(src_empty_file,empty_channel_file)#封闭zip流zipped.close()
    复制代码
以上Python是属于现学现写,有甚么能够优化的中央还请告诉。
Java工具完成

Python帮我们向apk包中写进了channel信息,Java端固然也必要对应变动才干利用。
因为剖析channel必要往apk也就是zip中往找文件,以是绝对耗时一些。
因而在ChannelUtil.java中,会将找到的channel和对应versionCode存储在静态变量和SharedPreference中,包管本次乃至本版本中channel只从zip中猎取一次。
在Java代码中读取空渠道文件名

从apk中猎取channel,美团留下的代码if(entryName.startsWith("mtchannel"))是有成绩的,应当接纳if(entryName.startsWith("META-INF/mtchannel"))。
我的代码以下:

CoreAnimation---制作动画很强大很喜欢的框架可以用少量的代码写出漂亮的动画CQuartz2D---强大的2D绘图库COpenGL---不用介绍了超级强大的3D库CCoreImage---
不帅 该用户已被删除
沙发
发表于 2015-1-18 18:54:25 | 只看该作者
众多研发人员积极参与到iOS平台的开发中来也就不足为奇了。
小魔女 该用户已被删除
板凳
发表于 2015-1-22 23:55:11 | 只看该作者
才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。
谁可相欹 该用户已被删除
地板
发表于 2015-1-25 20:57:54 | 只看该作者
重要的是,放眼全球也的确找不到第二个如苹果iOS平台这样健壮、完整、先进而且为开发者带来真实收益的开发平台来。
admin 该用户已被删除
5#
发表于 2015-2-3 23:39:44 | 只看该作者
要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。
第二个灵魂 该用户已被删除
6#
发表于 2015-2-9 07:26:27 | 只看该作者
看《iPhone 4与iPad开发基础教程》,跟着一步步来
小女巫 该用户已被删除
7#
发表于 2015-2-10 03:17:15 | 只看该作者
近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,
再现理想 该用户已被删除
8#
发表于 2015-2-10 17:07:56 | 只看该作者
才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。
海妖 该用户已被删除
9#
发表于 2015-2-13 16:04:56 | 只看该作者
其次学习方法和学习心态很重要,在学习当中应该保持一颗良好的心态。应该借鉴别人好的学习方法,大家互相帮助,取长补短。
因胸联盟 该用户已被删除
10#
发表于 2015-2-24 20:30:14 | 只看该作者
最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。
简单生活 该用户已被删除
11#
发表于 2015-3-7 13:05:22 | 只看该作者
最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。
12#
发表于 2015-3-15 06:05:18 | 只看该作者
看《iPhone 4与iPad开发基础教程》,跟着一步步来
若天明 该用户已被删除
13#
发表于 2015-3-21 18:43:00 | 只看该作者
近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-13 20:45

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表