ICC 在 Android 堆栈中的何处处理?
Where is ICCs handled in the Android stack?
我被分配去做一个项目,我应该为 Android 编写一个应用程序来拦截在框架中传递的所有通信意图。事实上,我想拦截现在在包括所有 IPC 的设备中进行的所有 ICC(组件间通信)。
据我所知,在下面列出的 Android 中有两种通用的 ICC 方法。
- 意图传递(在活动、服务和接收器之间)。
- 活动可以绑定到的绑定服务。
为了完成这个项目,我应该操纵 Android 框架来挂接一些特定的模块吗? (虽然我不会这样做)。
我更感兴趣的是创建一个应用程序来拦截所有 ICC 而不 操纵框架。有可能吗?
如果我要触及框架,请告诉我所有 ICC 将在哪个模块/组件中处理?
Should I manipulate Android framework to hook some specific modules?
是的。由于 Linux 内核的进程沙盒功能,您的应用无法访问其他应用的信息或那里正在发生的事情。
I rather more interested in creating an app to intercept all ICCs without manipulating the framework. Is it possible at all?
绝对不会
If I should touch the framework, please tell me at which module(s)/component(s) all ICCs would be handled?
要拦截所有 ICC,包括启动 Activity、启动服务、绑定到服务和发送广播,您可以操纵 Activity Manager 服务。
无论何时在您的应用程序中,您调用 startActivity()
(及其所有类型,例如 startActivityForResult()
)、sendBroadcast()
、startService
和 bindService
(属于其中 RPC 和使用 Messenger),将执行以下步骤。 (在引擎盖后面!)
- 您的应用通过内核中提供的 Binder 机制联系
Service Manager
。
Service Manager
就像注册系统服务的索引。因此它会 return 通过 Binder 机制将 Activity Manager
的句柄返回给您的应用程序。
您的应用程序现在调用它刚刚获得的 Activity Manager
实例上指定的方法。
在 Activity Manager
中将采取进一步的步骤,例如:意图解析(通过 Package Manager
的 resolveIntent()
方法)以及权限检查。
您的情况有两种选择:
- 直接操作
Activity Manager
代码。
- 定义您自己的系统服务,充当
Activity Manager
的代理并将其注册到 Service Manager
。 Recommended
我被分配去做一个项目,我应该为 Android 编写一个应用程序来拦截在框架中传递的所有通信意图。事实上,我想拦截现在在包括所有 IPC 的设备中进行的所有 ICC(组件间通信)。
据我所知,在下面列出的 Android 中有两种通用的 ICC 方法。
- 意图传递(在活动、服务和接收器之间)。
- 活动可以绑定到的绑定服务。
为了完成这个项目,我应该操纵 Android 框架来挂接一些特定的模块吗? (虽然我不会这样做)。
我更感兴趣的是创建一个应用程序来拦截所有 ICC 而不 操纵框架。有可能吗?
如果我要触及框架,请告诉我所有 ICC 将在哪个模块/组件中处理?
Should I manipulate Android framework to hook some specific modules?
是的。由于 Linux 内核的进程沙盒功能,您的应用无法访问其他应用的信息或那里正在发生的事情。
I rather more interested in creating an app to intercept all ICCs without manipulating the framework. Is it possible at all?
绝对不会
If I should touch the framework, please tell me at which module(s)/component(s) all ICCs would be handled?
要拦截所有 ICC,包括启动 Activity、启动服务、绑定到服务和发送广播,您可以操纵 Activity Manager 服务。
无论何时在您的应用程序中,您调用 startActivity()
(及其所有类型,例如 startActivityForResult()
)、sendBroadcast()
、startService
和 bindService
(属于其中 RPC 和使用 Messenger),将执行以下步骤。 (在引擎盖后面!)
- 您的应用通过内核中提供的 Binder 机制联系
Service Manager
。 Service Manager
就像注册系统服务的索引。因此它会 return 通过 Binder 机制将Activity Manager
的句柄返回给您的应用程序。您的应用程序现在调用它刚刚获得的
Activity Manager
实例上指定的方法。在
Activity Manager
中将采取进一步的步骤,例如:意图解析(通过Package Manager
的resolveIntent()
方法)以及权限检查。
您的情况有两种选择:
- 直接操作
Activity Manager
代码。 - 定义您自己的系统服务,充当
Activity Manager
的代理并将其注册到Service Manager
。Recommended