【问题标题】:Using Firebase App Distribution service is resulting in app not installed error使用 Firebase 应用分发服务导致应用未安装错误
【发布时间】:2020-01-27 10:24:05
【问题描述】:

我在 Android 平台上使用 Firebase app distribution service。对于自动分发,我根据the docs 中提到的步骤设置了 Gradle 文件。设置和验证成功。分发也很成功。但是,一旦我使用适用于 Android 的 Firebase 的 App Tester 应用程序下载该应用程序,就会导致应用程序未安装错误。这既适用于调试版本,也适用于发布版本。

我在禁用 Google Play Protect 后尝试安装该应用,但问题仍然存在。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,因为它应该直接提交给 Firebase 支持。 support.google.com/firebase/contact/support
  • @DougStevenson 由于该服务昨天发布,可能有很多开发人员面临同样的问题。我从事 Android 应用程序开发已有 4 年了,我已经很好地处理了该应用程序的所有其他方面。该应用程序在任何构建变体中都没有安装在多个设备上,这令人担忧。此外,此处 Firebase 团队成员的回答将帮助所有面临此问题的开发人员。请不要关闭此问题。
  • 感谢您的反馈。我听从了你的建议:reddit.com/r/Firebase/comments/d9wmjm/…
  • 我的猜测是:有没有可能您已经安装了不兼容版本的应用程序?
  • 正如我对@JamesWatson 的答案所评论的那样,不。

标签: android firebase firebase-app-distribution


【解决方案1】:

当我们的应用程序的生产版本在相关设备上可用时,我们遇到了这个错误。

只需卸载生产应用程序就很有效果 - 然后我们可以安装我们的测试/开发/两个应用程序而不会出现任何问题。

【讨论】:

  • 感谢您的回复。但是不,我没有在目标设备上安装该应用程序。
  • 我遇到了类似的问题。安装了以前的快照版本,并且在通过 App Tester 更新应用程序时,我得到了毫无意义的:安装失败错误。就我而言,我必须执行两个步骤:卸载以前安装的应用程序并重新启动手机。接下来,我可以通过 App Tester 更新应用。
【解决方案2】:

我有同样的问题。于是查了日志,发现安装失败的时候是这样的:

2019-10-07 10:20:29.941 771-2406/? E/ResolverController: No valid NAT64 prefix (114, <unspecified>/0)
2019-10-07 10:20:30.740 1278-1537/? W/NativeHelper: Failure copying native libraries [errorCode=-113]
2019-10-07 10:20:30.740 1278-1537/? E/PackageInstallerSession: Commit of session 392193568 failed: Failed to extract native libraries, res=-113

所以我认为我使用的 APK 文件一定有问题。我按下 Build -> Build APK(s) 并在完成后将该文件上传到 Firebase。我不确定我第一次真的经历了构建过程,还是直接从构建文件夹中获取了 apk。它可能已损坏或只是错误的。我建议再执行一次这些步骤,并确保构建正确的步骤并上传。

