gradle+shell实现自动系统签名
技术  /  管理员 发布于 7年前   464
前言
有时候我们的应用需要系统级的权限来实现一些功能(如静默安装),这时候需要给应用打上系统签名,常规操作打包apk,解压apk,删除META-INF中CERT.RSA和
CERT.SF,然后压缩,用系统签名工具签名,一顿操作后可能十分钟过去了,实在太过繁琐,因此我们做了一些简化,用gradle+shell帮我们实现自动化。
准备
1.android studio
2.系统签名文件(signapk.jar、platform.x509.pem、platform.pk8)
3.如果是mac系统,还需要libconscrypt_openjdk_jni.dylib这个文件
4.platform.x509.pem和platform.pk8是对应系统的签名,不同厂家可能有不同的
签名文件,我这里的是Google原生的签名文件。
5.文件在百度网盘
链接: https://pan.baidu.com/s/1_wGxfZcpmfmvCGPLSU-XWw 提取码: d46k
6.本文以mac系统为例,windows的按着这思路,也差不多
编写系统签名脚本
#解压unzip -q app-release.apk -d ./release#删除certrm -f ./release/META-INF/CERT.RSArm -f ./release/META-INF/CERT.SF#压缩cd ./releasefor file in $(ls)dozip -r -q app-release-tmp.apk -xi $file;donemv 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.apkrm -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/outif [ ! -d out ];then echo "create directory out..." mkdir out echo "create directory out success"fi#打release包echo "assembleRelease..."./gradlew assembleReleaseecho "assembleRelease success"#把release包移动到系统签名目录mv -f $releaseDir/app-release.apk $signDir/app-release.apkecho "system sign apk..."#进入系统签名目录,执行系统签名cd $signDir./sign.sh#把签名好的包移动到$home/out中,并用时间重命名cd $homemv $quanyuyueSignDir/app-sign.apk ./out/app-sign-`date +%Y%m%d%H%M`.apkecho "sign success"
保存上面代码为package.sh,并放在工程目录下,我的是$home目录下。
ps:要打release包还需要配置下app/build.gradle
android { ... //配置签名文件 signingConfigs { release { storeFile file("你的签名文件") storePassword "你的密码" keyAlias "你的keyAlias" keyPassword "你的keyPassword" } } buildTypes { release { signingConfigs.release ... } }
编写task调用package.sh脚本
在app/build.gradle中输入
task getPackage(type: Exec) { executable "sh" args "-c", "../packge.sh"}
这样,我们只要执行下这个task,就可以获得系统签名的apk了。
总结
以上所述是小编给大家介绍的gradle+shell实现自动系统签名,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号