ICC在Android堆栈中处理的位置在哪里?

时间:2015-09-21 06:48:53

标签: android android-intent ipc

我被分配做了一个项目,我应该在其中编写一个Android应用程序,以拦截在框架中传递的所有通信Intent。事实上,我想拦截包括所有IPC在内的所有ICC(组件间通信)。

AFAIK,下面列出了Android中ICC的两种常用方法。

  • 意图传递(活动,服务和接收者之间)。
  • 活动可以自行绑定的绑定服务。

为了完成这个项目,我应该操纵Android框架来挂钩一些特定的模块吗? (虽然我不这样做)。

我更感兴趣的是创建一个应用程序来拦截所有ICC ​​而不用操纵框架。它有可能吗?

如果我应该触摸框架,请告诉我将处理所有ICC ​​/组件?

1 个答案:

答案 0 :(得分:0)

  

我应该操纵Android框架来挂钩一些特定的模块吗?

是。由于Linux内核的进程防沙功能,您的应用无法访问其他应用的信息或其中发生的事情。

  

我更感兴趣的是在不操纵框架的情况下创建一个拦截所有ICC的应用程序。它有可能吗?

绝对没有。

  

如果我应该触摸框架,请告诉我将处理所有ICC ​​/组件?

为拦截所有ICC,包括启动活动,启动服务,绑定服务和发送广播,您可以操纵Activity Manager服务。

每当您的应用中,您拨打startActivity()(及其所有风味,例如startActivityForResult()),sendBroadcast()startServicebindService(其中两者都是RPC并使用Messenger),将采取以下步骤。 (引擎盖后面!)

  • 您的应用通过内核中提供的Binder机制联系Service Manager
  • Service Manager就像注册系统服务的索引。因此,它会通过Binder机制向您的应用返回Activity Manager的句柄。
  • 您的应用现在调用刚刚获得的Activity Manager实例上指定的方法。

  • Activity Manager中将采取进一步的步骤,例如:意图解析(通过resolveIntent()的{​​{1}}方法)以及权限检查。

您的案例有两种选择:

  1. 直接处理Package Manager个代码。
  2. 定义您自己的系统服务,该服务充当Activity Manager的代理,并将其注册到Activity Manager。的 Service Manager