gradle+shell实现自动系统签名
前言
有时候我们的应用需要系统级的权限来实现一些功能(如静默安装),这时候需要给应用打上系统签名,常规操作打包apk,解压apk,删除META-INF中CERT.RSA和
CERT.SF,然后压缩,用系统签名工具签名,一顿操作后可能十分钟过去了,实在太过繁琐,因此我们做了一些简化,用gradle+shell帮我们实现自动化。
准备
1.androidstudio
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-qapp-release.apk-d./release #删除cert rm-f./release/META-INF/CERT.RSA rm-f./release/META-INF/CERT.SF #压缩 cd./release forfilein$(ls) do zip-r-qapp-release-tmp.apk-xi$file; done mvapp-release-tmp.apk../ cd.. #系统签名 java-jarsignapk.jarplatform.x509.pemplatform.pk8app-release-tmp.apkapp-sign.apk #清理临时文件 rm-fapp-release-tmp.apk rm-rf./release
保存为sign.sh,与signapk.jar、platform.x509.pem、platform.pk8、libconscrypt_openjdk_jni.dylib放在同一目录下,我这里是放在项目的
app/release/sign/目录下
编写打包和调用系统签名脚本
#需注意配置一下路径 #home本shell放置绝对路径 #debugDirassembleDebug输出路径 #releaseDirassembleRelease输出路径 #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[!-dout];then echo"createdirectoryout..." mkdirout echo"createdirectoryoutsuccess" fi #打release包 echo"assembleRelease..." ./gradlewassembleRelease echo"assembleReleasesuccess" #把release包移动到系统签名目录 mv-f$releaseDir/app-release.apk$signDir/app-release.apk echo"systemsignapk..." #进入系统签名目录,执行系统签名 cd$signDir ./sign.sh #把签名好的包移动到$home/out中,并用时间重命名 cd$home mv$quanyuyueSignDir/app-sign.apk./out/app-sign-`date+%Y%m%d%H%M`.apk echo"signsuccess"
保存上面代码为package.sh,并放在工程目录下,我的是$home目录下。
ps:要打release包还需要配置下app/build.gradle
android{ ... //配置签名文件 signingConfigs{ release{ storeFilefile("你的签名文件") storePassword"你的密码" keyAlias"你的keyAlias" keyPassword"你的keyPassword" } } buildTypes{ release{ signingConfigs.release ... } }
编写task调用package.sh脚本
在app/build.gradle中输入
taskgetPackage(type:Exec){ executable"sh" args"-c","../packge.sh" }
这样,我们只要执行下这个task,就可以获得系统签名的apk了。
总结
以上所述是小编给大家介绍的gradle+shell实现自动系统签名,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!