【问题标题】:Google play APK upload error Duplicate declarations of permissionGoogle play APK 上传错误 权限声明重复
【发布时间】:2017-11-02 02:38:33
【问题描述】:

我尝试上传新的 apk(使用我自己的版本密钥存储签名),但在 google play 开发者控制台中出现以下错误。

重复的许可声明 android.permission.ACCESS_COARSE_LOCATION 与不同 maxSdkVersions。

但是以前我可以正常上传 APK 而没有任何错误,我没有对权限进行任何更改,所以这是一个奇怪的问题,我在谷歌上搜索过,找不到可行的解决方案。这是因为 google play 开发者控制台的新更新吗?

清单权限声明

Gradle 依赖项

compile 'com.google.android:annotations:4.1.1.4'
compile 'com.google.android.gms:play-services-location:9.4.0'
compile "com.google.android.gms:play-services-gcm:9.4.0"
compile 'com.google.android.gms:play-services-places:9.4.0'
compile 'com.google.android.gms:play-services-maps:9.4.0'
compile 'com.google.android.gms:play-services-auth:9.4.0'
compile 'com.google.android.gms:play-services-plus:9.4.0'
compile 'com.google.android.gms:play-services-appindexing:9.4.0'
compile 'com.google.android.gms:play-services-wallet:9.4.0'
compile 'com.google.zxing:core:2.2'
compile('com.facebook.android:facebook-android-sdk:4.17.0') {
    exclude group: 'com.android.support', module: 'support-v4'
    exclude group: 'com.android.support', module: 'appcompat-v7'
}
compile 'com.android.support:recyclerview-v7:24.2.0'
compile('com.twitter.sdk.android:twitter:1.12.0@aar') {
    transitive = true;
    exclude group: 'com.android.support', module: 'appcompat-v7'
    exclude group: 'com.android.support', module: 'support-v4'
}
compile 'com.android.support:appcompat-v7:24.2.0'
compile 'com.android.support:multidex:1.0.1'
compile 'com.android.support:cardview-v7:24.2.0'
compile 'com.android.support:design:24.2.0'

合并清单

【问题讨论】:

  • 您的某些库必须使用您的应用未使用的权限。您是否在您的应用程序manifest.xml 中声明了此权限?
  • 你的maxSdkVersions在这个权限里的值是多少?
  • @MatPag 我没有在清单中声明 maxSdkVersions

标签: android google-play apk


【解决方案1】:

在 Manifest 合并期间,您的项目的依赖项之一可能添加了不明确的权限。

您可以尝试将所有 GMS 库更新到最新版本,看看问题是否消失。他们有很多错误合并权限的问题(see release notes),最后一个在10.0.1版本中解决了

【讨论】:

  • 试过这个如果我添加它会影响应用的位置更新
  • 可以添加应用的依赖吗?
  • @DineshAnuruddha 我已经检查了您更新的问题,显然 GPS 在您的清单中自动添加了一些权限。我建议您使用 Build -> Analyze APK... 功能分析最终的 APK 清单,然后打开合并的清单并查看其中的内容并检查重复的权限
  • 感谢您的帮助,我刚刚检查了请参考更新的问题,它说 我认为这是问题所在, 任何想法
  • 你的 targetSdkVersion 是哪个?您是否实现了运行时权限?
【解决方案2】:

我遇到了同样的问题。可能您正在使用第三方库,声明 ACCESS_COARSE_LOCATION 的 api 级别等于或大于 23。为了解决此问题,您可以在清单中拆分权限。只需将此行替换为您现有的使用权限行:

<uses-permission
  android:name="android.permission.ACCESS_COARSE_LOCATION"
  android:maxSdkVersion="22"/>

警告:请注意,如果第三方库更改/删除此权限,您的应用将无法在 api 级别 23 及更高级别运行。所以你应该在上传之前检查你的 apk 以确保它工作正常

【讨论】:

  • 有道理,让我试试