一、环境
- 需要有 android11 的源码
- android11 的编译环境
二、签名文件 platform.jks 文件生成
- 签名工具下载
# keytool-importkeypair https://github.com/getfatday/keytool-importkeypair/tree/master - 密钥文件准备:platform.pk8 platform.x509.pem
# 在 android11 源码的以下目录可以找到 platform.pk8 platform.x509.pem 文件 build/make/target/product/security/ - 执行签名操作,当前目录需要有 keytool-importkeypair 工具,以及 platform.pk8 platform.x509.pem 密钥文件
## 需要先有 Android11 的编译环境 # 先在 Android11 的源码中执行 source build/envsetup.sh # 然后执行 lunch 选择单板## 执行以下命令生成 platform.jks 密钥库文件 ./keytool-importkeypair -k platform.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias platform # -k platform.jks 生成的 Java KeyStore 文件名 # -p 123456 设置该密钥库的访问密码(Store Password 和 Key Password) # -pk8 platform.pk8 指定你要转换的系统私钥文件 # -cert platform.x509.pem 指定对应的系统公钥证书文件 # -alias platform 为这个密钥在 JKS 文件中起一个名字,后续在 IDE 中配置时需要用到
三、platform.jks 文件使用
- 在 AndroidManifest.xml 文件中添加声明,我使用的声明如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:sharedUserId="android.uid.system"> - 在 build.gradle.kts 中声明并使用系统签名,demo 如下:
android {namespace = "com.example.demo"compileSdk = 36 // 注意:这里通常直接写数字// 1. 定义签名配置signingConfigs {create("release") {storeFile = file("../platform.jks") // 假设文件放在项目根目录(app目录的上一级)storePassword = "123456"keyAlias = "platform"keyPassword = "123456"}// 通常建议 debug 也用系统签名,方便开发调试getByName("debug") {storeFile = file("../platform.jks")storePassword = "123456"keyAlias = "platform"keyPassword = "123456"}}defaultConfig {applicationId = "com.example.demo"minSdk = 30targetSdk = 36versionCode = 1versionName = "1.0"testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {isMinifyEnabled = false// 2. 在 release 版本中使用上面定义的签名signingConfig = signingConfigs.getByName("release")proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")}debug {// 3. 在 debug 版本中也使用系统签名signingConfig = signingConfigs.getByName("debug")}}compileOptions {sourceCompatibility = JavaVersion.VERSION_11targetCompatibility = JavaVersion.VERSION_11} } - 直接安装后使用 ps -A | grep 包名 查看是否已经是 system 权限运行;
