2015-02-10 101 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開發人員網站中的。

相關問題