Android服务之调用流程


1. 驱动层

     驱动代码路径device/YOUR_ISP_FACTORY/bigfish/sdk/source/kernel/linux-*.*.*/drivers/***.c

     1.1 如何操作硬件?

               不同硬件的操作方法不一样,比如用GPIO去控制相应的寄存器等,这个需要参考相应的技术手册。

               将硬件映射为一个文件,比如/sys/devices/platform/misc_ctl/myservice_*,这样通过读写这个文件,就能操作硬件。

     1.2 如何编译到Linux内核中?

                修改对应的Kconfig 和 Makefile

2.HAL层

     myservice : power qemu qemu_tracing uevent vibrator wifi audio and so on.

     hardware/libhardware_legacy/include/hardware_legacy/myservice.h

     hardware/libhardware_legacy/myservice/myservice.c --> 访问节点文件,并且提供相关的方法。

     hardware/libhardware_legacy/Android.mk -->编译库

3.Service实现

     frameworks/base/services/jni/com_android_server_***Service.cpp  -->调用动态库中的方法

     frameworks/base/services/jni/Android.mk  --> 使用HAL层的动态库,编译库

     frameworks/base/services/java/com/android/server/***Service.java  -->通过JNI调用,并且实现Service的功能。

4.Framework层调用服务

     frameworks/base/services/java/com/anroid/server/SystemServer.java -->启动和管理系统的服务

     frameworks/base/core/java/android/os/I***Service.aidl  --> 其他进程可以访问的Service外部接口,应用层API。

     frameworks/base/core/java/android/os/***.java  --> 抽象类,定义服务接口。

     frameworks/base/core/java/android/os/System***.java  --> ***.java的子类,通过Binder访问SM管理的Service对象,实现服务接口。

5.应用层调用服务

     AndoridManifest.xml中添加相应的权限,

     YourAndroidAPP.java    --> getSystemService()获取服务,通过服务接口使用Service。

以上只是一个简单的粗略的流程。

要想了解具体的System Service可以查看源码。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值