有时候我们的应用需要系统级的权限来实现一些功能(如静默安装),这时候需要给应用打上系统签名,常规操作打包apk,解压apk,删除meta-inf中cert.rsa和
cert.sf,然后压缩,用系统签名工具签名,一顿操作后可能十分钟过去了,实在太过繁琐,因此我们做了一些简化,用gradle+shell帮我们实现自动化。
#解压 unzip -q app-release.apk -d ./release #删除cert rm -f ./release/meta-inf/cert.rsa rm -f ./release/meta-inf/cert.sf #压缩 cd ./release for file in $(ls) do zip -r -q app-release-tmp.apk -xi $file; done mv app-release-tmp.apk ../ cd .. #系统签名 java -jar signapk.jar platform.x509.pem platform.pk8 app-release-tmp.apk app-sign.apk #清理临时文件 rm -f app-release-tmp.apk rm -rf ./release
保存为sign.sh,与signapk.jar、platform.x509.pem、platform.pk8、libconscrypt_openjdk_jni.dylib放在同一目录下,我这里是放在项目的
app/release/sign/目录下
#需注意配置一下路径 #home 本shell放置绝对路径 #debugdir assembledebug 输出路径 #releasedir assemblerelease 输出路径 #signdir 系统签名文件路径 home=/volumes/samsung_t5/android/demo/ debugdir=$home/app/build/outputs/apk/debug/ releasedir=$home/app/build/outputs/apk/release/ signdir=$home/app/release/sign/ #进入工作目录 cd $home #创建签名后的输出目录$home/out if [ ! -d out ];then echo "create directory out..." mkdir out echo "create directory out success" fi #打release包 echo "assemblerelease..." ./gradlew assemblerelease echo "assemblerelease success" #把release包移动到系统签名目录 mv -f $releasedir/app-release.apk $signdir/app-release.apk echo "system sign apk..." #进入系统签名目录,执行系统签名 cd $signdir ./sign.sh #把签名好的包移动到$home/out中,并用时间重命名 cd $home mv $quanyuyuesigndir/app-sign.apk ./out/app-sign-`date +%y%m%d%h%m`.apk echo "sign success"
保存上面代码为package.sh,并放在工程目录下,我的是$home目录下。
ps:要打release包还需要配置下app/build.gradle
android { ... //配置签名文件 signingconfigs { release { storefile file("你的签名文件") storepassword "你的密码" keyalias "你的keyalias" keypassword "你的keypassword" } } buildtypes { release { signingconfigs.release ... } }
在app/build.gradle中输入
task getpackage(type: exec) { executable "sh" args "-c", "../packge.sh" }
这样,我们只要执行下这个task,就可以获得系统签名的apk了。
更多文章,尽在
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论