打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
gradle+shell实现自动系统签名

前言

有时候我们的应用需要系统级的权限来实现一些功能(如静默安装),这时候需要给应用打上系统签名,常规操作打包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. 文件在百度网盘

  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了。

更多文章,尽在个人博客

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android Studio 入门级教程(三):gradle项目构建
Android Project和app中两个build.gradle配置的区别
十分钟理解Gradle
Gradle打包APK的一些小技巧和productFlavor配置
热修复框架Tinker的从0到集成之路
Android Studio系列教程五
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服