经过大量搜索后,我发现这个错误意味着重复许可,但是哪个……?
<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" />
有任何想法吗?
解决方法
描述:
每个应用都必须在Gradle中声明自己的applicationId,并在manifest中声明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 …如果您在您的应用程序applicationId声明上面的示例将是:
<provider android:authorities="your.lovely.app.google_measurement_service" ...
这对于整个系统中的shure来说将是独一无二的,因为它应该是:)注意,引用${applicationId}也可能在其他必须是唯一的系统字段中声明,例如permissions,它可以也不重复.
就我而言:Google-Play-Services和Google Cloud Messaging lib(据我所知,对于vure v 8.3和8.4).上面的示例第一个片段来自推送消息提供者.从7.x更新lib之后我的应用程序(此版本未使用appId参考,可能是${packageName}而不是?)到8.4(使用appId ref)开始在设备上安装了-505,这已经安装了另一个应用程序(不是与我完全相关的)也错过了applicationId声明并使用相同的GPS库.首先安装的应用程序使用其“原始”lib applicationId“保留”原始Google云消息传递提供程序权限字段(导致应用程序/开发人员缺失),并且此字段在整个系统中必须是唯一的,因此我的应用程序(安装后)获得-505. ..
解:
Here is doc with proper declaration of both packageName and applicationId.在您的应用中定义此字段,它永远不会“干扰”另一个应用程序(系统中真正拥有的提供商).
高级作业:
反编译或只是“猜测”其他应用程序提供商(或任何其他应该是独特的生物)并在您自己的应用程序中声明它.您可能根本不使用它,但它可能会锁定此原始应用程序的安装.似乎是锁定竞争对手(例如最大的竞争对手)安装的好方法.没试过,希望这种可能性已经“解决”了……