车载应用配置系统签名

车载应用配置系统签名

在配置系统签名时,核心是在 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
相关推荐
4***99743 小时前
Kotlin序列处理
android·开发语言·kotlin
t***D2643 小时前
Kotlin在服务端开发中的生态建设
android·开发语言·kotlin
玲珑Felone3 小时前
flutter 状态管理--InheritedWidget、Provider原理解析
android·flutter·ios
路人甲ing..5 小时前
用 Android Studio 自带的模拟 Android Emulator 调试
android·java·ide·ubuntu·kotlin·android studio
路人甲ing..5 小时前
Android Studio 模拟器报错 The emulator process for AVD xxxxx has terminated.
android·java·ide·kotlin·android studio
弥巷6 小时前
【Android】 View事件分发机制源码分析
android·java
wanna7 小时前
安卓自学小笔记第一弹
android·笔记
Kapaseker7 小时前
五分钟实战 Compose 展开/收起动画
android·kotlin