任务管理器中的ActivityManager.forceStopPackage()

时间:2011-07-05 02:48:46

标签: android

这是我第一次在这里发帖。我不确定这是否是提出这个问题的正确位置,但我似乎没有找到其他更合适的地方。无论如何,这是我的问题。

我理解API ActivityManager.forceStopPackage()是内部API,只能从系统进程调用。但是,令我感到困惑的是,我的 motorola 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权限,该权限应该是系统权限。即使有此权限,非系统应用仍会获得权限拒绝错误。我尝试使用反射以android.permission.FORCE_STOP_PACKAGES权限访问此API但仍然遇到运行时错误。

现在,内置的任务管理器应用程序如何在不成为系统进程的情况下调用内部API。 一种可能性是应用程序使用相同的平台私钥进行签名。但是,我不确定如何验证这一点。此外,它仍然应该是一个系统进程,在清单文件中有其他描述。

希望有人能回答我的问题。感谢。

1 个答案:

答案 0 :(得分: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

“签名...系统仅在请求的应用程序使用与声明权限的应用程序相同的证书进行签名时授予的权限。如果证书匹配,系统会自动授予权限,而不通知用户或询问对于用户的明确批准“

该权限由framework-res声明,该权限由平台签名签署,因此想要使用该权限的应用程序也应使用相同的签名进行签名。

/frameworks/base/core/res/Android.mk

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

此致

陈子腾