为什么在安装期间始终请求两个权限?

时间:2016-04-24 17:15:21

标签: android android-permissions

我正在构建一个使用命令行(没有gradle)的小型虚拟应用程序,只有一个空白活动,没有权限,没有支持库(或任何其他库,Google Play等)但是Android总是提示这些安装期间有两个权限:

enter image description here

我了解在构建过程中包含其他库时如何以及为什么合并权限,但我的应用程序中没有包含任何内容。我从生成的APK中提取并解码了已编译的AndroidManifest.xml,并且里面的任何地方都没有<uses-permission>标记。

根据this question,如果没有输入minSdkVersion值,则添加READ_PHONE_STATE,但我在清单中声明了一个(我也可以在编译的清单中看到)。 这是源清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="dummy.testapp"
    versionCode="1">

    <uses-sdk minSdkVersion="20" targetSdkVersion="22" />

    <application
        android:label="TestApp No Perms"
        android:icon="@drawable/ic_launcher">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

单个活动(MainActivity)只在空白布局上调用setContentView()

任何人都可以了解为何总是要求这些权限或如何防止提示这些权限?

1 个答案:

答案 0 :(得分:0)

答案归结为android:minSdkVersion属性上缺少的targetSdkVersion前缀。

没有android:前缀不会导致从资源编译器发出任何警告或错误,但由于缺少前缀,在安装期间解析APK清单时会忽略该值。

最终结果是,Android认为没有minSdkVersion设置,并且如Why does my app has the READ_PHONE_STATE permission although it's not declared in manifest?中所述,会自动提示权限。

添加android:前缀修复了问题,并允许在没有权限提示的情况下安装该应用。