我在Google Play中有一个应用程序,该应用程序是使用工具和API构建的。一切运行良好,但最后一次更新API 23(工具23.1)显示Android 6.0错误的用户编号为“-505”(在Google Play中)应用程序或通知)。但它真的随机......我知道两个相同的设备 - 带有6.0.1的Nexus 5 - 一个有-505,第二个是没有问题安装更新....
经过大量搜索,我发现这个错误意味着重复许可,但是哪个......?
convert -respect-parentheses image.jpg \
\( +clone -evaluate set 0 -fill white \
-draw "polygon 400,50 450,150 200,220" \
-format "Factor:%[fx:1/mean]\n" -write info: \
\) -compose multiply -composite -verbose info: \
| grep -E "Factor:|Red:|Green:|Blue:|mean:"
Factor:21.4019
Red:
mean: 6.70078 (0.0262776)
Green:
mean: 5.31762 (0.0208534)
Blue:
mean: 4.40595 (0.0172782)
# Check the Red value - original method gave srgb(145,114,94)
echo "6.70078*21.4019"|bc
143.40942
# Check the Green value
echo "5.317*21.4019"|bc
113.7939
# Check the Blue value
echo "4.40595*21.4019"|bc
94.29570
任何想法?
答案 0 :(得分:11)
对每个使用带有Gradle和外部库的Android Studio的应用开发者都有用。有些是受影响的,有些则没有,但是例如 Google-Play-Services (在我的情况下,在当前的8.4.0版本中)被调用,这个lib很受欢迎......
说明强>
每个应用都在Gradle中声明自己的 applicationId
,并在清单中声明 packageName
,但这是Android Studio所必需的。 Gradle 不强制声明applicationId
,但它应该,因为一些lib在其声明中使用引用${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 ...如果您在您的应用程序中声明{{1上面的示例将是:
applicationId
这对于整个系统中的shure来说是独一无二的,因为它应该是:)请注意,引用<provider
android:authorities="your.lovely.app.google_measurement_service"
...
也可能在其他必须是唯一的整个系统字段中声明,例如permissions,也不能复制。
就我而言:Google-Play-Services和Google Cloud Messaging lib(据我所知,对于vure v 8.3和8.4)。上面的示例第一个片段来自推送消息提供者。从7.x更新lib之后我的应用程序(这个版本没有使用appId参考,可能是${applicationId}
而不是?)到8.4(使用appId ref)开始在设备上安装了-505,这已经安装了另一个应用程序(与我完全没有关系)也错过${packageName}
声明并使用相同的GPS库。首次安装的应用程序使用其“原始”库applicationId
“保留”原始Google云消息传递提供程序authority
字段(导致应用程序/开发人员缺失),此字段在整个系统中必须是唯一的,因此我的应用程序(如安装完毕后得到-505 ......
<强>解决方案:强>
Here is doc with proper declaration of both packageName and applicationId.在您的应用中定义此字段,它永远不会“干扰”另一个应用(系统中真正拥有的提供商)。
高级作业
反编译或只是“猜测”其他应用applicationId
(或任何其他应该是唯一的生物)并在您自己的应用中声明它。您可能根本不使用它,但它可能会锁定此原始应用程序的安装。似乎是锁定竞争对手安装的好方法(例如最大的竞争对手)。没试过,希望这种可能性已经“解决”了......