我编译的任何Android应用程序都要求获得一些权限,即使对于Hello World应用程序也是如此

在创建仅将Hello World放入TextView元素的Hello World应用程序时,应用程序会要求权限“读取电话状态和身份”以及“修改和删除SD卡内容”.我无处可寻找(甚至递归遍历整个项目文件夹)对任一权限的任何引用.

有各种各样的线程,人们抱怨他们的应用程序请求随机权限,事实证明库依赖使用它.我不使用任何库.我的导入是android.app.Activity,android.widget.TextView和android.os.Bundle.我的AndroidManifest.xml包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="helloworld.test"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:label="@string/app_name">
        <activity android:name="helloactivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

注意没有< uses-permission …. libs文件夹是空的; res文件夹包含两个文件夹,每个文件夹都有一个xml文件:一个是布局(包含LinearLayout和TextView元素);另一个是带有应用程序名称的values / strings.xml. 最后,我还检查了.apk文件并解码了二进制AndroidManifest.xml文件(它被编译为一些自定义二进制格式),它与原始文件相同.它在编译期间也不会添加任何内容. 在我可以测试的所有设备上请求权限:两个Android 4.4设备和一个5.1设备. 编辑:环顾四周,听起来像这样:Why is my app asking for phone id permission?

我的目标是API级别19. ~~这可能是什么?~~编辑2:没关系,编译级别23没有区别/编辑2.我真的很讨厌应用程序询问他们不应该拥有的权限(着名的手电筒应用程序)例如),但我当然希望它也可以在旧款手机上运行.

在回应评论时,该项目不使用gradle而是使用ant.这是build.xml文件,删除了任何注释:

<?xml version="1.0" encoding="UTF-8"?>
    <project name="helloworld" default="help">
    <property file="local.properties" />
    <property file="ant.properties" />
    <property environment="env" />
    <condition property="sdk.dir" value="${env.ANDROID_HOME}">
        <isset property="env.ANDROID_HOME" />
    </condition>
    <loadproperties srcFile="project.properties" />
    <fail message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable." unless="sdk.dir" />
    <import file="custom_rules.xml" optional="true" />
    <import file="${sdk.dir}/tools/ant/build.xml" />
</project>

最后是java代码:

package helloworld.test;

import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;

public class skeletonactivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView out = (TextView) findViewById(R.id.output);
        out.setText("Hello World.");
    }
}

最佳答案 事实证明这是最重要的sdk版本,它甚至不是android create project生成的属性.它生成了一个project.properties文件,其中包含target = android-19(或我在create project命令中指定的任何目标).

在AndroidManifest.xml中,您必须有这样一行:

    <uses-sdk android:minSdkVersion="19"/>

如果没有minSdkVersion,它将默认默认为版本1.此行位于< manifest …>下,因此在< application>之外标签.

对于这些特定权限,需要API级别4才能删除它们.使用minSdkVersion 3时,它仍然会要求权限.

点赞