gradle打包之签名

Android应用必须签名才能在系统上安装。签名确保应用的完整性和开发者身份,防止篡改。签名过程涉及keystore或pk8/x509.pem文件。未签名apk无法安装,相同包名不同签名也会导致安装失败。Android Studio提供可视化签名工具,gradle配置可自动签名。签名配置在buildTypes中,debug和release模式下签名不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

签名

app为什么要签名?
debug包需要签名吗?
debug包的签名与release包的签名的区别?
android 的debug包需要签名吗?

所有的Android应用程序都要求开发人员用一个证书对app进行数字签名,anroid系统不会安装没有进行签名的app。

签名即用一个私钥以及证书生成一个签名。

未签名的apk是无法再android系统上安装的,安装时会报错,比如:

adb install app-release-unsigned-0.0.2.apk
Performing Streamed Install
adb: failed to install app-release-unsigned-0.0.2.apk: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed collecting certificates for /data/app/vmdl138098000.tmp/base.apk: Package /data/app/vmdl138098000.tmp/base.apk has no certificates at entry AndroidManifest.xml]

提示没有证书。

相同包名的不同签名的app也是会安装失败的:在这里插入图片描述

签名的不同工具

Android 应用的签名工具有两种:jarsigner 和 apksigner。它们的签名算法没什么区别,主要是签名使用的文件不同。它们的区别如下:

jarsigner:jdk 自带的签名工具,可以对 jar 进行签名。使用 keystore 文件进行签名。生成的签名文件默认使用 keystore 的别名命名。

apksigner:Android sdk 提供的专门用于 Android 应用的签名工具。使用 pk8、x509.pem 文件进行签名。其中 pk8 是私钥文件,x509.pem 是含有公钥的文件。生成的签名文件统一使用“CERT”命名。

既然这两个工具都是给 APK 签名的,那么 keystore 文件和 pk8,x509.pem 他们之间是不是有什么联系呢?答案是肯定的,他们之间是可以转化的,这里就不再分析它们是如何进行转化,网上的例子很多。

还有一个需要注意的知识点,如果我们查看一个keystore 文件的内容,会发现里面包含有一个 MD5 和 SHA1 摘要,这个就是 keystore 文件中私钥的数据摘要,这个信息也是我们在申请很多开发平台账号时需要填入的信息。

先生成未签名的apk,然后再执行签名的任务

未签名时,打包生成的apk的名称是带有"-unsigned"的,比如:
Coming-play-x86-release-unsigned-0.0.2.apk

签名任务会在签名完成后去掉名称里的"-unsigned"文字。

当然不用gradle的task自动签名的话,使用android studio的可视化签名工具也可以。

在这里插入图片描述

signingConfigs {
		debug {
           keyAlias keystoreAlias
           keyPassword keystoreAliasPSW
           storeFile keyfile
           storePassword keystorePSW
       }
       release {
           keyAlias keystoreAlias
           keyPassword keystoreAliasPSW
           storeFile keyfile
           storePassword keystorePSW
       }
}
  buildTypes {
  		debug {
  		...
  		}
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            zipAlignEnabled true
            signingConfig signingConfigs.release
        }
    }

finalizedBy

我们如果希望任务执行结束的时候自动执行某个任务,比如我们在打包结束后自动上报包体积到后台,如果用dependsOn,那么我们就需要类似打包任务.dependsOn taskUpload,后续打包就需要通过taskUpload来执行,这样就很别扭,所以这里就有来finalizedBy,用于任务执行结束后自动执行其他任务。

task taskC {
    doLast{
    println '我是taskC'
    }
}

task taskD {
    doLast{
    println '我是taskD'
    }
}

taskC.finalizedBy taskD

执行taskC,会得到结果:

Task :taskC
我是taskC

Task :taskD
我是taskD

参考:
android 为什么需要签名

android开发过程Debug包签名问题
Android Studio配置Debug包的签名
Android studio配置使debug签名和release签名一致
Android项目在debug模式下打正式签名包

【Gradle深入浅出】——Gradle基础概念

Android Studio如何将签名文件配置在项目中
android studio 生成签名文件
安卓打签名包
Android签名机制之—签名过程详解
Android Studio生成签名文件和自动签名
详解Android v1、v2、v3签名(小结)
Android Studio的两种模式及签名配置

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值