变相怪杰 发表于 2015-1-18 11:26:35

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

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

利用Ant大概Gradle来给程序举行多渠道批量打包,一般都是在manifest文件中写进一个meta标签:
<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文件
#空文件便于写进此空文件到apk包中作为channel文件src_empty_file=info/czt.txt#创立一个空文件(不存在则创立)f=open(src_empty_file,w)f.close()
[*]猎取渠道列表。
思索到渠道的更新不该该是程序员来做,因而在info文件夹下安排一个channel文件,便于不懂程序的人更新渠道。(每一个渠道以换行停止)
#猎取渠道列表channel_file=info/channel.txtf=open(channel_file)lines=f.readlines()f.close()
[*]找到初始apk
思索到实际中为了避免安装包过年夜,我们一般分为arm和x86两个版本,以是python中撑持以后目次下放多个apk来举行打包。
固然有人会说共用了一个channel文件,多个apk会天生不异市场的对应包。
你也能够修正一下python,使分歧的apk往找分歧的channel文件举行打包。
这里因为我的营业场景如许更便利,我就不修正了。
#猎取以后目次中一切的apk源包src_apks=[]forfileinos.listdir():ifos.path.isfile(file):extension=os.path.splitext(file)ifextensioninapk:src_apks.append(file)
[*]遍历渠道号并写进apk。
多个apk只是for轮回成绩,我们来看单个apk天生多市场包的代码
#filename(withextension)src_apk_file_name=os.path.basename(src_apk)#支解文件名与后缀temp_list=os.path.splitext(file)#namewithoutextensionsrc_apk_name=temp_list#后缀名,包括.比方:".apk"src_apk_extension=temp_list#创立天生目次,与文件名相干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 发表于 2015-2-3 23:39:44

要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。

第二个灵魂 发表于 2015-2-9 07:26:27

看《iPhone 4与iPad开发基础教程》,跟着一步步来

小女巫 发表于 2015-2-10 03:17:15

近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,

再现理想 发表于 2015-2-10 17:07:56

才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。

海妖 发表于 2015-2-13 16:04:56

其次学习方法和学习心态很重要,在学习当中应该保持一颗良好的心态。应该借鉴别人好的学习方法,大家互相帮助,取长补短。

因胸联盟 发表于 2015-2-24 20:30:14

最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。

简单生活 发表于 2015-3-7 13:05:22

最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。

仓酷云 发表于 2015-3-15 06:05:18

看《iPhone 4与iPad开发基础教程》,跟着一步步来

若天明 发表于 2015-3-21 18:43:00

近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,
页: [1]
查看完整版本: IOS制作之Android批量打包提速 - 1分钟900个市场不是梦仓酷云