Android 包测试没有匹配目标的签名

Android package test does not have a signature matching the target

关于应用签名有很多类似的问题,like this。 但是 none 是我的情况。

我曾经有一个 CI 运行 ./gradlew :App:assembleDebug :App:assembleAndroidTest

为了节省时间,我尝试在两个不同的 jobs/pipelines 中并行化两个 assemble 命令 ./gradlew :App:assembleDebug./gradlew :App:assembleAndroidTest

但是现在,我从测试实验室收到了这个错误:

com.company.debug.test does not have a signature matching the target com.company.debug

How/why 当我在另一个实例中编译时签名会改变?解决方案很明确,只需将两者重新组合即可。但我希望了解签名的这种 Android/Gradle 行为。

谢谢!

调试版本使用调试密钥签名,调试密钥由每台机器上的 Android 工具生成。密钥存储在 user home directory 中。 IE。默认情况下,每台机器都有不同的调试签名密钥,彼此不兼容。

我的猜测是您的 CI jobs/pipelines 会做两件事中的一件或两件事:

  1. 运行 在不同的机器上
  2. 为每个作业生成一个新的调试密钥,因为您不共享机器环境

一个可能的解决方案是将调试密钥作为存储库的一部分并配置 gradle 以使用该密钥进行签名:

android {
    ...
    signingConfigs {
        debug {
            storeFile rootProject.file('debug.keystore')
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storePassword 'android'
        }
    }
    ...
}

您可以在 , and the official Android app signing documentation 中找到更多详细信息。