gpt4 book ai didi

android - 我编译的任何 Android 应用程序都需要一些权限,即使是 Hello World 应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:00 24 4
gpt4 key购买 nike

当创建仅将 Hello World 放入 TextView 元素的 Hello World 应用时,该应用会请求“读取手机状态和身份”以及“修改和删除 SD 卡内容”的权限。我在任何地方都找不到(甚至在整个项目文件夹中递归搜索)对这两个权限的任何引用。

人们提示他们的应用程序请求随机权限的各种线程,结果是库依赖项使用它。我不使用任何库。我的进口商品是 android.app.Activity , android.widget.TextViewandroid.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 文件:一个是布局(包含 LinearLayoutTextView 元素);另一个是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 时,它仍然要求权限。

关于android - 我编译的任何 Android 应用程序都需要一些权限,即使是 Hello World 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37937046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com