为什么我的应用程序要求手机 ID 权限?

2023-11-27

在我的清单中,我只要求这两个权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

但是当我在手机上安装该应用程序时,我也会收到此通知:

Low-risk permissions
Phone ID
Get your phone ID, including IMEI, IMSI, etc.

从我收集到的信息来看这个答案,我应该需要使用TelephonyManager并打电话

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

需要此许可。但我没有使用 TelephonyManager 或调用该权限。我不想要求用户授予此权限。我查看了我的清单和 gradle 文件。难道是我使用的某些代码在没有我专门请求的情况下触发了此权限的调用?我知道我不会给你太多继续下去的机会,因为我不知道还能去哪里寻找。

Update 1

我在 Android Studio 中创建了一个全新的项目,并从中生成了一个签名的 APK。我安装了它,但没有询问权限。 (这至少对我来说证实了 Android Studio 中没有自动请求此权限的“新功能”。)

Update 2

根据@antonio的回答,我发现app/build/outputs/logs/manifest-merger-release-report.txt但是,我没有发现任何隐含的权限请求。

Update 3

以下是我的应用程序正在使用的依赖项(来自 gradle.build):

dependencies {
    compile 'com.android.support:support-v4:21.0.3'
    compile 'com.readystatesoftware.sqliteasset:sqliteassethelper:+'
}

我测试了一个具有这两个依赖项的新应用程序,并且没有请求任何权限。

我的下一步是从头开始再次添加每个活动,看看是否可以找到开始调用此权限的位置。待续...

Update 4

我尝试将所有内容复制到新项目并重构项目名称并删除部分内容,但事实证明它非常复杂。我无法找出原因。

Update 5

我将 targetSdkVersion 设置为 1。这会在安装应用程序之前宣布权限时给出一条新消息:

读取手机状态和身份

允许应用程序访问设备的电话功能。这 权限允许应用程序确定电话号码和设备 ID、呼叫是否处于活动状态以及通过某个设备连接的远程号码 称呼。

我在开头写的旧电话 ID 权限通知仍然存在(安装应用程序后显示)。这让我想知道这是否与操作系统有关(我在小米手机上使用MIUI Android)。该应用程序仍然存在一些问题,导致该应用程序显示在此应用程序中,但不显示在其他应用程序中。接下来我需要在其他设备上进行测试。


发生这种情况是因为您导入的库的 targetSdkVersion 低于应用程序的 targetSdkVersion

来自清单合并文档:

导入 targetSdkVersion 低于的库时 导入应用程序targetSdkVersion,也许有一些权限 自动添加到生成的合并清单文件中。这是必要的,因为此类库的目标运行时是隐式授予此类权限的。因此,没有必要声明此类许可。但是,在最近的 Android 版本中,不会自动授予这些权限。因此,如果没有权限,针对此类旧运行时的库一旦合并到针对较新运行时的应用程序中,就无法正常工作。

可以添加的权限有:

  • 写外部存储导入 targetSdkVersion
  • 读外部存储在导入声明 WRITE_EXTERNAL_STORAGE 的库时添加
  • READ_PHONE_STATE导入 targetSdkVersion
  • READ_CALL_LOG在导入 targetSdkVersion
  • 写调用日志在导入 targetSdkVersion

您可以检查 Manifest Merger 生成的报告(在 \app\build\outputs\logs\manifest-merger-XXX-report 中)以查看哪个库导致添加 READ_PHONE_STATE 权限。你会看到类似的东西:

android:uses-permission#android.permission.READ_PHONE_STATE
IMPLIED from AndroidManifest.xml:2:1 reason: the.library has a targetSdkVersion < 4

