2011-07-05 110 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