我正在使用适用于 Android 平台的Firebase 应用分发服务。对于自动分发,我根据文档中提到的步骤设置了 Gradle文件。设置和验证成功。分发也很成功。但是,一旦我使用适用于 Android 的 Firebase 的 App Tester 应用程序下载该应用程序,就会导致应用程序未安装错误。这适用于两者:调试和发布变体。
我在禁用 Google Play Protect 后尝试安装该应用程序,但问题仍然存在。有人可以帮我解决这个问题吗?
我正在使用适用于 Android 平台的Firebase 应用分发服务。对于自动分发,我根据文档中提到的步骤设置了 Gradle文件。设置和验证成功。分发也很成功。但是,一旦我使用适用于 Android 的 Firebase 的 App Tester 应用程序下载该应用程序,就会导致应用程序未安装错误。这适用于两者:调试和发布变体。
我在禁用 Google Play Protect 后尝试安装该应用程序,但问题仍然存在。有人可以帮我解决这个问题吗?
我与一位客户遇到了这个问题,结果她需要删除她手机上的应用程序版本才能使其正常工作。(这是以前安装的非 Firebase 版本)
消息“安装失败”或“未安装应用程序”的原因可能会有所不同,仅仅是因为这是您在安装应用程序时可能遇到的唯一错误。我同意这没有帮助。
但是,在大多数情况下,这是由于签名问题。以下是一些解决方案:
当您生成签名的 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
}
}
}
最后但并非最不重要的一点是,确保您的手机有足够的存储空间来安装该应用程序,并在设置中选中“从未知来源安装”选项。
我遇到过同样的问题。所以我检查了日志,在安装失败时发现了这个:
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。它可能已损坏或只是错误的。我建议再执行一次这些步骤,并确保构建正确的步骤并上传。
这是一个随机错误(显然)。
对我有用的是手动删除模块build
内的文件夹app
(只是清理项目不会删除所有编译的代码),再次构建 APK,在 FAD 上重新上传,然后 APK 安装成功。
发生这种情况的原因是您生成的 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 对象中看到的那样,您还可以自定义要包含的不同 CPU 架构,以便在生成 APK 时单独支持。在这种情况下,我包括了:“armeabi-v7a”、“x86”、“arm64-v8a”、“x86_64”,这意味着当我进行 APK 生成过程时,将为每个 CPU 架构生成一个单独的 APK (有用的是您只想支持特定的 android 设备并减小 APK 的大小)。
显然,使用通用 APK 的一个缺点是 apk 的大小将大大大于单个架构 APK,这仅仅是因为我们要容纳多个 Android 设备。
总而言之,这是我找到的解决方案,因为最初我只上传了 x86 APK,它在我的 Android 设备上产生了同样的错误,因为它不兼容 x86。一旦我通过 Android Studio 生成了一个通用版本的 APK,并邀请自己使用 Firebase App Distribution 在我的 Android 设备上测试该应用程序,它就运行得很顺利!
确保signingConfigs
为每个变体提供一个。
将以下代码添加到您的应用的build.gradle
标签中: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
:
signingConfig signingConfigs.config
希望这可以帮助。
在尝试了所有其他解决方案之后,结果发现我的问题是没有足够的可用存储空间——在这种情况下,包安装程序也给出了一个通用的“安装失败”。希望这可以节省其他人我浪费的时间。
我遇到了这个问题。这可能是由于手机内部存储空间不足。我尝试释放一些空间,然后安装该应用程序。这对我有用。
至于我的情况,当我这样做时./gradlew appDistributionUploadDebug
,它只是抓取了它找到的任何 APK 文件并将其上传。换句话说,它只是上传了恰好在那里的应用程序的一部分,这比它本来应该的要小得多。
./gradlew assembleDebug; ./gradlew appDistributionUploadDebug
解决了这个问题。
当我们的应用程序的生产版本在相关设备上可用时,我们遇到了这个错误。
简单地卸载生产应用程序就很有吸引力——然后我们可以安装我们的测试/开发/两个应用程序而没有任何问题。
对我来说,bitrise 在代码签名中遇到了 ANDROID KEYSTORE FILE 的问题。不知何故,缺少密钥库密码、别名和私有上传密钥。
转到工作流-> 代码签名-> android 密钥库文件并重新输入值使其工作