专栏首页老欧说安卓Android开发笔记(一百一十四)发布工具

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工程上右击,在右键菜单中依次选择“兰贝壳儿”——“打包发布”,就能自动处理多渠道打包。下面是右键菜单的截图:

第一次打包会提示“无法进行打包,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”按钮,弹出打包提示窗口,截图如下:

注意窗口下半部的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打开工具页面,下面是该工具的页面截图:

点击工具页面上的“浏览...”按钮,然后同时选中多个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开发笔记的完整目录

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kotlin入门(2)让App开发变得更容易

    上一篇文章介绍了如何搭建Kotlin的开发环境,可是这个开发环境依然基于Android Studio,而在Android St...

    用户4464237
  • Kotlin入门教程——目录索引

    Kotlin是谷歌官方认可的Android开发语言,即将发布的Android Studio 3.0版本也会开始内置Kotlin,所以未来在App开发中Kotli...

    用户4464237
  • Kotlin入门(9)函数的基本用法

    上一篇文章介绍了Kotlin新增的空安全机制,控制语句部分可算是讲完了,接下来将连续描述Kotlin如何定义和调用函数,本篇文...

    用户4464237
  • MySQL忘记root密码处理

    如果忘记密码,对于MySQL而言处理起来也相对比较简单。但需要修改配置,重启数据库。可以按照如下步骤处理。

    July
  • 斯诺登揭开英国通讯总部“肮脏把戏”

    NBC News日前又从斯诺登曝光的文件中发现了更多惊人内幕。 据了解,斯诺登提供的文件中揭露了英国通讯总部(GCHQ)怎样将目...

    安恒信息
  • Python自动抢红包,超详细教程,再也不会错过微信红包了!

    提到抢红包,就不得不提Xposed框架,它简直是个抢红包的神器,但使用Xposed框架有一个前提条件:手机需要root,对于苹果手机的话就需要越狱了。现在的手机...

    疯狂软件李刚
  • 干了这碗“美丽汤”,网页解析倍儿爽

    关于爬虫的案例和方法,我们已讲过许多。不过在以往的文章中,大多是关注在如何把网页上的内容抓取下来。今天我们来分享下,当你已经把内容爬下来之后,如何提取出其中你需...

    Crossin先生
  • 干了这碗“美丽汤”,网页解析倍儿爽

    网页被抓取下来,通常就是str 字符串类型的对象,要从里面寻找信息,最直接的想法就是直接通过字符串的 find 方法和切片操作:

    不二小段
  • HTTPS是如何保证安全的

    HTTPS并非是应用层一个新的协议,通常 HTTP 直接和 TCP 通信,HTTPS则先和安全层(SSL/TLS)通信,然后安全层再和 TCP 层通信。

    木子星兮
  • adb网络调试重启后不关闭得方法

    云深无际

扫码关注云+社区

领取腾讯云代金券