车载应用配置系统签名

车载应用配置系统签名

在配置系统签名时,核心是在 android 闭包下的 signingConfigs 中定义签名信息,并在 buildTypes 中引用它

假设你的签名文件名为 system_signature.jks,并且你已经将其放在了 App 模块的根目录下 (即与 build.gradle 同级)。

以下是两种构建脚本语言的详细配置方式:

1. Groovy (build.gradle)

这是传统 Android 项目最常用的格式。

java 复制代码
android {
    // ... 其他配置

    // 1. 配置签名信息
    signingConfigs {
        // 定义一个名为 system 的签名配置(名字可以自定义,如 release)
        system {
            storeFile file("platform.jks")      // 如果在 app 目录下直接写文件名
            storePassword "你的keystore密码"     // 例如:android
            keyAlias "你的别名"                  // 例如:androiddebugkey 或 platform
            keyPassword "你的别名密码"            // 例如:android

            // 强制开启 v1 和 v2 签名(通常车载系统为了兼容性建议都开启)
            v1SigningEnabled true
            v2SigningEnabled true
        }
    }

    // 2. 在构建类型中应用签名
    buildTypes {
        release {
            // 引用上面定义的 'system' 签名配置
            signingConfig signingConfigs.system
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

        debug {
            // 方便调试:让 debug 包也拥有系统签名,这样可以直接 Run 到车机上
            signingConfig signingConfigs.system
        }
    }
}

2. Kotlin DSL (build.gradle.kts)

如果你使用的是较新的 Android Studio 模版,通常默认为 KTS 格式。

ini 复制代码
android {
    // ... 其他配置

    // 1. 配置签名信息
    signingConfigs {
        // 创建一个名为 "system" 的配置
        create("system") {
            storeFile = file("platform.jks")
            storePassword = "你的keystore密码"
            keyAlias = "你的别名"
            keyPassword = "你的别名密码"

            enableV1Signing = true
            enableV2Signing = true
        }
    }

    // 2. 在构建类型中应用签名
    buildTypes {
        getByName("release") {
            // 引用名为 "system" 的签名配置
            signingConfig = signingConfigs.getByName("system")
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }

        getByName("debug") {
            // 同样给 debug 包配置系统签名
            signingConfig = signingConfigs.getByName("system")
        }
    }
}

关键注意事项

1. Manifest 声明 (Android 10 (API 29) 开始弃用 sharedUserId)

既然配置了系统签名,你的应用通常需要声明自己是系统用户。请确保你的 AndroidManifest.xml<manifest> 根节点中包含:

ini 复制代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.your.package.name"
    android:sharedUserId="android.uid.system"> 

如果不加这句,即便签名正确,你也拿不到系统权限;且如果系统里已有相同 uid 的应用,安装时会报 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

2. 动态配置签名信息

  1. 在项目根目录 local.properties 添加:
ini 复制代码
SYSTEM_KEY_PATH=keys/platform.jks
SYSTEM_KEY_PASSWORD=platform
SYSTEM_KEY_ALIAS=platform
SYSTEM_ALIAS_PASSWORD=platform
  1. 修改 build.gradle 读取这些值
vbscript 复制代码
    android {
        signingConfigs {
         create("system") {
            // 从 gradle.properties 中读取文件路径和密码
            storeFile = file(project.rootDir.absolutePath + "/app/" + project.property("SYSTEM_STORE_FILE").toString())
            storePassword = project.property("SYSTEM_STORE_PASSWORD").toString()
            keyAlias = project.property("SYSTEM_KEY_ALIAS").toString()
            keyPassword = project.property("SYSTEM_KEY_PASSWORD").toString()
            }
        }
        // ...
    }
  1. 验证签名,打包完成后,你可以使用 apksigner 验证签名是否生效
arduino 复制代码
apksigner verify -v --print-certs your_app.apk

验证信息

csharp 复制代码
C:\Users\ZQ\AppData\Local\Android\Sdk\build-tools\34.0.0>apksigner verify -v --print-certs C:\ZQ\change_system_sign\VwCopilotLauncher.apk
Verifies
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): false
Verified using v3 scheme (APK Signature Scheme v3): true
Verified using v3.1 scheme (APK Signature Scheme v3.1): false
Verified using v4 scheme (APK Signature Scheme v4): false
Verified for SourceStamp: false
Number of signers: 1
Signer #1 certificate DN: EMAILADDRESS=seqc.zcdev@seres.cn, CN=Seres, OU=Seres, O=Seres, L=Chengdu View, ST=SiChuan, C=ZH
Signer #1 certificate SHA-256 digest: f4e8fbc3b6c23a000639e3df8f1b4be1ed153436e638f7bdc65598f9d0d3c7e8
Signer #1 certificate SHA-1 digest: 816003d74e06bad2bab5f440801ed9ce2f75b89e
Signer #1 certificate MD5 digest: 907c255625cb183c7906de565522b446
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 2048
Signer #1 public key SHA-256 digest: 7c51217f508f3c11341e5e025e7dc6c8eb103f1e850a6000433b8ae9cda3915b
Signer #1 public key SHA-1 digest: 5c09f551e8f356d979d7da239fd65857fc84d330
Signer #1 public key MD5 digest: e278637218a2bdfcac56bd279ac80dee
相关推荐
贺biubiu12 小时前
2025 年终总结|总有那么一个人,会让你千里奔赴...
android·程序员·年终总结
xuekai2008090112 小时前
mysql-组复制 -8.4.7 主从搭建
android·adb
nono牛13 小时前
ps -A|grep gate
android
未知名Android用户14 小时前
Android动态变化渐变背景
android
nono牛15 小时前
Gatekeeper 的精确定义
android
stevenzqzq17 小时前
android启动初始化和注入理解3
android
城东米粉儿19 小时前
compose 状态提升 笔记
android
粤M温同学19 小时前
Android 实现沉浸式状态栏
android
ljt272496066120 小时前
Compose笔记(六十八)--MutableStateFlow
android·笔记·android jetpack