gradle+shell实现自动系统签名

 更新时间:2019年08月06日 15:43:06   作者:氺灬丶丷  
这篇文章主要介绍了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.文件在百度网盘

链接: https://pan.baidu.com/s/1_wGxfZcpmfmvCGPLSU-XWw 提取码: d46k

6.本文以mac系统为例,windows的按着这思路,也差不多

编写系统签名脚本

#解压
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
        ...
      }
    }

编写task调用package.sh脚本

在app/build.gradle中输入

task getPackage(type: Exec) {
    executable "sh"
    args "-c", "../packge.sh"
}

这样,我们只要执行下这个task,就可以获得系统签名的apk了。

总结

以上所述是小编给大家介绍的gradle+shell实现自动系统签名,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • 如何利用FFmpeg合并音频和视频(多种方式)

    如何利用FFmpeg合并音频和视频(多种方式)

    这篇文章主要介绍了如何利用FFmpeg合并音频和视频,详细介绍了FFmpeg 多个音频合并的2种方法,通过场景分享介绍了FFmpeg合并视频文件的4种方法,需要的朋友可以参考下
    2023-02-02
  • 8种类型极品程序员,不知你属于哪一种?

    8种类型极品程序员,不知你属于哪一种?

    这篇文章主要介绍了8种类型极品程序员,不知你属于哪一种?本文总结归纳了8种程类型的程序员,总结的非常精辟,来看看你是属于哪一种吧~
    2014-09-09
  • Xmind8 Pro 最新激活序列号

    Xmind8 Pro 最新激活序列号

    最近需要打开文件后缀名为.xmind的文件,所以下载了Xmind8 。打开以后想要导出,奈何普通版本只能导出.txt文本文档,所以就总结出了这篇文章,对Xmind8 Pro破解方法感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • Maui Blazor 使用摄像头实现代码

    Maui Blazor 使用摄像头实现代码

    由于Maui Blazor中界面是由WebView渲染,所以再使用Android的摄像头时无法去获取,因为原生的摄像头需要绑定界面组件,这篇文章主要介绍了Maui Blazor 使用摄像头实现,需要的朋友可以参考下
    2023-01-01
  • Selenium实现微博自动化运营之关注、点赞、评论功能

    Selenium实现微博自动化运营之关注、点赞、评论功能

    这篇文章主要介绍了Selenium实现微博自动化运营:关注、点赞、评论,本文通过实例代码图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 深入理解TCP协议与UDP协议的原理及区别

    深入理解TCP协议与UDP协议的原理及区别

    网络编程有三个要素,分别是IP地址、端口号和通信协议,那本文主要讲述的是TCP与UDP这两种通信协议,以及编程的实现,感兴趣的可以了解一下
    2021-06-06
  • 微信小程序(应用号)组件详细介绍

    微信小程序(应用号)组件详细介绍

    这篇文章主要介绍了微信小程序(应用号)组件详细介绍的相关资料,需要的朋友可以参考下
    2016-09-09
  • BurpSuite超详细安装和基础使用教程(已破解)

    BurpSuite超详细安装和基础使用教程(已破解)

    Burp Suite 是用于攻击web 应用程序的集成平台包含了许多Burp工具,它主要用来做安全性渗透测试,可以实现拦截请求、Burp Spider爬虫、漏洞扫描(付费)等类似Fiddler和Postman但比其更强大的功能,今天给大家介绍下BurpSuite安装破解使用教程,感兴趣的朋友一起看看吧
    2022-10-10
  • 使用 tke-autoscaling-placeholder 实现秒级弹性伸缩的方法

    使用 tke-autoscaling-placeholder 实现秒级弹性伸缩的方法

    这篇文章主要介绍了使用 tke-autoscaling-placeholder 实现秒级弹性伸缩的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 嘁,都2020了,你咋还在单纯的使用if-else

    嘁,都2020了,你咋还在单纯的使用if-else

    我们在写程序时,常常需要指明两条或者更多的执行路径,使得程序执行时,能够选择其中一条路径,去执行相应的语句,产生对应的结果 —— 这也是条件语句在程序中的作用。下面通过例子给大家介绍下if-else的使用,感兴趣的朋友一起看看吧
    2020-10-10

最新评论