【讨论】:

    【解决方案3】:

    确保为每个变体提供signingConfigs

    将以下代码添加到您应用的build.gradleandroid 标记中:

    signingConfigs {
        config {
            keyAlias '<YOUR_ALIES>'
            keyPassword '<YOUR_KEY_PASSWORD>'
            storeFile file('<YOUR_KEY_PATH>') // Usually use '../keystore.key'
            storePassword '<YOUR_STORE_PASSWORD>'
        }
    }
    

    最后,将以下行添加到您应用的buildTypes 中的每个变体build.gradle 中:

    signingConfig signingConfigs.config
    

    希望这会有所帮助。

    【讨论】:

    • 这是正确的答案。您不希望您的 QA/内部测试人员每次都需要卸载。只需使用您当前的密钥库文件或新的密钥库文件对分布式版本进行签名 - 没关系。
    • 对于使用 flutter.dev/docs/deployment/android 签署应用程序的 Flutter 用户来说,这对我有用
    【解决方案4】:

    这是一个随机错误(显然)。

    对我有用的是手动删除app 模块中的build 文件夹(只需清理项目并不会删除所有已编译的代码),再次构建 APK,在 FAD 上重新上传,然后再上传 APK安装成功。

    【讨论】:

      【解决方案5】:

      我与一位客户遇到了这个问题,结果她需要删除手机上的应用程序版本才能使其正常工作。 (它是以前安装的非 Firebase 版本)

      【讨论】:

      • 我以前也遇到过这种情况,但我目前遇到这种情况并不能解决问题。
      【解决方案6】:

      在尝试了所有其他解决方案后,我发现问题在于没有足够的可用存储空间 - 在这种情况下,包安装程序也会给出通用的“安装失败”。希望这可以节省其他人我浪费的时间。

      【讨论】:

        【解决方案7】:

        “安装失败”或“应用未安装”消息的原因可能会有所不同,仅仅是因为这是您在安装应用时可能遇到的唯一错误。 我同意这没有帮助。

        但是,在大多数情况下,这是由于签名问题。 以下是一些解决方案:

        1. 确保您为 Firebase 分发使用了发布签名的 APK。 https://developer.android.com/studio/build/build-variants#signing

        1. 当您生成签名的 APK 时,您可以选择 V1 或 V2 签名。尝试使用 V1 签名。 V2 签名是 Android 7.0 中引入的一项功能: https://developer.android.com/about/versions/nougat/android-7.0#apk_signature_v2

        2. 通过检查文件中的值app/build.gradle,确保您的应用已正确签名:

          android {
             ...
             defaultConfig {...}
             signingConfigs {
                 release {
                     storeFile file("myreleasekey.keystore")
                     storePassword "password"
                     keyAlias "MyReleaseKey"
                     keyPassword "password"
                 }
             }
             buildTypes {
                 release {
                     ...
                     signingConfig signingConfigs.release
                 }
             }
          

          }

        最后但并非最不重要的一点是,确保您的手机有足够的存储空间来安装该应用,并在设置中选中“从未知来源安装”选项.

        【讨论】:

        • 很好的答案,详细说明了可能的原因
        【解决方案8】:

        出现这种情况的原因是您生成的 APK 可能不兼容所有移动 CPU 架构。 CPU 架构是指某些 APK 仅与 ARM 或 x86 Android 设备兼容。因此,&lt;project_dircectory&gt;/android/app/build.gradle 内的应用级 gradle 文件中有一个名为 universalApk 的标签,必须将其设置为 true,这样当您从 android studio 或 CLI 生成 APK 时,它会为您生成通用 APK,兼容所有 CPU 架构,因此可以兼容多个 Android 设备,无论 Android 设备支持哪种 CPU 架构。

        参数universalApk 可以在前面提到的build.gradle 文件的splits JSON 对象中找到,如下所示:

        splits {
                abi {
                    reset()
                    enable enableSePerCPUArchitecture
                    universalApk true  // If true, also generate a universal APK
                    include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
                }
            }

        您还可以自定义,正如您在同一个 JSON 对象中看到的那样,您希望包含的不同 CPU 架构在生成 APK 时单独支持。在这种情况下,我包括了:“armeabi-v7a”、“x86”、“arm64-v8a”、“x86_64”,这意味着当我进行 APK 生成过程时,将为这些 CPU 架构中的每一个生成一个单独的 APK (有用的是您只想支持特定的 android 设备并减小 APK 的大小)。

        显然,使用通用 APK 的一个缺点是,apk 的大小将大大大于单个架构 APK,这仅仅是因为我们要容纳多个 Android 设备。

        总之,这是我找到的解决方案,因为最初我只上传了 x86 APK,由于它不兼容 x86,因此在我的 Android 设备上产生了同样的错误。我通过 Android Studio 生成了一个通用版本的 APK,并邀请自己使用 Firebase App Distribution 在我的 Android 设备上测试该应用程序,它运行顺利!

        【讨论】:

          【解决方案9】:

          就我而言,当我执行./gradlew appDistributionUploadDebug 时,它只是抓取了它找到的任何 APK 文件并上传了它。换句话说,它只是上传了恰好存在的应用程序的一部分,这比它本来应该的要小得多。

          ./gradlew assembleDebug; ./gradlew appDistributionUploadDebug 解决了这个问题。

          【讨论】:

            【解决方案10】:

            我遇到了这个问题。这可能是由于手机内部存储空间不足。 我尝试释放一些空间,然后安装该应用程序。这对我有用。

            【讨论】:

              猜你喜欢
              • 2019-12-26
              • 1970-01-01
              • 2014-12-19
              • 2014-01-11
              • 2018-03-10
              • 1970-01-01
              • 2014-08-15
              • 1970-01-01
              相关资源
              最近更新 更多