
android:sharedUserId="android.uid.system"
3. platform签名 4. root固件 (有su) 5. 调用厂商封装好的系统权限的sdk
platform.pk8 保存private key 加密
platform.x509.pem X.509证书 存储数字证书,公钥信息还能存各种key
java -jar signapk.jar platform.x509.pem platform.pk8 [old].apk [new].apk
需要先生成apk,输入命令签名,再使用adb安装
调试 非常不方便,故想将pk8 和pem转成通用的jks或者keystore的签名
Note:
android一般除了使用jarsigner签名,还有使用signapk 后者位于android源码,前者位于jdk中。两者使用的文件格式不同前者使用JKS,后者使用公钥+私钥是分开的
1. 官网,无Windows版本
2. 镜像,有Windows版本
首先对应好你的编译APP的JDK版本,如果是JDK8,就下载1.1.1,
如果是高的版本就下载3.0.0,不然你的JDK8keytool识别不了
主要分三步
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.priv.pem -nocrypt
openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.pk12 -name [别名]
jks
keytool -importkeystore -destkeystore platform.jks -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass [密码] -alias [别名]
keystore
keytool -importkeystore -destkeystore platform.keystore -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass [密码] -alias [别名]
keytool 错误: java.io.IOException: parseAlgParameters failed: ObjectIdentifier() -- data isn't an object ID (tag = 48)
解决方案: 使用jdk16的keytool
android {
signingConfigs {
MySignName {
keyAlias "[别名]"
keyPassword "[密码]"
storeFile file('[jks路径]')
storePassword "[密码]"
}
}
buildTypes {
debug {
signingConfig signingConfigs.MySignName
}
release{
signingConfig signingConfigs.MySignName
}
}
}
Example:
signingConfigs {
signconfig {
keyAlias 'platform'
keyPassword 'android'
storeFile file('../app/platform.jks')
storePassword 'android'
}
}
buildTypes {
debug {
signingConfig signingConfigs.signconfig
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
release {
signingConfig signingConfigs.signconfig
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
主要分五步
keytool -importkeystore -srckeystore debug.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12
openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem
dump的文件格式
Bag Attributes
friendlyName: [别名]
localKeyID: 54 69 6D 65 20 31 35 37 31 38 39 30 30 31 35 30 30 30
Key Attributes:
-----BEGIN PRIVATE KEY-----
....
-----END PRIVATE KEY-----
Bag Attributes
friendlyName: [别名]
localKeyID: 54 69 6D 65 20 31 35 37 31 38 39 30 30 31 35 30 30 30
subject=C = US, ST = California, L = Mountain View, O = Android, OU = Android, CN = Android, emailAddress = android@android.com
issuer=C = US, ST = California, L = Mountain View, O = Android, OU = Android, CN = Android, emailAddress = android@android.com
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
dos命令不好实现,建议采用bash
grep -zoe '-----BEGIN CERTIFICATE-----.*-----END CERTIFICATE-----' tmp.rsa.pem>cert.x509.pem
dos命令不好实现,建议采用bash
grep -zoe '-----BEGIN CERTIFICATE-----.*-----END CERTIFICATE-----' tmp.rsa.pem>private.rsa.pem
openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 -nocrypt
参考
Android签名证书 keystore jks pem x509
pk8/x509.pem转换为keystore