我编译的任何 Android 应用程序都需要一些权限,即使是 Hello World 应用程序
Any Android app I compile asks for some permissions, even for a Hello World app
在创建仅将 Hello World 放入 TextView 元素的 Hello World 应用程序时,该应用程序会请求权限 "Read phone status and identity" 和 "Modify and delete SD card contents"。我在任何地方都找不到(甚至在整个项目文件夹中递归搜索)对这两个权限的任何引用。
人们抱怨他们的应用程序请求随机权限的各种线程,结果是库依赖项使用它。我不使用任何库。我的导入是 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
(或我在创建项目命令中指定的目标)。
在AndroidManifest.xml
中你必须有这样一行:
<uses-sdk android:minSdkVersion="19"/>
没有 minSdkVersion
,它将默认为版本 1。此行位于 <manifest ...>
下方,因此 在 <application>
之外 标签。
对于这些特定权限,需要 API 级别 4 才能摆脱它们。使用 minSdkVersion 3 时,它仍然要求权限。
在创建仅将 Hello World 放入 TextView 元素的 Hello World 应用程序时,该应用程序会请求权限 "Read phone status and identity" 和 "Modify and delete SD card contents"。我在任何地方都找不到(甚至在整个项目文件夹中递归搜索)对这两个权限的任何引用。
人们抱怨他们的应用程序请求随机权限的各种线程,结果是库依赖项使用它。我不使用任何库。我的导入是 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
(或我在创建项目命令中指定的目标)。
在AndroidManifest.xml
中你必须有这样一行:
<uses-sdk android:minSdkVersion="19"/>
没有 minSdkVersion
,它将默认为版本 1。此行位于 <manifest ...>
下方,因此 在 <application>
之外 标签。
对于这些特定权限,需要 API 级别 4 才能摆脱它们。使用 minSdkVersion 3 时,它仍然要求权限。