在创建仅将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时,它仍然会要求权限.