我们有一个应用程序,包括第三方库(altbeacon),本地构建的Android库和应用程序组件.所有三个组件都有一个AndroidManifest.xml,它们在构建期间合并.该应用程序使用gradle构建.
该应用程序已在Google Play商店中发布.在最后一次迭代中,我们从API级别22升级到25.一切都没有错误构建,APK安装在真实设备上并且在没有错误的情况下进行测试,但是当我们在Google Play上更新应用程序时,APK的上传失败了错误:
上传失败
具有不同maxSdkVersions的权限android.permission.ACCESS_COARSE_LOCATION的重复声明.
分析我们发现的AndroidManaifest.xml org.altbeacon.beacon具有以下权限:
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="23" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)
我们的本地Android库模块targetSdkVersion在build.gradle中设置为25,AndroidManifest.xml包含:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)
在app模块中,build.dkVersion在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" />
Run Code Online (Sandbox Code Playgroud)
并且只是为了确认,查看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")
Run Code Online (Sandbox Code Playgroud)
所以有一个重复的标签,我认为清单合并应该已经识别出并从altbeacon库中删除了一个.我的问题是如何从altbeacon库中删除权限?
我已在appMan模块AndroidManifest.xml中尝试了以下内容:
<uses-permission-sdk-23
android:name="android.permission.ACCESS_COARSE_LOCATION"
tools:node="remove"
tools:selector="org.altbeacon.beacon"/>
Run Code Online (Sandbox Code Playgroud)
这导致:
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
Run Code Online (Sandbox Code Playgroud)
和
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"
tools:node="remove"
tools:selector="org.altbeacon.beacon"/>
Run Code Online (Sandbox Code Playgroud)
这导致: …