我正在构建一个使用命令行(没有gradle)的小型虚拟应用程序,只有一个空白活动,没有权限,没有支持库(或任何其他库,Google Play等)但是Android总是提示这些安装期间有两个权限:
我了解在构建过程中包含其他库时如何以及为什么合并权限,但我的应用程序中没有包含任何内容。我从生成的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()
。
任何人都可以了解为何总是要求这些权限或如何防止提示这些权限?
答案 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:
前缀修复了问题,并允许在没有权限提示的情况下安装该应用。