【问题标题】:AOSP: Custom system service communicating with other servicesAOSP:与其他服务通信的自定义系统服务
【发布时间】:2019-07-31 09:25:34
【问题描述】:

我正在调查一项针对 AOSP 的自定义系统服务,以通过网络为系统提供基本的远程控制(切换用户和启动应用程序)。它应该基于 Android 9。为了未来的可移植性,如果可能的话,我更愿意使用高级别的 Java API。

我在系统级别上对 Android 了解不多。看来,至少部分功能可以通过与 Activity Manager 通信来覆盖,这可能是一个很好的起点。

我的一些问题:

  • 是否打算让不同的系统服务相互通信?

  • 如果这是可能的,一个系统服务如何使用其他服务的功能?尽管所有服务都在同一个进程中,但这是否仍应通过 HIDL/binder?

  • 是否有现有的系统服务可以做类似的事情作为参考?

【问题讨论】:

    标签: android android-source


    【解决方案1】:

    是否打算让不同的系统服务相互通信?

    是的,这是有意的。

    如果这是可能的,一个系统服务如何使用其他服务的功能?尽管所有服务都在同一个进程中,但这是否仍应通过 HIDL/binder?

    HIDL over /dev/hwbinder 用于 HAL 到系统服务的通信。系统服务之间的通信仍然可以通过AIDL 而非/dev/binder 完成。我认为您通常会使用服务Manager 类,它无论如何都会抽象Binder 的使用。这可能不是一个很好的简约示例,但您可以看看 Car 服务如何使用 CarAudioService.java 中的 TelephonyManager

    是否有现有的系统服务可以做类似的事情作为参考?

    您可以查看packages/services中的附加服务。

    【讨论】:

      【解决方案2】:

      有两种类型的系统服务: 1、在system_server中运行:在SystemServer.java启动;应用程序可以通过 XXXManager 调用它们(例如,ActivityManager);他们还提供了一些内部 api,由 system_server 中的其他服务调用。 2. 运行在有系统uid或平台权限的app中:普通appservices;他们可以做第三个应用程序不能做的事情;它们符合android源码,所以可以调用hide api。

      类型 2 服务可以满足大多数需求。所以我建议你选择Type 2服务。它更容易调试和维护。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多