以下是Google官方的apk打包流程图,这个流程图很容易看懂,我们可以看到apk打包过程中需要用到的工具有java、aapt、aidl、dx、apksigner、zipalign。那么这些工具都在哪里呢?
看一下笔者的Android SDK根目录:
在SDK根目录中有一个build-tools目录,里面是这样的:
是一些版本号命名的文件夹,打开29.0.1这个文件夹,可以看到:
我们发现打包需要用到的aapt、aidl、apksigner、zipalign、dx工具都在这里。那么apkbuilder在哪里呢?
Android Apk打包流程中会用到一个叫apkbuilder的工具将.dex文件和优化的资源文件打包生成apk。在android sdk tools 22以前,apkbuilder是以脚本文件的形式存在于tools目录中。现在我们发现apkbuilder不见了? apkbuilder在哪呢?难道apkbuilder被废弃了,不用了?
其实apkbuilder并没有去掉,而是换了一种存在形式,或者换了一身衣服而已。看Google的解释:
原文地址:https://android.googlesource.com/platform/sdk/+/master/apkbuilder/readme.txt
意思是apkbuilder命令行工具已经废弃了,取而代之的是变成了一个java class。
这个class完整名称是com.android.sdklib.build.ApkBuilder,而且存在于sdklib这个文件中。
那么sdklib在哪呢?笔者在自己SDK中发现在 tools/lib/sdklib-26.0.0-dev.jar。使用JD-JUI工具打开这个jar包,果然发现了
com.android.sdklib.build.ApkBuilder。
关于签名这一步,签名可以使用jarsigner和apksigner,这是由开发者自己选择,apksigner是安卓独有的签名工具,jarsigner是java的签名工具。
关于最后一步,使用zipalign对齐apk,这一步是否是必须的呢? 并不是必须的,对齐后会让apk的体积小一点,apk跑起来也会快一点,最好将签名后的apk对齐。
如何检查apk是否已经使用zipalign对齐了呢?
使用zipalign命令即可检查:
zipalign -c -v 4 ApkPath
当显示Verification succesful
即为已对齐,显示Verification FAILED
为未对齐。