如果生产版本存在,Android 的 Crashlytics Beta 版本将不会安装:'The package conflicts with an existing package by the same name'

Crashlytics Beta build for Android will not install if production build exists: 'The package conflicts with an existing package by the same name'

我们的团队通过 Crashlytics 分发测试版,我们大多数人都在手机上安装了生产版。如果不删除生产应用程序,我们将无法安装测试版。 (两个构建都有不同的 applicationId,如: 产品:com.abc 测试版:com.abc.beta)

我们尝试使用相同的密钥库(作为生产)和不同的密钥库来签署测试版,但它没有改变任何东西。

有没有办法在同一台设备上同时安装测试版和生产版?

这里是来自 Fabric 的迈克。 Apple 限制只允许 Testflight 或移动设备管理器安装具有相同 bundle id 的应用程序,因此如果 bundle id 相同,我们将无法安装从 App Store 安装的版本。例如,您无法在 App Store 生产版本上安装该应用程序的 Beta 生产版本。

经过一段时间的调查,感谢 Fabric 团队的帮助,我找到了问题所在,并找到了解决方法。

使用 adb logcat,我发现了失败的根本错误:

Package attempting to redeclare permission com.abc.permission.C2D_MESSAGE already owned by 

测试版应用似乎正在尝试写入生产版本拥有的同一权限文件。为了避免这种情况,我按如下方式编辑了 AndroidManifest.xml

<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature" />

这样,测试版应用程序就有了自己的写入权限文件夹。

希望这对外面的人有帮助!