Android开发笔记(一百一十四)发布工具

多渠道打包工具

Eclipse/ADT环境

因为app开发者常常需要统计app在不同渠道的使用量,所以app安装包就得按照不同的渠道号分别打包。至于为什么要进行使用量的统计,可参见《 Android开发笔记(一百零七)统计分析SDK》,现在我们以友盟统计为例,演示一下如何在Eclipse环境实现多渠道打包的功能。


代码工程导入了友盟统计分析的sdk后,还需在AndroidManifest.xml中定义当前发布包的渠道号,如下所示:
    <meta-data android:name="UMENG_CHANNEL" android:value="1001_0001" />
上面的1001_0001代表渠道A,如果接下来要打包B渠道的安装包,把android:value改为别的数值如1001_0002,然后导出安装包即可。可是渠道号有多个的话,每次打包都得先修改AndroidManifest.xml,然后再一步步导出安装包,不但费力而且费时,由此催生了批量打包的需求。


兰贝壳儿便是用来解决多渠道打包需求的Eclipse插件,最新版本是AndroidTools_1.1.4.201410081930.jar,下载地址是 http://download.csdn.net/detail/aqi00/9616501 。把该jar包放入eclipse的plugins目录,然后重启Eclipse就可以了。在app工程上右击,在右键菜单中依次选择“兰贝壳儿”——“打包发布”,就能自动处理多渠道打包。下面是右键菜单的截图:
Android开发笔记(一百一十四)发布工具_第1张图片


第一次打包会提示“无法进行打包,Key和证书无法获取,请检查bom.xml文件!”,然后在项目的根目录下生成bom.xml,文件内容如下:
	<package>
		<!-- 不区分大小写,逗号隔开的metaName,代表不同SDK的渠道标识符 -->
		<channels keyname="UMENG_CHANNEL,gfan_cpid">
			<!-- channel的数量代表最终生成的apk文件的数量 -->
			<channel value="hiapk.com" />
			<channel value="andao007.com" />
			<channel value="domob.cn" />
			<channel value="gfan.com" />
		</channels>
		<keystore path="F:\Repos\android\keystore\common\common.key" passwd="123456">
			<alias name="marsor_common" passwd="123456" />
		</keystore>
		<outpath value="F:\Repos\android\keystore\output\" />
	</package>
上面的xml文件主要有三个地方需要修改:
1、channels的keyname要改为我们在AndroidManifest.xml中定义的渠道变量名,如UMENG_CHANNEL;同时要在下面补充各渠道的channel,填上每个渠道的具体值。
2、keystore的path值改为证书文件的完整路径,password值改为证书文件的密码;alias项的name值要改为证书的别名,password值改为证书别名的密码。
3、outpath要改为打包好的的apk文件存放目录的完整路径。


下面是一个实际开发中批量打包的bom.xml例子:
	<package>
		<channels keyname="UMENG_CHANNEL">
			<channel value="1000_0001" />
			<channel value="1070_0035" />
			<channel value="1070_0036" />
			<channel value="1071_0001" />
			<channel value="1072_0001" />
		</channels>
		<keystore path="E:\workspace_all\llms\NetHelper_III_3.1.8\keyStore\qzyd.speed.nethelper.keystore" passwd="llms">
			<alias name="qzyd.speed.nethelper" passwd="llms" />
		</keystore>
		<outpath value="E:\workspace_all\publish\" />
	</package>	


Android Studio环境

Android Studio自带了批量打包的功能,所以我们无需额外安装别的插件。下面仍然以友盟统计为例,说明多渠道打包的操作:
1、首先修改AndroidManifest.xml,把android:value的值改为${UMENG_CHANNEL_VALUE},如下所示:
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}" >
        </meta-data>
2、其次修改build.gradle,在android{ ... }包块中补充UMENG_CHANNEL_VALUE的各渠道定义,如下所示:
    productFlavors {

        tencent {}
        baidu {}
        dev360 {}
        huawei {}
        xiaomi {}
        lenovo {}
        wandoujia {}

        productFlavors.all { flavor ->
            flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }

    }
上面的渠道定义表示支持生成这些应用市场的渠道包:应用宝、百度助手、360助手、华为商店、小米商店、乐商店、豌豆荚等等。
3、修改完build.gradle,点击上方的“Sync Now”,完成构建同步操作,截图如下:

