Chinaunix首页 | 论坛 | 博客
  • 博客访问: 228652
  • 博文数量: 29
  • 博客积分: 1477
  • 博客等级: 上尉
  • 技术积分: 451
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-06 14:48
文章分类
文章存档

2012年(1)

2011年(14)

2010年(14)

我的朋友

分类: 嵌入式

2010-12-21 16:10:34

自定义Android核心服务实践

Daniel Wood 20101203

转载时请注明出处和作者

文章出处:http://danielwood.cublog.cn

作者:Daniel Wood

------------------------------------------------------------------------

2.    启动CalService服务

我们用一个应用程序去启动CalService服务,Android的一些服务也是通过某个应用程序去启动的,例如:SurfaceFlinger服务,只不过它们都是在系统启动的时候去启动的,通过init.rcsystem_init等开机自动启动。而我们是通过手动地运行应用程序去启动的,通过adb shell终端启动。

addserverapp.cpp文件

#include <sys/types.h>
#include <unistd.h>
#include <grp.h>
#include <binder/IPCThreadState.h>
#include <binder/ProcessState.h>
#include <binder/IServiceManager.h>
#include <utils/Log.h>
#include <private/android_filesystem_config.h>
#include "../libcalservice/CalService.h"//注意此处需包含的CalService头文件
using namespace android;

int main(int argc, char** argv)
{
    sp<ProcessState> proc(ProcessState::self());
    sp<IServiceManager> sm = defaultServiceManager();
    LOGD("ServiceManager: %p", sm.get());
    /*start the CalService*/
    CalService::instantiate();
    ProcessState::self()->startThreadPool();
    IPCThreadState::self()->joinThreadPool();
}

main函数中就是调用CalService服务的instantiate方法,注册,并且调用其构造函数,构造线程去监听服务。
Android.mk文件

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= addserverapp.cpp
LOCAL_C_INCLUDES:= $(JNI_H_INCLUDE) \
    frameworks/base/include
LOCAL_SHARED_LIBRARIES:= libutils libCalService
LOCAL_MODULE:= addserverapp #最后生成的应用程序名字
include $(BUILD_EXECUTABLE)

通过make addserverapp编译生成:

target thumb C++: addserverapp <= frameworks/base/myservice/addserverapp/addserverapp.cpp
target Executable: addserverapp (out/target/product/generic/obj/EXECUTABLES/addserverapp_intermediates/LINKED/addserverapp)
target Non-prelinked: addserverapp (out/target/product/generic/symbols/system/bin/addserverapp)
target Strip: addserverapp (out/target/product/generic/obj/EXECUTABLES/addserverapp_intermediates/addserverapp)
Install: out/target/product/generic/system/bin/addserverapp

自动将其放在/system/bin/目录下面,我们可以通过adb shell来启动/system/bin/下面的应用程序。

阅读(2214) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~