[TOC]
请注意
签名前,请确认java环境
, Android
环境是否配置正确
生成签名
# 生成签名 别名 [myKey] 有效期 50年, 算法 RSA 文件名 [myKey.keystore]
keytool -genkey -alias myKey -keyalg RSA -validity 17820 -keystore myKey.keystore
# 提示,其中国家代码 中国-CN
此命令试用于 jdk 1.7 及 1.7以下,如果高于请使用如下命令
# 1.8以后的jdk要求时间校准 加入 -tsa http://timestamp.digicert.com 如果出现校验时间错误,请找一个能用的tsa服务器
keytool -tsa http://timestamp.digicert.com -genkey -alias myKey -keyalg RSA -validity 17820 -keystore myKey.keystore
**命令执行后有提示输入各种信息,首先是 yourStorepass
然后是签名的各种信息,确认请输入 y
, 最后输入别名的aliasesPass
**
也就是说一个签名文件,包括
签名密码
别名
别名密码
一个文件 三个字符串
特别的,最好使用时间戳制造签名文件,这样可以在签名到期后,用户仍然可用
签名 APK
# 输入完整信息签名一个应用,注意填写[]中对应的内容
# [yourStorepass] 签名文件密码 [aliasesPass] 别名密码 [forSignAPKPath] 要签名的apk路径 [aliases] 别名
jarsigner -verbose -keystore myKey.keystore -storepass [yourStorepass] -keypass [aliasesPass] [forSignAPKPath] [aliases]
# 查看帮助
jarsingner -help
校验签名
# 查看一个路径为 [verifyApkPath] 的APK 是否签名
jarsigner -verify [verifyApkPath]
# 通过一个路径为 [keystorePath] 的签名文件,校验一个 路径为 [verifyApkPath] 的apk
jarsigner -verbose -verify -keystore [keystorePath] -certs [verifyApkPath]
查看签名文件信息
# 查看一个路径为 [keystorePath] 的签名文件的信息,需要签名的库密码
keytool -list -keystore [keystorePath]
签名脚本
OSX or Linux
创建文件 my_sign_apk.sh
内容为
#!/bin/bash
# setting default key path here
# local OPTIND
# jarsigner -verbose -verify -keystore ${keyPath} -certs ${packagePath}
DEFAULT_KEY_PATH=/Users/sinlov/opt/myShell/myKey.keystore
DEFAULT_STORE_PASS="myPass"
DEFAULT_ALIASES="myAliases"
DEFAULT_KEY_PASS="keyPass"
DEFAULT_DIGESTALG=SHA1
DEFAULT_SIGALG=MD5withRSA
sigalg=${DEFAULT_SIGALG}
digestalg=${DEFAULT_DIGESTALG}
keyPath=${DEFAULT_KEY_PATH}
storepass=${DEFAULT_STORE_PASS}
keypass=${DEFAULT_KEY_PASS}
aliases=${DEFAULT_ALIASES}
packagePath=
IS_VERIFY=false
if [ ! -n "$1" ]; then
echo "unkonw path, please use apk path"
exit 1
else
while getopts "p:k:h:" arg #after param has ":" need option
do
case $arg in
p)
echo "Package path: $OPTARG"
packagePath=$OPTARG
;;
k)
echo "Key Path: $OPTARG"
keyPath=$OPTARG
;;
h)
echo "use -p [packagePath] -k [keyPath] -h Show help"
exit 1
;;
?) # other param?
echo "unkonw argument, please use -p [packagePath] -k [keyPath]"
exit 1
;;
esac
done
fi
#echo "sigalg: ${sigalg}"
#echo "digestalg: ${digestalg}"
#echo "keyPath: ${keyPath}"
#echo "storepass: ${storepass}"
#echo "aliases: ${aliases}"
#echo "keypass: ${keypass}"
#echo "packagePath: ${packagePath}"
jarsigner -verbose -digestalg ${digestalg} -sigalg ${sigalg} -keystore ${keyPath} -storepass ${storepass} -keypass ${keypass} ${packagePath} ${aliases}
- 用法
# 给予运行权限
chmod +x my_sign_apk.sh
# 查看帮助
./my_sign_apk.sh -h
# 快速签名
./my_sign_apk.sh -p [apkPath]
# 指定签名文件签名
./my_sign_apk.sh -k [keyPath] -p [apkPath]
Windows
新建文件 sign.bat
内容为
@echo.============= Start Sign APK=============
@rem please set params with []
jarsigner -verbose -digestalg SHA1 -sigalg MD5withRSA -keystore [YourKeyFullPath] -storepass [storepass] -keypass [keyPass] "%~nx1" [aliases]
pause
- 用法 编辑好对应的参数,拖拽
未签名
的 apk 到文件sign.bat
图标即可
Debug签名签名APK
Windows debug签名脚本
jarsigner -verbose -digestalg SHA1 -sigalg MD5withRSA -keystore ~/.android/debug.keystore -storepass "android" -keypass "android" "%~nx1" androiddebugkey
请修改 ~/.android/debug.keystore
改为你用户目录下面的 .android\debug.keystore
的绝对路径
保存成signApkDebug.bat
拖拽apk到这个脚本即可
Mac/Linux debug 签名脚本
新建文件 signApkDebug
,输入内容
#!/bin/bash
if [ ! -n "$1" ]; then
echo "unkonw path, please use apk path"
exit 1
else
jarsigner -verbose -digestalg SHA1 -sigalg MD5withRSA -keystore ~/.android/debug.keystore -storepass "android" -keypass "android" $1 "androiddebugkey"
fi
保存内容后
chmod +x signApkDebug
配置到环境变量后就可以在任何地方使用命令
signApkDebug [apkFile]
网友评论