mokid 工程代码下载与结构分析与两种机理的简单解析

 

 下面结合实例来分析HAL编程方法。
四、mokid 工程代码下载与结构分析
1、mokid项目概述
    modkoid工程提供了一个LedTest示例程序,对于理解android层次结构、Hal编程方法都非常有意义。
2、下载方法
    #svn checkout http://mokoid.googlecode.com/svn/trunk/mokoid-read-only
3、结构分析
|-- Android.mk 
|-- apps      //两种应用测试方法
|   |-- Android.mk
|   |-- LedClient    //直接调用service来调用jni
|   |   |-- AndroidManifest.xml
|   |   |-- Android.mk
|   |   `-- src
|   |       `-- com
|   |           `-- mokoid
|   |               `-- LedClient
|   |                   `-- LedClient.java     //第1种方式应用程序实现代码
|   `-- LedTest        //通过manager来调用jni
|       |-- AndroidManifest.xml
|       |-- Android.mk
|       `-- src
|           `-- com
|               `-- mokoid
|                   `-- LedTest
|                       |-- LedSystemServer.java  //开启了一个后台service,下文会有解释
|                       `-- LedTest.java    //第2种方式应用程序实现代码
|-- dma6410xp   //这个目录可以不要
|   |-- AndroidBoard.mk
|   |-- AndroidProducts.mk
|   |-- BoardConfig.mk
|   |-- dma6410xp.mk
|   |-- init.dma6410xp.rc
|   |-- init.goldfish.sh
|   `-- init.rc
|-- frameworks     //框架代码
|   |-- Android.mk
|   `-- base
|       |-- Android.mk
|       |-- core
|       |   `-- java
|       |      
`-- mokoid
|       |           `-- hardware
|       |               |-- ILedService.aidl
|       |               `-- LedManager.java     //实现了Manager,给第2种方法用
|       `-- service 
|           |-- Android.mk
|           |-- com.mokoid.server.xml
|           |-- java
|           |   `-- com
|           |       `-- mokoid
|           |           `-- server
|           |               `-- LedService.java    //Framework service代码
|           `-- jni
|               |-- Android.mk
|               `-- com_mokoid_server_LedService.cpp  //jni代码
|-- hardware
|   |-- Android.mk
|   |-- libled
|   |   |-- Android.mk
|   |   `-- libled.c
|   `-- modules
|       |-- Android.mk
|       |-- include
|       |   `-- mokoid
|       |       `-- led.h
|       `-- led
|           |-- Android.mk
|           `-- led.c       //led stub 硬件控制代码
`-- README.txt

 
    Android的HAL的实现需要通过JNI(Java Native Interface),JNI简单来说就是java程序可以调用C/C++写的动态链接库,这样的话,HAL可以使用C/C++语言编写,效率更高。在Android下访问HAL大致有以下两种方式:
(1)Android的app可以直接通过service调用.so格式的jni
(2)经过Manager调用service
     上面两种方法应该说是各有优缺点,第一种方法简单高效,但不正规。第二种方法实现起来比较复杂,但更符合目前的Android框架。第二种方法中,LegManager
和LedService(java)在两个进程中,需要通过进程通讯的方式来通讯。
     mokoid工程中实现了上述两种方法。下面将详细介绍这两种方法的实现原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值