自定义Android核心服务实践
Daniel Wood 20101203
转载时请注明出处和作者
文章出处:http://danielwood.cublog.cn
作者:Daniel Wood
------------------------------------------------------------------------
2. 启动CalService服务
我们用一个应用程序去启动CalService服务,Android的一些服务也是通过某个应用程序去启动的,例如:SurfaceFlinger服务,只不过它们都是在系统启动的时候去启动的,通过init.rc,system_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) |