4、同步完成,依次选择菜单“Build”——“Generate Signed APK...”,输入证书路径及密码后点击“Next”按钮,弹出打包提示窗口,截图如下:
Android开发笔记(一百一十四)发布工具_第2张图片
注意窗口下半部的Flavors区域,便是各应用市场的渠道号定义,全选这些应用市场,点击“Finish”按钮,接下来就是等待Studio自动打包完成了。


安全加固网站

之前在《 Android开发笔记(七十三)代码混淆与反破解》里面,我们提到了一些基本的app加固措施,比如代码混淆、防二次打包等等,可是对开发者来说,无论自己想得多么周到,都敌不过防不胜防的各类漏洞,况且开发者应该把主要精力放在功能实现上,而不是浪费在安全加固上。因此,鉴于术业有专攻,我们不如把apk安装包交给专业的加固网站进行加固处理,下面是几个常见的app加固网站:
爱加密 https://www.ijiami.cn/AppProtect
360加固保 http://jiagu.360.cn/
腾讯云乐固 http://legu.qcloud.com/
阿里聚安全 http://jaq.alibaba.com/safety
金钟罩 http://www.netonsafe.com/AppProtect.html
梆梆加固 http://www.bangcle.com/products/productindex?product_id=1
娜迦加固 http://www.nagain.com/application/


重签名工具

经过安全加固后的apk安装包,需要重新加上原证书的签名,原因参见《 Android开发笔记(七十)反编译初步》。重签名工具有好几个,最简单的便是Android自带的signapk.jar,它的下载地址是http://pan.baidu.com/s/1slgUuKl。使用该工具要在命令行下重签名,命令格式为“java -jar signapk.jar pem证书路径 pk8证书路径 签名前的apk文件路径 签名后的apk文件路径”,下面是个重签名命令的例子:
java -jar signapk.jar testkey.x509.pem testkey.pk8 old.apk new.apk


signapk.jar用来自己玩玩还不错,可要是用于批量签名,那麻烦多多。其一是要手工从证书文件中分解出pem和pk8两个文件,其二是要运行多个命令行才能对多个安装包分别重签名。所以实际开发中的重签名工具一般用的是爱加密APKSign,它的下载地址是http://pan.baidu.com/s/1gfyPCLd,下载解压后运行APKSign.exe打开工具页面,下面是该工具的页面截图:
Android开发笔记(一百一十四)发布工具_第3张图片
点击工具页面上的“浏览...”按钮,然后同时选中多个apk安装包,回到主页面再点击“开始签名”按钮,就能完成批量重签名了。


一站式自动化发布

前面说了多渠道包的发布流程是:先进行批量打包,然后上传到安全网站加固,加固完下载下来做重签名。可现在的渠道这么多,保守都要打几十个渠道包,倘若每个步骤都要人工操作,不但苦逼的码农伤不起,老牛破车的电脑也伤不起呀。比如博主前几天给公司的app打多渠道包,从早干到晚做了十几个小时,才把一百多个渠道包都弄好。有道是,哪里有压迫,哪里就有反抗。哼,码农要打翻身仗,不当电脑的奴隶,誓要电脑当俺的奴隶。


潜心研究了大半天,终于有所收获,下面分享一下全自动化打包的过程说明:
1、启动多渠道打包操作(如Eclipse上运行兰贝壳儿,Studio上直接批量打包);
3、开发一个小程序轮询打包结果目录,一旦发现新文件,就拉去安全网站加固;
4、小程序定时轮询加固结果,下载安全网站加固好的文件;
5、小程序自动对已加固的文件进行重签名,关键在这里,重签名的几个工具用法就不多说了,下面直接给出重签名的命令:
jarsigner.exe -verbose -digestalg SHA1 -sigalg MD5withRSA -keystore keystore文件名 -storepass keystore文件对应的密码 -keypass keystore别名对应的密码 -signedjar 签名后的apk文件名 签名前的apk文件名 keystore别名
zipalign.exe -v 4 签名后的apk文件名 优化后的apk文件名
注意,jarsigner.exe是java自带的签名工具,在Java安装路径的bin目录下;zipalign.exe是Android自带的优化工具,在sdk路径下的build-tools\20.0.0目录下(20.0.0指的是sdk版本号)。
6、全部处理完毕,小程序自动打包所有签名好的安装包,并自动发邮件通知相关人员。






点此查看Android开发笔记的完整目录

你可能感兴趣的:(android,签名,多渠道,爱加密,兰贝壳儿)