Android实战-利用Binder+Service实现累加器.ppt_第1页
Android实战-利用Binder+Service实现累加器.ppt_第2页
Android实战-利用Binder+Service实现累加器.ppt_第3页
Android实战-利用Binder+Service实现累加器.ppt_第4页
Android实战-利用Binder+Service实现累加器.ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android实战利用BinderService实现累加器CMY2009-04-29,内容提要,内容五实现累加器,内容四实现接口给Java层使用,内容三自动启动BinderService,内容二实现Native层的BinderService,内容一概述,概述,Binder的流程可参考这篇文档:AndroidBinderIPCsystem先来看一下最终程序运行的效果图:,实现BinderService,在cupcake/frameworks/base目录下新建两个目录,一个实现BinderService,一个实现将我们的BinderService添加到ServiceManager:,libSimpleCalculator,libSimpleCalculator实现了BinderService它由以下几个文件组成:这些文件实现如下几个类:ISimpleCalculator接口类BpSimpleCalculatorclient能够获取到的类BnSimpleCalculator实现具体功能SimpleCalculator同上,ISimpleCalculator.h,classISimpleCalculator:publicIInterfacepublic:DECLARE_META_INTERFACE(SimpleCalculator);virtualintaddValue(constint32_tiValue)=0;virtualintgetValue()const=0;classBnSimpleCalculator:publicBnInterfacepublic:BnSimpleCalculator();BnSimpleCalculator();virtualstatus_tonTransact(uint32_tcode,constParcel,ISimpleCalculator.cpp,enumADD_VALUE=IBinder:FIRST_CALL_TRANSACTION,GET_VALUE,;classBpSimpleCalculator:publicBpInterface.virtualintgetValue()constLOGI(BpSimpleCalculator:getValuetransact(GET_VALUE,data,SimpleCalculator.h,#includeISimpleCalculator.h“.classSimpleCalculator:publicBnSimpleCalculatorprivate:int32_tm_iValue;public:staticvoidinstantiate();virtualstatus_tonTransact(uint32_tcode,constParcel,SimpleCalculator.cpp,#defineLOG_TAGSimpleCalculator“#includeSimpleCalculator.h“voidSimpleCalculator:instantiate()LOGI(SimpleCalculator:instantiateaddService(String16(android.SimpleCalculator),newSimpleCalculator();status_tSimpleCalculator:onTransact(uint32_tcode,constParcel.,Android.mk,LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)TARGET_PRELINK_MODULE:=falseLOCAL_SRC_FILES:=ISimpleCalculator.cppSimpleCalculator.cppLOCAL_SHARED_LIBRARIES:=libcutilslibutilsLOCAL_MODULE:=libSimpleCalculatorinclude$(BUILD_SHARED_LIBRARY),startSimpleCalculator,startSimpleCalculator用于启动SimpleCalculator这个BinderService:,startSimpleCalculator.cpp,#include#include#include#include#include#include#include#includeSimpleCalculator.husingnamespaceandroid;intmain(intargc,char*argv)LOGI(EnterstartSimpleCalculatorproc(ProcessState:self();spsm=defaultServiceManager();LOGI(CurrentServiceManager:%p,sm.get();SimpleCalculator:instantiate();ProcessState:self()-startThreadPool();IPCThreadState:self()-joinThreadPool();,Android.mk,LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_SRC_FILES:=startSimpleCalculator.cppLOCAL_SHARED_LIBRARIES:=libutilslibSimpleCalculatorbase:=$(LOCAL_PATH)/./.LOCAL_C_INCLUDES:=$(base)/SimpleCalculator/libSimpleCalculatorLOCAL_MODULE:=startSimpleCalculatorinclude$(BUILD_EXECUTABLE),编译,完全编译#make部分编译启动编译环境:cupcake#.build/envsetup.sh接着再进入你要编译的目录执行mmcupcake/frameworks/base/SimpleCalculator/libSimpleCalculator#mm输出文件在generic/system/lib/libSimpleCalculator.socupcake/frameworks/base/SimpleCalculator/startSimpleCalculator#mm输出文件在generic/system/bin/startSimpleCalculator如果你需要用到system.img,请执行以下命令:cupcake#makesnod生成新的system.img,自动启动BinderService,打开root/init.rc,在该文件末尾加入新的service:serviceSimpleCalculator/system/bin/startSimpleCalculatoruserrootgroupsystem*如果你要用到ramdisk.img,使用cpio命令生成新的ramdisk.img运行仿真器,在Logcat中将会看到如下内容:.I/(547):EnterstartSimpleCalculatorSimpleCalculator:instantiateBnSimpleCalculator:BnSimpleCalculatorSimpleCalculator:SimpleCalculatorEnterandroid_os_SimpleCalculator_addValue:%dms=get_SimpleCalculatorInterface();/get_native_MyService(env,clazz);if(ms=0)return0;returnms-addValue(iValue);staticjintandroid_os_SimpleCalculator_getValue(JNIEnv*env,jobjectclazz)LOGI(Enterandroid_os_SimpleCalculator_getValuems=get_SimpleCalculatorInterface();/get_native_MyService(env,clazz);if(ms=0)return0;returnms-getValue();,/*JNIregistration.*/staticJNINativeMethodgMethods=native_addValue,(I)I,(void*)android_os_SimpleCalculator_addValue,native_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论