Robot OS添加开机启动服务

简介: 在Robot OS架构设计中我们规划了语音、视觉、运动、指令处理四大核心服务,这些服务会放在framework层,开机后自动启动运行,我们提供SDK与这些服务交互,本文我们分析如何在framework层中增加开机自启动服务。

image.png


1. 背景


在Robot OS架构设计中我们规划了语音、视觉、运动、指令处理四大核心服务,这些服务会放在framework层,开机后自动启动运行,我们提供SDK与这些服务交互,本文我们分析如何在framework层中增加开机自启动服务。


本文以Android 9.0系统为主。


2. 定义跨进程通信接口


进入到frameworks/base/core/java/android/os目录,新增IDemoService.aidl接口定义文件:


package android.os;
interface IDemoService {
    void setValue(int val);
    int getValue();
}


AIDL只支持传输基本java类型数据, 要想传递自定义类, 类需要实现 Parcelable 接口, 如果传递基本类型数组, 需要指定 in out 关键字, 比如 void process(in byte[] input, out byte[] output) , 用 in 还是 out, 只需要记住:  数组如果作为参数, 通过调用端传给被调端, 则使用 in, 如果数组只是用来接受数据, 实际数据是由被调用端来填充的, 则使用 out。


frameworks/base目录,打开Android.mk文件,修改LOCAL_SRC_FILES变量的值,增加IDemoService.aidl源文件:


core/java/android/os/IDemoService.aidl /


执行mmm frameworks/base编译aidl文件,这里在9.0版本会报错:


******************************
You have tried to change the API from what has been previously approved.
To make these errors go away, you have two choices:
   1) You can add "@hide" javadoc comments to the methods, etc. listed in the
      errors above.
   2) You can update current.txt by executing the following command:
         make update-api
      To submit the revised current.txt to the main Android repository,
      you will need approval.
...


这里我们直接执行sudo make update-api再重新编译既可,编译整个base还是有点耗时间。


执行完后会根据IDemoService.aidl生成IDemoService.Stub接口。


3. 实现DemoService


frameworks/base/services/java/com/android/server目录,新增DemoService.java文件:


package com.android.server;
import android.content.Context;
import android.os.IDemoService;
import android.util.Slog;
public class DemoService extends IDemoService.Stub {
  private static final String TAG = "DemoService";
  private int value;
  DemoService() {
    Log.i(TAG, "DemoSerice init")
  }
  public void setValueint val) {
    this.value = val;
  } 
  public int getValue() {
    return value;
  }
};


DemoService什么也没干,只是维护了一个int型变量,可供APP侧获取或者赋值。


修改同目录的SystemServer.java文件,在ServerThread::run函数中增加加载DemoService的代码:


