我们有一个由第三方库(altbeacon),本地构建的Android库和应用程序组件组成的应用程序。所有这三个组件都有一个AndroidManifest.xml,它们在构建期间被合并。该应用程序使用gradle构建。Android Manifest重复权限
该应用长期以来一直在Google Play商店上发布。在最后一次迭代中,我们将API级别从22级升级到了25级。所有内容都没有错误地构建,APK安装并在真实设备上测试,没有错误,但是当我们在Google Play上更新应用时,APK上传失败错误:
Upload failed
Duplicate declarations of permission android.permission.ACCESS_COARSE_LOCATION with different maxSdkVersions.
Anaylyzing的AndroidManaifest.xml我们发现org.altbeacon.beacon具有以下权限:
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="23" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" />
我们当地的Android库模块targetSdkVersion设置为25的build.gradle和AndroidManifest.xml包含:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
在app模块中,targetSdkVersion在build.gradle中设置为25。
应用模块中的产生的AndroidManifest.xml包含:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" />
,只是确认,看在APK本身并提取二进制文件清单:
~/.android-sdk/build-tools/25.0.3/aapt l -a app-release.apk | grep -B1 COARSE
E: uses-permission (line=62)
A: android:name(0x01010003)="android.permission.ACCESS_COARSE_LOCATION" (Raw: "android.permission.ACCESS_COARSE_LOCATION")
--
E: uses-permission-sdk-23 (line=76)
A: android:name(0x01010003)="android.permission.ACCESS_COARSE_LOCATION" (Raw: "android.permission.ACCESS_COARSE_LOCATION")
因此,有一个重复标签,我认为明细合并应该已经识别并从altbeacon库中删除了该合并。我的问题是如何从altbeacon库中删除权限?
我试图在应用程序模块的AndroidManifest.xml如下:
<uses-permission-sdk-23
android:name="android.permission.ACCESS_COARSE_LOCATION"
tools:node="remove"
tools:selector="org.altbeacon.beacon"/>
这导致:
AndroidManifest.xml:12:5-15:48 Warning:
uses-permission-sdk-23 was tagged at AndroidManifest.xml:12 to remove other declarations but no other declaration present
和
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"
tools:node="remove"
tools:selector="org.altbeacon.beacon"/>
这导致:
AndroidManifest.xml:12:5-15:48 Warning:
uses-permission was tagged at AndroidManifest.xml:12 to remove other declarations but no other declaration present
下面的工作,但它删除了错误的标记,它删除了我们构建的本地Android库中的一个作为我们的应用程序的一部分。
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"
tools:node="remove"/>
的org.altbeacon.beacon权限留给:
~/.android-sdk/build-tools/25.0.3/aapt l -a app-release.apk | grep -B1 COARSE
E: uses-permission-sdk-23 (line=72)
A: android:name(0x01010003)="android.permission.ACCESS_COARSE_LOCATION" (Raw: "android.permission.ACCESS_COARSE_LOCATION")
因为如果org.altbeacon.beacon库chamge的权限,或者它在未来移除时不能令人满意,该ACCESS_COARSE_PERMISSION将从我们的应用程序中丢失。
有关如何正确解决此问题的任何建议?
我有完全相同的问题。 – green0range
我已经向Google提交了一个缺陷 - https://issuetracker.google.com/issues/62267639 – BitByteDog
够搞笑的是,我们现在正面对与这个完全相同的库完全相同的问题! –