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

Posted

技术标签:

【中文标题】Android 堆栈中的 ICC 在哪里处理?【英文标题】:Where is ICCs handled in the Android stack? 【发布时间】:2015-09-21 06:48:52 【问题描述】:

我被分配做一个项目,我应该为 android 编写一个应用程序来拦截框架中传递的所有通信 Intent。事实上,我想拦截设备中正在进行的所有 ICC(组件间通信),包括所有 IPC。

AFAIK,下面列出了在 Android 中进行 ICC 的两种通用方法。

意图传递(在活动、服务和接收器之间)。 Activity 可以自行绑定的绑定服务。

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

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

如果我应该接触框架,请告诉我所有 ICC 将在哪些模块/组件处处理?

【问题讨论】:

【参考方案1】:

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

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

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

绝对没有。

如果我应该接触框架,请告诉我所有 ICC 将在哪些模块/组件处处理?

为了拦截所有的ICC,包括启动Activity、启动Services、绑定Services和发送广播,你可以操纵Activity Managerservice。

无论何时在您的应用程序中,您调用 startActivity()(以及所有其风格,例如 startActivityForResult())、sendBroadcast()startServicebindService(其中 RPC 和使用 Messenger),以下将采取措施。 (在引擎盖后面!)

您的应用通过内核中提供的 Binder 机制联系 Service ManagerService Manager 就像注册系统服务的索引。因此它会通过 Binder 机制将Activity Manager 的句柄返回给您的应用。

您的应用现在调用它刚刚获得的 Activity Manager 实例上指定的方法。

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

两种选择:

    直接操作Activity Manager代码。 定义您自己的系统服务,充当Activity Manager 的代理并将其注册到Service ManagerRecommended

【讨论】:

以上是关于Android 堆栈中的 ICC 在哪里处理?的主要内容,如果未能解决你的问题,请参考以下文章

在哪里处理 MERN 堆栈上的数据?

python中的堆栈跟踪和异常处理

android打印调用堆栈

位于进程虚拟地址空间中的其他线程的堆栈在哪里?

函数所需的堆栈空间是否会影响C / C ++中的内联决策?

stm32中的堆栈地址在哪里定义的