@Override
     public void run() {undefined
     ......
     try {undefined
        Slog.i(TAG, "DiskStats Service");
        ServiceManager.addService("diskstats", new DiskStatsService(context));
     } catch (Throwable e) {undefined
        Slog.e(TAG, "Failure starting DiskStats Service", e);
     }
    try {
        Slog.i(TAG, "Demo Service");
        ServiceManager.addService("hello", new DemoService());
    } catch (Throwable e) {
        Slog.e(TAG, "Failure starting Demo Service", e);
    }
     ......   


调用我们的编译打包命令编译出镜像头,烧制到设备,开机后就可以看到我们的Demo ServiceDemoSerice init的日志了。


4. 验证接口


我们自己创建一个Android工程,里面实现一个acitivity,通过导包:import android.os.IDemoService;后,可以通过:


IDemoService demoService = IDemoService.Stub.asInterface(
    ServiceManager.getService("demo"));


来获取DemoService,然后通过IDemoService多态来调用get和set方法。


5. 其他实现方式


首先,我们可以不修改android.os包,而是把IDemoService.Stub的库封装到SDK供APP使用,或者通过修改Context,在Context中提供获取DemoService的接口。


其次,我们可以做成一个单独的APK,内置到系统,开机启动并提供服务。


6. 总结


本文提供了framework层添加系统服务的方式,主要是介绍修改代码的位置,后续我们基于这个思路实现我们架构设计中规划的四个核心服务,并提供SDK供APP层调用。

目录
打赏
0
0
0
0
33
分享
相关文章
优化管理与服务:操作系统控制平台的订阅功能解析
本文介绍了如何通过操作系统控制平台提升系统效率,优化资源利用。首先,通过阿里云官方平台开通服务并安装SysOM组件,体验操作系统控制平台的功能。接着,详细讲解了订阅管理功能,包括创建订阅、查看和管理ECS实例的私有YUM仓库权限。订阅私有YUM仓库能够集中管理软件包版本、提升安全性,并提供灵活的配置选项。最后总结指出,使用阿里云的订阅和私有YUM仓库功能,可以提高系统可靠性和运维效率,确保业务顺畅运行。
AI驱动的操作系统服务评测报告
作为一位运维工程师,我使用Alibaba Cloud Linux 3操作系统进行云资源的运维和管理。通过控制台可快速开通并管理云资源,界面简洁、功能明确。安装SysOM和OS Copilot组件简单高效,支持实时监控集群健康状况,并提供精准的系统诊断与优化建议。OS Copilot智能助手能有效解答技术问题,提升工作效率。针对EOL系统的订阅服务提供了安全迁移保障。整体体验优秀,尤其适合中小企业降低运维复杂度。建议进一步优化权限管理、增加报告导出功能及增强Copilot交互性。
探索未来:AI驱动的操作系统服务评测
### 探索未来:AI驱动的操作系统服务评测 本文介绍阿里云新推出的AI驱动操作系统服务套件,为运维工程师和开发者提供免费、智能的操作系统管理体验。通过Alibaba Cloud Linux的实际操作,评估其安装便捷性、系统健康监控、智能助手OS Copilot等功能。该服务显著提升了工作效率约30%,并增强了服务可靠性。AI技术的融入使系统管理更加智能化,值得尝试。
164 16
操作系统服务套件评测报告
阿里云推出以AI为核心的操作系统服务套件,助力云端高效运维。评测基于Ubuntu 20.04 LTS环境,涵盖安装、系统健康检查、诊断、OS Copilot智能助手等功能。套件简化故障排查,提升工作效率,尤其适合专业运维人员。建议增强文档支持和社区互动,整体表现优异,推荐给寻求高效云管理方案的用户。
123 16
AI驱动的操作系统服务评测报告
阿里云推出AI驱动的一站式免费操作系统服务套件,包含SysOM管控组件和OS Copilot智能助手,提供集群健康监测、深度系统诊断等功能。通过直观的操作界面和详尽的诊断报告,帮助运维人员优化系统性能,提高工作效率。特别针对EOL操作系统提供订阅管理服务,确保系统安全。整体体验令人满意,但在文档详细度和定制化方面仍有提升空间。
135 14
AI 驱动,全面升级!操作系统服务套件体验评测
作为一名运维工程师,我体验了阿里云的操作系统服务套件,选择了Alibaba Cloud Linux作为测试环境。通过安装SysOM和OS Copilot组件,轻松管理集群健康数据、进行系统诊断并获得优化建议。OS Copilot智能解答技术问题,节省查阅资料时间;订阅管理帮助我及时升级操作系统,保障安全。整体功能强大,提升了约20%的工作效率,值得推广。建议增加更多系统版本支持及自动优化功能。
AI驱动的操作系统服务体验:大模型时代的运维革新
AI驱动的操作系统服务体验:大模型时代的运维革新
134 5
AI驱动操作系统服务评测报告
阿里云操作系统服务套件集成AI技术,提供集群健康、系统诊断、观测分析和OS Copilot等功能,助力高效管理。安装组件流程简便,系统观测与诊断功能强大,数据可视化效果佳,支持历史趋势分析。OS Copilot智能助手回答逻辑清晰,但部分问题需增强专业性。整体评价高,建议进一步优化错误提示、自动诊断及订阅服务记录,提升用户体验。
180 26
AI驱动操作系统服务评测报告
评测报告:AI驱动的操作系统服务套件体验
评测报告:AI驱动的操作系统服务套件体验
95 3

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问