gpt4 book ai didi

android - Google Play -505 安装错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:09 25 4
gpt4 key购买 nike

我在 Google Play 中有一个应用程序,它是使用工具和 API 22 构建的。一切运行良好,但最后一次使用 API 23(工具 23.1)更新显示用户遇到编号为“-505”的 Android 6.0 错误(在 Google Play 中)应用程序或通知中)。但是......它真的是随机的......我知道有两个相同的设备 - Nexus 5 和 6.0.1 - 一个有 -505,第二个是安装更新没有问题....

经过大量搜索,我发现这个错误意味着重复许可的信息,但是...?

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<!-- GCM -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission
android:name="com.dummy.mobile.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.dummy.mobile.permission.C2D_MESSAGE" />

<android:uses-permission
android:name="android.permission.READ_PHONE_STATE" />
<android:uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<android:uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE" />

有什么想法吗?

最佳答案

对于将 Android Studio 与 Gradle 和外部库一起使用的每个应用开发者来说,答案都很有用。有些受到影响,有些没有,但例如 Google-Play-Services(在当前 8.4.0 版本中,在我的例子中)被涉及,这个库非常流行......

描述:

每个应用必须在Gradle中声明自己的applicationId,以及packageName 在 list 中,但这是 Android Studio 所必需的。 Gradle 强制声明applicationId,但它应该这样做,因为一些库在它们的声明中使用引用${applicationId},因为来自上述 GPS 的示例:

<provider
android:authorities="${applicationId}.google_measurement_service"
...

当您没有声明 applicationId 构建系统时,使用 libs appId 并且在创建 apk 之后,上面的提供者将是:

<provider
android:authorities="com.google.android.gms.measurement.google_measurement_service"
...

并且它将毫无问题地安装在带有 your.lovely.app 的系统中。真正的问题是当另一个、第二个应用 this.app.will.have.minus505 将使用相同的库并且创建时也没有 applicationId。在此应用程序中也有相同的包(在 GPS 示例 com.google.android.gms 中...),这是编号为 -505 的重复错误,原因 authorities field must be unique ... 如果您在您的应用 applicationId 中声明上面的示例将是:

<provider
android:authorities="your.lovely.app.google_measurement_service"
...

这对于 shure 在整个系统中是唯一的,因为它应该是 :) 请注意,引用 ${applicationId} 也可能在其他 must-be-unique-in-whole-system 中声明字段,例如 permissions , 也不能复制。

在我的例子中:Google-Play-Services 和 Google Cloud Messaging lib(我知道 shure v 8.3 和 8.4)。上面的示例第一个 fragment 来自推送消息提供商。我的应用程序在 lib 更新后从 7.x(这个版本没有使用 appId 引用,也许 ${packageName} 代替?)到 8.4(使用 appId ref)开始在设备上安装 -505 崩溃,这已经安装了另一个应用程序(与我的完全无关),它也缺少 applicationId 声明并使用相同的 GPS 库。第一个安装的应用程序使用其“原始”库 applicationId“保留”原始 Google 云消息传递提供商 authority 字段(导致应用程序/开发人员丢失)并且该字段在整个系统中必须是唯一的,所以我的应用程序(安装后)得到 -505...

解决方案:

Here is doc with proper declaration of both packageName and applicationId.在您的应用程序中定义此字段,它永远不会“干扰”另一个应用程序(真正拥有系统中唯一的提供者)。

高级作业:

反编译或只是“猜测”另一个应用程序 Provider(或任何其他应该是独一无二的生物)并在您自己的应用程序中声明它。您可能根本不会使用它,但它可能会锁定此原始应用程序的安装。似乎是锁定竞争对手(例如最大的竞争对手)安装的好方法。没试过,希望这个可能性已经“解决”了……

关于android - Google Play -505 安装错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34947362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com