2015-02-10 68 views
2

我正在编译一个没有明确请求READ_PHONE_STATE权限的项目,但是当我编译时,我在我编译的Android Manifest文件中看到了权限。我假设一些被引入的库正在明确地添加它,或者忘记设置它的最小SDK版本(这会增加它)。找出谁将READ_PHONE_STATE添加到我的清单文件?

我上得去的唯一的事情是,在最后的清单,权限我要求我自己是这样的:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="com.android.vending.BILLING" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

而且READ_PHONE_STATE看起来是这样的:

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

不android的前缀是什么意思?

有什么方法可以缩小哪个库添加此权限?

+0

你声明了什么权限 – tyczj 2015-02-10 18:10:22

+0

@tyczj - 编辑我的问题以包含它们。我所要求的权限在版本之间并没有改变,所以我相信这是一个将它们拉进来的库。 – Mark 2015-02-10 18:12:04

回答

3

我想看看:

Android Library Manifest vs. App Manifest

这是不是一个真正的重复,所以我不会标志,但是我觉得他涵盖了主题相当好他的问题的答案。

之后,并假设你不能弄清楚,我将做到以下几点:

找到您的gradle这个缓存

敲开每个依赖关系的工件(重命名为.zip和提取是,如果他们有清单包括,看看什么在做这个)

检查,

+1

谢谢Nathaniel。在我们的项目中引入了所有Android Manifest文件后,查看了它们,并找到了未指定最低SDK版本的违规库。干杯! – Mark 2015-02-10 18:52:55

+0

我的荣幸,很高兴你对它进行了排序。 – 2015-02-10 19:57:54

0

您可以准确地看到,如果一个(或者是因为)库中增加了一些额外的权限您的清单最简单的方法。在构建过程中检查生成的文件(见下文),并在文件中查找不需要的权限!

转到您的项目文件夹,并寻找这个路径:

[ProjectFolder] /编译/输出/日志/清单合并--- REPORT.TXT

打开该文件,搜索许可 在我的情况,我发现这些线路在

uses-permission#android.permission.READ_PHONE_STATE IMPLIED from 
C:\..\...\AppFolder\src\..\AndroidManifest.xml:2:1-14:12 reason: 
com.some.evil.library has a targetSdkVersion < 4 

此生成的文件显示合并过程的输出描述Android开发人员网站中的。