2013-08-21 75 views
37

如果我想研究在Android應用程序中如何使用[Mainfest.xml中的請求]的權限以及如何刪除它們,是否有一種簡單的方法可以執行此操作? lint或findbugs是否爲跟蹤項目中使用/濫用的權限提供某種支持?清理未使用的Android權限

+2

不是一個簡單的直接方式,我不認爲。有關此主題的[關於Google網上論壇](https://groups.google.com/forum/#!topic/android-developers/YVT33Vn7qFg)的討論和潛在解決方案,但鏈接的網站似乎已關閉。 –

+1

[安全堆棧交換](http://security.stackexchange.com/questions/41887/static-analysis-of-android-applications-using-androguard)上的當前答案表示apkinspector可以檢測到權限的使用。 – HairyFotr

+0

看到這個SO問題以及http://groups.google.com/tutorials/8257412/remove-extra-unwanted-permissions-from-manifest-android – Adrian

回答

-1
+0

我可以從那裏開始,但該列表無法幫助我確定如何在應用程序中查找所有不同權限的使用情況。例如,如果我聲明「WRITE_SETTINGS」權限,那麼它適用於哪個API?如何搜索我的代碼以使用此類權限? – Cliff

+0

您會在每個右上角的標題中注意到「在API級別1中添加」http://developer.android.com/reference/android/Manifest.permission.html#WRITE_SETTINGS – eshbeata

+0

您將很難確定每個類需要一個權限,但是例如在每個需求類中,你會發現一個註釋,這需要ex的權限:http://developer.android.com/reference/android/hardware/Camera.html – eshbeata

0

的方式使用,我會做它爲我沒有寫代碼將是一個刪除權限一個應用程序並且每次都要端對端測試應用程序。當它失敗時,縮小它的範圍。如果不是,則不能使用該權限。

+6

對於擁有15個以上權限的大型應用程序,這可能需要幾天的時間 – NikkyD

+0

我知道,但我沒有看到更好的解決方案如果您有自動化測試,則可能需要更少的時間。如果你不這樣做,那麼無論如何,如果你要繼續開發這些代碼,那麼可能值得你花時間編寫測試。 –

+0

如果它的標準權限您可能還需要搜索幾個需要它的方法的代碼(根據developer.android.com搜索) – NikkyD

0

你將不得不嘗試逐個刪除它們,並檢查我的應用程序仍然工作正常。這不是由lint以任何方式檢查(它應該是)。

當他們回來(目前是下跌),您可以將您的APK上傳到這個網站(如果這是確定你),讓他們進行靜態分析您所使用的權限:http://www.android-permissions.org/

0

最好的辦法是瞭解可能實際做了什麼。如果它將要使用相機,那麼你知道你需要相機許可。

-1

或者您可以瞭解您的應用的功能,然後查看權限並查看哪些是額外的。你的應用做了什麼,它使用了哪些電話功能。應該有一些文件的地方應該做什麼,並在那裏有什麼方法

+0

您認爲OP是首先將權限放在那裏的作者,而不是某些錯誤代碼的繼承者。 – tir38

4

我來自未來,以挽救你的生命。

在這裏(未來),LINT會檢查丟失的權限,您可以在LINT checks上看到。

  • 所以,去你AndroidManifest.xml並使用Android權限(意思是,不要刪除屬於您的應用程序的權限,如UA_DATAC2D_MESSAGE)去除所有標籤<uses-permission>
  • 然後運行LINT分析。點擊Analyze然後Inspect Code...
  • 看下Android -> Constant and Resource Type Mismatches
  • 你應該看到所有缺少的權限。
  • 然後您可以右鍵單擊它們並選擇Apply fix "Add Permission"。如果您選擇此選項,Android Studio將包含每個錯誤的一個權限。因此,您最終將在Manifest文件中獲得相同權限的多個副本,只需刪除重複項即可。你也可以手動完成。

下面是LINT規則的描述:

ID的ResourceType

說明

這次檢查看已經標註了各種支持註解Android的API調用(例如RequiresPermission或UiThread),並標記任何未按註釋指定的API正確使用的調用。此檢查標記的錯誤示例:

  • 將錯誤類型的資源整數(例如R.string)傳遞給期望不同類型的API(例如R.dimen)。
  • 忘記調用重寫方法(通過超級)在需要它的
  • 調用,需要一個許可,而不必聲明在清單
  • 該權限傳遞一個資源顏色參照的方法的方法方法期望一個RGB整數值。

...還有更多。欲瞭解更多信息,請參閱文檔在http://developer.android.com/tools/debugging/annotations.html


我使用的Android 2.1.2工作室。

+1

的確我確信林特會檢查權限。它不在Lint的基本檢查中執行,但可以通過在Lint的設置中包含更多檢查來輕鬆完成。 –

0

在你的應用清單文件中,你應該有一個標籤「合併清單」在那裏你可以看到你的最終清單和你請求的權限,你可以點擊權限來查看它來自哪裏。 (誰補充它 - 恩「:SDK或什麼樣的代碼它來自)

還有一種簡單的方法,通過增加體現刪除權限:

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

還記得在添加工具頂部:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    package="..."> 
+0

以下鏈接更多解釋:[link](https://developer.android.com/studio/build/manifest-merge.html#inspect_the_merged_manifest_and_find_conflicts) – beee