安卓7.0开始,谷歌提供了apksigner用以进行apk的V1与V2签名,尽管多数时候只需要在AS里勾选即可签名,但是在使用自动化构建集成时就需要手动签名。

鉴于此,写了一个签名脚本sign.sh以供参考与使用。

#!/bin/bash
# Author: XFY9326
keyStorePath=~/XXX.keystore
keyStorePassword=XXXXXX
keyStoreAliasName=XXX
keyStoreAliasPassword=XXXXXX
apkSignerPath=~/Library/Android/sdk/build-tools/29.0.2/apksigner
zipAlignPath=~/Library/Android/sdk/build-tools/29.0.2/zipalign
inputPath=$1
apkFullName=$(basename $inputPath)
apkName=$(basename $inputPath .apk)
alignedApkOutput=$(pwd)/${apkName}_aligned.apk
alignedAndSignedApkOutput=$(pwd)/${apkName}_aligned_signed.apk
echo "Sign and Align Apk: "$apkFullName
${zipAlignPath} -p 4 "${inputPath}" "${alignedApkOutput}"
${apkSignerPath} sign --ks "${keyStorePath}" --ks-pass pass:"${keyStorePassword}" --ks-key-alias "${keyStoreAliasName}" --key-pass pass:"${keyStoreAliasPassword}" --out "${alignedAndSignedApkOutput}" "${alignedApkOutput}" 
rm -rf "$alignedApkOutput"
echo "Output: "$alignedAndSignedApkOutput

keyStore的具体信息以及SDK中build-tools的路径根据需要修改即可。

目前仅在Mac环境下测试过,Linux环境下应该是相同的。

使用方法:

sh sign.sh XXX.apk