使用Firebase应用程序分发服务会导致应用程序未安装错误

时间:2019-09-27 06:05:25

标签: android firebase firebase-app-distribution

我正在将Firebase app distribution service用于Android平台。对于自动分发,我已经按照the docs中提到的步骤设置了Gradle文件。设置和身份验证成功。分发也成功。但是,一旦我使用Firebase的Android应用测试器应用下载了该应用,就会导致应用未安装错误。这同时适用于:调试和发行版本。

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

enter image description here

enter image description here

enter image description here

enter image description here

10 个答案:

答案 0 :(得分:7)

我和一个客户碰到了这个问题,结果发现她需要删除手机上的应用程序版本才能正常使用。 (这是以前安装的非Firebase版本)

答案 1 :(得分:4)

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

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

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

enter image description here

  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
           }
       }
    

    }

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

答案 2 :(得分: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,并在完成后将该文件上传到Firebase。我不确定我是第一次真正完成构建过程,还是直接从构建文件夹中获取了apk。它可能已损坏或只是错误的一个。我建议只再执行一次该步骤,并确保构建正确的步骤并上传。

答案 3 :(得分:1)

确保为每个变体提供signingConfigs

将以下代码添加到您应用的build.gradle的{​​{1}}标记中:

android

最后,将以下行添加到应用程序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

希望这会有所帮助。

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

发生这种情况的原因是,您生成的APK可能与所有移动CPU架构都不兼容。通过CPU架构,我的意思是某些APK仅与ARM或x86 Android设备兼容。因此,<project_dircectory>/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对象中看到的)自定义要生成APK时支持的不同CPU体系结构。在这种情况下,我包括:“ 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设备上测试该应用程序,它就可以正常运行!

答案 6 :(得分:1)

就我的情况而言,当我做./gradlew appDistributionUploadDebug时,它只是抓住了找到的任何APK文件并上传了。换句话说,它只是上传了应用程序的一部分,而该部分恰好在那里。

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

答案 7 :(得分:1)

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

答案 8 :(得分:0)

在有问题的设备上提供应用程序的生产版本时,我们遇到了此错误。

只需卸载生产应用程序就可以了,我们可以轻松地安装测试/开发/两个应用程序。

答案 9 :(得分:0)

尝试了所有其他解决方案后,事实证明,我的问题是没有足够的可用存储空间-软件包安装程序在这种情况下也给出了通用的“安装失败”信息。希望这可以节省我浪费的时间。