• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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实现自动系统签名,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
    如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

    您可能感兴趣的文章:
    • Android Gradle依赖管理、去除重复依赖、忽略的方式
    • android studio更新gradle错误构建项目失败的解决方法
    • Android Studio和Gradle使用不同位置JDK的问题解决
    • Jenkins使用Gradle编译Android项目详解
    • Gradle环境下导出Swagger为PDF的步骤详解
    • Android Studio Gradle依赖冲突解决方法
    • 关于gradle你应该知道的一些小事
    • 基于Java Gradle复制项目模块过程图解
    上一篇:Hadoop环境搭建过程中遇到的问题及解决方法
    下一篇:matlab读取串口数据并显示曲线的实现示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    gradle+shell实现自动系统签名 gradle+shell,实现,自动,系统,