我正在将Firebase app distribution service用于Android平台。对于自动分发,我已经按照the docs中提到的步骤设置了Gradle文件。设置和身份验证成功。分发也成功。但是,一旦我使用Firebase的Android应用测试器应用下载了该应用,就会导致应用未安装错误。这同时适用于:调试和发行版本。
我在禁用Google Play保护后尝试安装该应用,但问题仍然存在。有人可以帮我吗?
答案 0 :(得分:7)
我和一个客户碰到了这个问题,结果发现她需要删除手机上的应用程序版本才能正常使用。 (这是以前安装的非Firebase版本)
答案 1 :(得分:4)
出现消息“安装失败”或“未安装应用程序”的原因可能有所不同,这仅仅是因为这是您在安装应用程序时遇到的唯一错误。 我同意这没有帮助。
但是,在大多数情况下,这是由于签名问题引起的。 以下是一些解决方案:
生成签名的APK时,可以选择V1或V2签名。尝试使用V1签名。 V2签名是Android 7.0中引入的功能: https://developer.android.com/about/versions/nougat/android-7.0#apk_signature_v2
通过检查文件 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)
尝试了所有其他解决方案后,事实证明,我的问题是没有足够的可用存储空间-软件包安装程序在这种情况下也给出了通用的“安装失败”信息。希望这可以节省我浪费的时间。