在多模块 gradle 项目中,必须应用匹配的配置,例如 defaultConfig{ ... },其中应指定 targetSdkVersion 来解析这些 IMPLIED 权限。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的应用程序要求手机 ID 权限? 的相关文章

  • android edittext中的字符映射

    我想让我的编辑文本就像我写字符 g 时一样 它是相关的映射自定义字符应该写成印地语中的 我认为应该有字符映射 但没有知识任何人都可以帮助我 怎么做 其他应用程序https play google com store apps details
  • 如何获取每个StorageVolume的可用大小和总大小?

    背景 谷歌 悲伤 计划破坏存储权限 https www xda developers com android q storage access framework scoped storage 这样应用程序将无法使用标准文件 API 和文件
  • Xamarin Android Webview Javascript

    我正在尝试通过 Xamarin for Android 创建一个移动应用程序 它有一个显示网站的 WebView 问题是正常按钮会触发 但 javascript 事件不会触发 我已经启用了 Javascript 但没有运气 如何在 Andr
  • 如何正确释放Android MediaPlayer

    我正在尝试向我的 Android 应用程序添加一个按钮 当点击该按钮时它会播放 MP3 我已经让它工作了 但没有办法释放 mediaPlayer 对象 因此即使在我离开活动后它仍然会继续播放 如果我在react 方法之外初始化MediaPl
  • 将现有 VARCHAR 列与 Room 结合使用

    我正在尝试将现有的数据库与 Android Room 一起使用 但是 我的一个表有一个 VARCHAR 列 Room 似乎只支持 TEXT 不支持 VARCHAR 而且 sqlite 不允许修改列类型 那么 有没有办法使用Room中现有的带
  • Android 初学者:Android gridview 中的触摸事件

    我正在使用以下代码来使用 gridview 执行操作 稍作修改http developer android com resources tutorials views hello gridview html http developer a
  • Android应用程序组件销毁和重新创建的详细信息

    有人可以向我提供一些具体的 值得信赖的 最好是简洁的 信息 内容如下 系统销毁和 如果适用 重新创建组件的顺序 片段 活动 活动的线程 异步任务 计时器 静态数据 类何时卸载 其他类中的线程 异步任务 定时器 主机 TabActivity
  • 自定义首选项中的android首选项水平分隔线?

    我创建了自己的自定义首选项对象来扩展首选项 我创建它们只是因为这些自定义数据类型没有首选项 一切正常 但我的自定义首选项没有相同的外观 因为它们缺少系统首选项对象具有的水平分隔线 我已经查找了创建水平分隔线的代码 但我找不到它是在哪里完成的
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • 如何更改终端的默认目录?

    我想更改 Android Studio v2 2 2 终端的默认目录 当我打开终端时 它基于项目的目录 C 项目路径 我经常需要使用adb shell 所以我必须导航到 SDK 路径 平台工具 才能使用 adb 命令 是否可以更改终端的默认
  • Android Eclipse 上的 Web 服务

    我是 android eclipse java 的新手 事实上这个论坛也是如此 有人遇到过这种情况吗 从用户那里获取输入并通过使用 android eclipse 中的 Web 服务来显示适当的结果 有可用的示例吗 非常感谢 我正在发布教程
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • Dagger 2 没有生成我的组件类

    我正在使用 Dagger 2 创建我的依赖注入 几个小时前它还在工作 但现在不再生成组件 这是我创建组件的地方 public class App extends Application CacheComponent mCacheCompon
  • 卡片视图 单击卡片移至新活动

    我是 Android 编程新手 正在研究卡片布局 我想知道如何使其可点击 android clickable true android foreground android attr selectableItemBackground 我的卡
  • 如何检查 Android 中的同步设置

    我正在构建一个 Android 应用程序 我需要检查设备中注册的每个单独帐户的同步设置 我知道我可以通过 ContentResolver 类来做到这一点 但我遇到了一些问题 我已设法获取设备上所有帐户的列表 但我不知道在运行时从哪里获取特定
  • 通过系统应用程序以编程方式静默安装 apk(无需 root)

    我有带有 android sharedUserId android uid system UID 1000 的系统级应用程序 设备未root INSTALL PACKAGES 权限包含在清单中 我可以静默安装下载的 apk 吗 我已经发现这
  • 问题:为什么React Native Video不能全屏播放视频?

    我正在react native 0 57 7 中为android和ios创建一个应用程序并使用反应本机视频 https github com react native community react native video播放上传到的视频
  • 没有支持 FEATURE_CAMERA_EXTERNAL 的 Android 设备

    根据this doc https source android com devices camera external usb cameras一些 Android 设备允许使用 Camera2 API 访问外部 USB 摄像头 我检查了大约
  • 错误:(23, 13) 无法解决:com.google.android.gms:play-services:11.2.0“安装存储库和同步项目”不起作用

    我正在尝试在我的 Android 应用程序中获取位置并更新到服务器 这是我的 Gradle 代码 我在这里包含了compile com google android gms play services 11 2 0 这条线是从文档中 htt

随机推荐