【问题标题】:.apk Built from GitHub Workflow not Compatible with Local Build从 GitHub 工作流构建的 .apk 与本地构建不兼容
【发布时间】:2022-02-07 00:03:30
【问题描述】:

当我尝试安装从 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

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

【问题讨论】:

    标签: android github apk github-actions android-keystore


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-16
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 2020-04-12
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多