马上:系统签名apk和工具
开发一款系统插件app, 系统权限,
android:sharedUserId="android.uid.system
, 其中涉及系统签名和一下工具使用,记录一下
android:sharedUserId
警告:API 级别 29 中已弃用此常量。 共享用户 ID 会在软件包管理器中导致具有不确定性的行为。因此,强烈建议您不要使用它,并且我们在未来的 Android 版本中会将其移除。相反,应用应使用适当的通信机制(例如服务和内容提供程序),在共享组件之间实现互操作性。
与其他应用共享的 Linux 用户 ID 的名称。默认情况下,Android 会为每个应用分配其唯一用户 ID。不过,如果针对两个或多个应用将此属性设置为相同的值,则这些应用都将共享相同的 ID,前提是这些应用的证书集完全相同。具有相同用户 ID 的应用可以访问彼此的数据,如果需要的话,还可以在同一进程中运行。
系统app签名证书
asop, build/target/product/security 下的相关签名文件
signapk.jar //自带的签名工具,能二次签名
build/target/product/security/platform.x509.pem //
build/target/product/security/platform.pk8 //
platform.x509.pem X.509的数字证书,有用户的公钥等信息 是不是想起了X509TrustManager
pk8文件,估计看名字是private key ,私钥,加密的
java -jar signapk.jar platform.x509.pem platform.pk8 unsign.apk sign.apk
通过jar工具进行系统签名
Android Studio 配置打包签名
android {
signingConfigs {
//签名
vx_systemKeystore {
keyAlias ''
keyPassword ''
storeFile file('./xxa.keystore')
storePassword ''
}
}
buildTypes {
debug {
signingConfig signingConfigs.vx_systemKeystore
}
}
}
上面一般配置签名文件的做法。那调试系统app,总不能每次都手动签名吧,所以强烈推荐 keytool-importkeypair 。经实践失败,分析其原因是 -alias
, 不能有空格!!!
那怎么办,又想用现有的签名文件,keytool
Key and Certificate Management Tool
Commands:
-certreq Generates a certificate request
-changealias Changes an entry's alias
-delete Deletes an entry
-exportcert Exports certificate
-genkeypair Generates a key pair
-genseckey Generates a secret key
-gencert Generates certificate from a certificate request
-importcert Imports a certificate or a certificate chain
-importpass Imports a password
-importkeystore Imports one or all entries from another keystore
-keypasswd Changes the key password of an entry
-list Lists entries in a keystore
-printcert Prints the content of a certificate
-printcertreq Prints the content of a certificate request
-printcrl Prints the content of a CRL file
-storepasswd Changes the store password of a keystore
-showinfo Displays security-related information
Use "keytool -?, -h, or --help" for this help message
Use "keytool -command_name --help" for usage of command_name.
Use the -conf <url> option to specify a pre-configured options file.
可以改别名,别名密码,秘钥密码,等
可以解决,.jks和.keystore文件互相转换问题
keytool -changealias -keystore xxa.keystore -alias 'old' -destalias 'new' //Enter 修改新的别名
Out:
Enter keystore password:
Enter key password for
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore vxiao.keystore -destkeystore vxiao.keystore -deststoretype pkcs12".
keytool -storepasswd -keystore xxa.keystore //Eneter ,修改密码
keytool -keypasswd -keystore 签名文件路径 -alias 新的证书别名 //修改别名密码
keytool -importkeystore -srckeystore aa.keystore -destkeystore aa.keystore -deststoretype pkcs12 //Enter 转pkcs12
keytool -v -importkeystore -srckeystore a.keystore -srcstoretype PKCS12 -destkeystore a.jks -deststoretype JKS //keystore 转jks
keytool -importkeystore -srckeystore a.jks -destkeystore a.jks -deststoretype pkcs12 //转pkcs12
错误原因:keyPassword ,storePassword 密码不一致
keytool error: java.security.UnrecoverableKeyException: Cannot recover key
java.security.UnrecoverableKeyException: Cannot recover key
at java.base/sun.security.provider.KeyProtector.recover(KeyProtector.java:303)
at java.base/sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:146)
at java.base/java.security.KeyStoreSpi.engineGetEntry(KeyStoreSpi.java:494)
at java.base/sun.security.util.KeyStoreDelegator.engineGetEntry(KeyStoreDelegator.java:166)
at java.base/java.security.KeyStore.getEntry(KeyStore.java:1548)
at java.base/sun.security.tools.keytool.Main.recoverEntry(Main.java:3668)
at java.base/sun.security.tools.keytool.Main.doImportKeyStoreSingle(Main.java:2328)
at java.base/sun.security.tools.keytool.Main.doImportKeyStoreAll(Main.java:2378)
at java.base/sun.security.tools.keytool.Main.doImportKeyStore(Main.java:2270)
at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:1220)
at java.base/sun.security.tools.keytool.Main.run(Main.java:417)
at java.base/sun.security.tools.keytool.Main.main(Main.java:410)