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

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

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

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

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

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

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

【问题讨论】:

    标签: android android-intent ipc


    【解决方案1】:

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

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

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

    绝对没有。

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

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

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

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

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

    两种选择:

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

    【讨论】:

      猜你喜欢
      • 2020-09-18
      • 1970-01-01
      • 2010-11-15
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2015-10-24
      • 2015-06-02
      相关资源
      最近更新 更多