2011-07-05 116 views
5

這是我第一次在這裏發佈。我不確定這是否是提問這個問題的正確地點,但我似乎找不到其他更合適的地方。無論如何,這是我的問題。任務管理器的ActivityManager.forceStopPackage()

據我所知,API ActivityManager.forceStopPackage()是一個內部的,只能從系統進程調用。然而,它令我感到困惑的是,我的摩托羅拉atrix手機上的內置任務管理器應用程序(包名爲com.motorola.PerformanceManager)可以直接調用它,而不是一個系統進程。我驗證了兩件事。

首先,它是非系統進程從ps命令:

app_64 13681 1379 170788 29820 ffffffff 00000000 S com.motorola.PerformanceManager 

其次,它確實要求從ODEX文件ActivityManager.forceStopPackage() API(反編譯成smali,然後進入DEX,然後到Java)。從smali代碼中,它已經清楚它調用了這個API。

我也檢查了它的AndroidManifest.xml文件,這對我來說似乎沒什麼特別的(論壇錯誤地認識到內容爲URL並且阻止我發佈它們)。

清單文件確實包含android.permission.FORCE_STOP_PACKAGES權限,該權限應該是系統權限。即使擁有此權限,非系統應用仍然會獲得權限拒絕錯誤。我嘗試使用反射訪問這個API與android.permission.FORCE_STOP_PACKAGES權限,但仍然得到運行時錯誤。

現在,內置的任務管理器應用程序如何在不成爲系統進程的情況下調用內部API。 一種可能性是應用程序使用相同的平臺私鑰簽名。但是,我不確定我如何驗證。此外,它仍然是一個系統進程,在清單文件中有額外的描述。

希望有人能回答我的問題。謝謝。

+0

我有同樣的問題,如:java.lang.SecurityException異常:權限拒絕: \t \t forceStopPackage()從PID = 20914,UID = 10073所需的Android版本.permission.FORCE_STOP_PACKAGES ,,,可以請你幫我解決這個問題 – 2014-02-05 16:09:42

回答

13

「android.permission.FORCE_STOP_PACKAGES」權限受平臺簽名保護。

如果你有那麼Android源代碼檢查許可的聲明:

/frameworks/base/core/res/AndroidManifest.xml

... 
    <permission android:name="android.permission.FORCE_STOP_PACKAGES" 
     android:permissionGroup="android.permission-group.SYSTEM_TOOLS" 
     android:protectionLevel="signature" 
... 

你可以看到它的保護級別是簽名,然後檢查的交代SDK文檔:

「安卓的ProtectionLevel」

http://developer.android.com/guide/topics/manifest/permission-element.html#plevel

「signature ...只有在請求的應用程序使用與聲明權限的應用程序相同的證書進行簽名時,系統纔會授予的權限。如果證書匹配,則系統會自動授予權限不通知用戶或者詢問用戶的明確同意」

許可由這是由平臺簽名簽署的框架清晰度的聲明,所以應用程序要使用權限也應簽署同一個簽名。

/frameworks/base/core/res/Android。MK

... 
    LOCAL_PACKAGE_NAME := framework-res 
    LOCAL_CERTIFICATE := platform 
... 

問候

紫藤陳

+0

謝謝,我認爲這是正確的答案。但是,我仍然不確定如何驗證應用程序確實是使用平臺密鑰簽名的。根據應用程序的清單文件,許可權被簡單地寫爲(清單文件中提到的protectionLevel無處)。這與我們所理解的有些矛盾? – zack

+0

所有的.apk文件都應該簽名,但您可能沒有意識到,因爲Eclipse ADT已經爲您完成了。按照指南按自己的密鑰簽名apk: http://developer.android.com/guide/publishing/app-signing.html#ExportWizard 如果您有Android源,那麼您可以找到Android調試證書in/build/target/product/security文件夾中,但電話製造商通常會用他們自己的活動證書替換證書,這些證書是保密的,永遠不會透露給您和我,因此我擔心您無法獲得例如平臺摩托羅拉手機的證書。 –

+0

再次感謝。只是爲了仔細檢查我是否正確理解這一點。我知道每個.apk文件都使用證書籤名。但是根據規範,是不是FORCE_STOP_PACKAGES權限應該在清單文件中有一行「android:protectionLevel =」簽名「?你是否說這不是真的必要(內置任務管理器應用根本沒有此行)?我會在確認我的理解後將您的迴應標記爲答案。 – zack