车载应用配置系统签名

车载应用配置系统签名

在配置系统签名时,核心是在 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
相关推荐
Lei活在当下1 小时前
【项目踩坑实录】并发环境下,Glide缓存引起的图片加载异常
android·debug·glide
my_power5204 小时前
检出git项目到android studio该如何配置
android·git·android studio
三少爷的鞋7 小时前
Repository 方法设计:suspend 与 Flow 的决选择指南(以朋友圈为例)
android
阿里云云原生7 小时前
Android App 崩溃排查指南:阿里云 RUM 如何让你快速从告警到定位根因?
android·java
cmdch20179 小时前
手持机安卓新增推送按钮功能
android
攻城狮20159 小时前
【rk3528/rk3518 android14 kernel-6.10 emcp sdk】
android
何妨呀~10 小时前
mysql 8服务器实验
android·mysql·adb
QuantumLeap丶10 小时前
《Flutter全栈开发实战指南:从零到高级》- 25 -性能优化
android·flutter·ios
木易 士心12 小时前
MVC、MVP 与 MVVM:Android 架构演进之路
android·架构·mvc
百锦再12 小时前
国产数据库的平替亮点——关系型数据库架构适配
android·java·前端·数据库·sql·算法·数据库架构