为什么我的应用程序要求电话号码的权限?

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

<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. 

从我从这个SO回答收集,我应该需要使用TelephonyManager和调用

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

要求此许可。 但是我没有使用TelephonyManager或调用该权限。 我不想让用户给这个权限。 我查看了我的manifest和gradle文件。 难道是我用一些代码触发了这个权限被调用没有我特意要求吗? 我知道我不会给你太多的东西,因为我不知道还有什么要看的。

更新1

我在Android Studio中创build了一个全新的项目,并从中生成了一个已签名的APK。 我安装了它,但没有要求权限。 (至less证实这不是Android Studio中的一些“新function”,会自动获得此权限。)

更新2

至于@ antonio的答案,我发现app/build/outputs/logs/manifest-merger-release-report.txt但是,我没有发现任何隐含的权限被要求。

更新3

这里是我的应用程序正在使用(从gradle.build)的依赖关系:

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

我testing了一个新的应用程序与这两个依赖关系,并没有要求权限。

我的下一步是从头再次添加每个活动,看看我是否可以find这个权限开始被调用的地方。 未完待续…

更新4

我玩弄了一切,把所有东西都复制到一个新的项目中,然后重构项目名称和删除项目,但事实certificate这是相当复杂的。 我无法隔离一个原因。

更新5

我将targetSdkVersion设置为1.这在安装应用程序之前声明权限时会给出一个新消息:

阅读手机状态和身份

允许应用访问设备的电话function。 此权限允许应用程序确定电话号码和设备ID,通话是否处于活动状态,以及通过呼叫连接的远程号码。

我一开始写的旧电话ID权限通知仍然存在(应用程序安装后显示)。 这让我怀疑它是否与操作系统有关(我正在小米手机上使用MIUI Android)。 还有一些关于应用程序,导致这个应用程序中显示,而不是在其他应用程序。 我需要接下来在其他设备上进行testing。

Solutions Collecting From Web of "为什么我的应用程序要求电话号码的权限?"

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

从清单合并文档 :

导入targetSdkVersion低于导入应用程序targetSdkVersion的库时, 可能会自动将一些权限添加到生成的合并清单文件中。 这是必要的,因为这样的库定位在隐式授予这种权限的运行时。 因此宣布这种许可是没有必要的。 但是,在更新的Android版本中,这些权限不会自动授予。 因此,一个针对这种旧版运行时而没有权限的库在针对更新运行时的应用程序中合并后将无法正常工作。

可以添加的权限是:

  • WRITE_EXTERNAL_STORAGE导入具有targetSdkVersion <4的库时添加
  • READ_EXTERNAL_STORAGE导入声明WRITE_EXTERNAL_STORAGE的库时添加
  • READ_PHONE_STATE导入具有targetSdkVersion <4的库时添加
  • READ_CALL_LOG在导入具有targetSdkVersion <16并使用READ_CONTACTS权限的库时添加
  • WRITE_CALL_LOG在导入具有targetSdkVersion <16并使用WRITE_CONTACTS权限的库时添加

您可以检查Manifest Merger(在\ app \ build \ outputs \ apk \ 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 

将以下代码添加到您的AndroidManifest.xml以删除不必要的权限:

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

资源:

https://stackoverflow.com/a/27542669/406295