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()
、startService
和 bindService
(其中 RPC 和使用 Messenger),以下将采取措施。 (在引擎盖后面!)
Service Manager
。
Service Manager
就像注册系统服务的索引。因此它会通过 Binder 机制将Activity Manager
的句柄返回给您的应用。
您的应用现在调用它刚刚获得的 Activity Manager
实例上指定的方法。
在Activity Manager
中将采取进一步的步骤,例如:意图解析(通过Package Manager
的resolveIntent()
方法)以及权限检查。
两种选择:
-
直接操作
Activity Manager
代码。
定义您自己的系统服务,充当Activity Manager
的代理并将其注册到Service Manager
。 Recommended
【讨论】:
以上是关于Android 堆栈中的 ICC 在哪里处理?的主要内容,如果未能解决你的问题,请参考以下文章