.apk 构建自 GitHub 工作流程与本地构建不兼容

.apk Built from GitHub Workflow not Compatible with Local Build

当我尝试安装从 GitHub 工作流程构建的 .apk 而不是我在本地构建的 .apk 时,出现以下错误:

$ adb install -r /path/to/package-debug.apk
Performing Push Install
/path/to/package-debug.apk: 1 file pushed, 0 skipped. 14.1 MB/s (4047241 bytes in 0.275s)
        pkg: /data/local/tmp/package-debug.apk
Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]

如果我先卸载本地构建的包,我可以安装 GitHub 构建的版本。

我在两个包上都有 运行 aapk 以确保它们是使用相同的 mintarget 值构建的。我的猜测是调号不同,但我不确定。该构建配置为使用 build.gradle 中的默认签名配置 (signingConfig signingConfigs.debug)。 Android 开发工具的不同版本是否提供不同版本的调试签名密钥库?还是每次安装都会生成一个唯一的密钥库文件?有什么方法可以获取有关安装失败原因的更多信息?

我还注意到文件大小不同:

$ wc -c local-debug.apk
4085058 local-debug.apk

$ wc -c remote-debug.apk
4047241 remote-debug.apk

我看过,但答案是先卸载。我需要弄清楚如何使远程构建与本地构建兼容。

我在post回答这个问题之前找到了解决方案。由于我还没有在 Whosebug 上看到答案,所以我会 post 它以防它可能对其他人有帮助。

Android 开发工具似乎会在系统上生成唯一的调试密钥库,而这些系统还没有。我假设密钥库文件是通用文件。所以为了解决这个问题,我简单地将密钥库文件包含在源代码中(我假设它是安全的,因为它仅用于调试)并在 gradle.build 文件中设置它的位置。

在这种特殊情况下,我将密钥库文件放在与 gradlew 脚本相同的目录中,并将以下行添加到 app/build.gradle:

signingConfigs.debug.storeFile file("../debug.keystore")

编辑: 虽然现在我已经删除了它,因为首席开发人员认为它不安全。因此,使用此解决方案需要您自担风险,并且不要使用调试密钥来签署软件的正式版本。