对一个APK
文件进行签名,有3
种方式:
这种方式适用于对自己开发的APK
进行签名。
Gradle Kotlin DSL
:
plugins {
id("com.android.application")
}
android {
signingConfigs {
create("release") {
storeFile = file("../keystore.jks")
storePassword = "android"
keyAlias = "androiddebugkey"
keyPassword = "android"
}
}
buildTypes {
getByName("debug") {
signingConfig = signingConfigs.findByName("release")
isMinifyEnabled = false
isShrinkResources = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-common.txt")
}
getByName("release") {
signingConfig = signingConfigs.findByName("release")
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-common.txt", "proguard-nolog.txt")
}
}
}
这种方式适用于由于某种原因导致APK
文件的签名失效,重新签名。
step1、安装JDK
step2、使用keytool命令创建密钥库文件
(keystore
):
keytool -genkey -keystore keystore.jks -alias myalias -keyalg RSA -validity 20000 -dname "CN=liufupin,OU=com.fpliu,O=cpm.fpliu,L=Hangzhou,ST=Zhejiang,C=CN"
-dname
参数解释:
CN | Common Name | 名字与姓氏 |
OU | Organization Unit | 组织、单位名称 |
O | Organization | 组织名称 |
L | Locality | 城市或区域名称 |
ST | State | 美国的州,中国的省份名称 |
C | Country | 国家名称 |
-validity 20000
表示有效期是20000
天,大约是54
年。
运行效果如下:
这样在当前目录下生成了keystore.jks
文件。
step3、使用jarsigner命令对.apk
文件进行签名
jarsigner -verbose -keystore keystore.jks -storepass android -digestalg SHA1 -sigalg MD5withRSA -sigfile CERT -signedjar xx_signed.apk xx.apk myalias
SignApk.jar
是一个已包含在Android
平台源码包中的工具。如果要使用SignApk.jar
,你需要创建一个带有对应证书/公钥的私钥。 而你可以使用Openssl
来创建私钥/公钥对。在Unix/Linux
系统中使用Openssl
相对来说比较容易。
要产生RSA私钥(private key),需要一个openssl的工具,该工具在命令提示符下使用。先介绍openssl的用法: