2013-07-05 71 views
1

我有一個應用程序,我創建一個進程並調用dumpsys telephony.registry命令獲取有關移動網絡狀態的信息。android dumpsys權限拒絕

String[] cmds={"dumpsys telephony.registry"}; 
Process p = Runtime.getRuntime().exec(cmds [0]+"\n"); 

然後我解析命令的結果。對於"ls"或其他命令,它工作正常。對於dupmsys我得到Permission Denial: can't dump telephony.registry from pid-953, uid=10090。我得到了dumpsys power或其他dumpsys命令的相同錯誤結果。

我已經在Android清單設置DUMP權限android.permission.DUMP像建議here

我認爲我這樣做的權利,因爲Android提供了此功能here

我也做步驟描述here強制日食允許我在清單中給予我的應用程序DUMP權限。

當我執行命令dumpsys我總是得到相同的結果

Permission Denial: can't dump telephony.registry from pid-953, uid=10090

難道我做錯了什麼?爲什麼android操作系統仍然拒絕我訪問轉儲服務?

PS我已經設置分鐘API 8,我正在測試運行在設備中的應用(ICS) API 15

回答

2

爲什麼Android操作系統仍然拒絕我進入轉儲服務?

因爲該許可爲android:protectionLevel="signature|system|development"(或signatureOrSystem使用舊的語法)在Android 2.3以上版本標記,因此不能用普通的Android SDK應用程序舉行。

+0

我認爲在Android清單的權限是在那裏給開發人員這個選項。是否有辦法讓我做到這一點?或者Android不會讓我無論如何都不會冒險? –

+0

@ malcolmthe4:「我有辦法做到嗎?」 - 根您的設備並將您的應用程序安裝在系統分區上。 – CommonsWare

+0

我曾嘗試在dumpsys commnad之前運行su。我知道它的工作原理,但是這隻限於植根於設備上......沒有其他辦法嗎?我讀過這個https://gist.github.com/vnu/3258553 如何使用平臺密鑰簽署我的應用程序? –

4

還有另一種(哈克)方式訪問dumpsys沒有根植你的設備 - 通過亞行殼

這將需要允許USB調試,並找到adb服務的端口。

  1. 在設備上啓用USB調試。該選項可在Settings - >Developer Options下找到。

  2. 將設備連接到PC,然後從PC的外殼/命令行運行以下命令: adb tcpip 12345。然後,從您的設備shell中,從您的應用程序發出命令adb connect localhost:12345。您現在可以從USB斷開設備。 或者,您可以使用adb connect localhost:<portnum>來掃描設備上沒有USB連接的端口,並查找端口adb服務正在監聽的端口。

  3. 如果出現提示,從彈出的確認對話框授權USB調試。選中「始終」複選框不需要再次執行此步驟。

  4. 現在,當您有權訪問adb服務時,請使用應用程序代碼中的adb shell dumpsys ...來獲取所需的任何服務轉儲。

注意:您不需要DUMP權限即可正常工作。

0

它報告的核心Android服務,你將永遠無法獲得一般私有值。 Official document表示「不適用於第三方應用程序」。

0

在您的清單「android.permission.DUMP」上添加權限。我還沒有嘗試過,但它顯示在adb外殼上,它缺少該權限