首页 > 解决方案 > 从 AndroidManifest.xml 中删除重复权限

问题描述

包含这些AndroidManifest.xml(以及更多)权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_PROFILE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

WRITE_EXTERNAL_STORAGE包含两次。所以我删除了一个并重新排序:

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

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

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_PROFILE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

录音机(https://github.com/3llomi/RecordView)通常会请求存储访问权限和麦克风访问权限。但是在更改之后它不再请求存储访问,因此记录视图不起作用。

对于每个清单更改,我都会从设备上卸载应用程序以重置权限。删除重复行怎么可能导致这种情况?

标签: androidandroid-manifest

解决方案


合并后的视图AndroidManifest.xml显示另一个库也声明了此权限maxSdkVersion="18"

在此处输入图像描述

该应用程序在 API>18 上运行,因此我假设它没有请求许可。删除maxSdkVersion使存储权限再次出现并且记录器视图工作:

<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    tools:remove="android:maxSdkVersion" />

我的猜测是,因为WRITE_EXTERNAL_STORAGE在 中包含了两次AndroidManifest.xml,所以清单合并过程将maxSdkVersion唯一添加到其中之一。另一个WRITE_EXTERNAL_STORAGE没有maxSdkVersion,因此该应用程序也在 API>18 上请求许可。


推荐阅读