gpt4 book ai didi

Android list 重复权限

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:41:49 26 4
gpt4 key购买 nike

我们有一个由第三方库 (altbeacon)、本地构建的 Android 库和应用程序组件组成的应用程序。所有三个组件都有一个 AndroidManifest.xml,它们在构建期间合并。该应用程序是使用 gradle 构建的。

此应用早已在 Google Play 商店中发布。在上一次迭代中,我们从 API 级别 22 升级到 25。所有构建都没有错误,APK 在真实设备上安装和测试没有错误,但是当我们在 Google Play 上更新应用程序时,APK 上传失败并显示错误:

Upload failed
Duplicate declarations of permission android.permission.ACCESS_COARSE_LOCATION with different maxSdkVersions.

分析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 在 build.gradle 中设置为 25,AndroidManifest.xml 包含:

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

在应用程序模块中,targetSdkVersion 在 build.gradle 中设置为 25。

app模块中生成的AndroidManifest.xml包含:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" />

为了确认,查看 APK 本身并提取二进制 list :

~/.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")

所以有一个重复的标签,我认为 list 合并应该已经认识到这一点并将其从 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 库中的权限,或者将来删除它,我们的应用程序中将缺少 ACCESS_COARSE_PERMISSION。

关于如何正确解决这个问题有什么建议吗?

最佳答案

在您的应用程序 list 文件中添加以下合并规则。

<uses-permission-sdk-23
tools:node="removeAll" />

确保您已经添加了位置权限。

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

关于Android list 重复权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44298951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com