命令行编译Android应用

现在Android开发基本都是使用Android studio,Google不久前也宣布不再支持Eclipse了,所以熟悉使用Android studio的常用功能还是很有必要的。

我们知道Android应用通过gradle构建系统编译出来默认有两种模式:一种是debug模式,一种是最终的release模式,通常debug模式都是用在测试的时候,我们发布应用的时候都是使用release模式编译出正式的apk,然后签名发布
事实上无论使用哪种模式编译你的Android应用,在安装到设备或者模拟器之前你都需要先签名,debug模式有debug key,release模式有你自己私有的key。

大家都知道,通过AS编译我们的应用模块的时候,会生成可以安装到手机上的.apk文件,当在我们使用debug模式编译的时候,sdk tool会带一个debug key根据你在build.gradle文件中的debuggable true的设置自动给应用签名,但是你不能发布一个使用debug key签名的应用,当你使用release编译类型编译出一个未签名的apk文件时,你必须用你的私有key手动给它签名,可以使用模块的build.gradle文件中的Keytool和Jarsigner,下面就讲讲怎么在命令行中通过release模式编译出一个未签名的apk,然后手动签名的过程(下文讲解都是基于mac环境)。

设置环境变量

此步略过

执行命令进行release模式编译出未签名的apk

1
./gradlew assembleRelease

如果不成功,试着将gradlew脚本改成可执行,命令如下

1
chmod +x gradlew

如果你稍微留点心,你就会发现./gradle assembleRelease安装release模式编译,那么./gradlew assembleDebug是不是安装debug模式编译

你可以通过如下命令,查看gradlew脚本可以传入哪些参数以及他们的含义

1
./gradlew tasks`

生成一个签名

执行玩上面的./gradle assembleRelease会在module_name/build/outputs/apk目下生成一个未签名的module-release-unsigned.apk文件,下面就是需要生成一个私有的签名,然后进行签名了,生成签名命令如下:

1
keytool -genkey -v -keystore release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

执行玩改命令之后会让你填入一些信息,包括密码,自己一定要记住密码,最终上面的命令会生成一个release-key.keystore的签名文件,这个文件名字你可以自己定义

在命令行里面进行签名

将签名文件keystore和之前生成的未签名的apk文件放到一个目录,然后执行下面命令

1
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore release-key.keystore module-release-unsigned.apk alias_name

这样就签名完成了

校验签名

1
jarsigner -verify -verbose -certs module-release-unsigned.apk

你可以看到输出的一些签名信息

使用zipalign命令对齐最终的apk文件

这样就OK了,上面主要讲的是手动签名的过程,大家也可以通过在build.gradle里面配置签名信息这种方式进行签名
PS:附上之前写的一个用于获取单个apk的签名md5或者是比较两个apk的签名md5是否相等的脚本,点击访问