android binder c++层-客户端(c++) 调用 服务端(c++) 例子
16lz
2021-01-23
客户端和服务端都采用C++程序编写
sampleClient.cpp ------------------------------------------------------------------- #include #include #include #include #include #include using namespace android; #ifdef LOG_TAG #undef LOG_TAG #endif #define LOG_TAG "sampleCallback" #define SAMPLE_SERIVCE_DES "sample.hello" #define FUNC_CALLFUNCTION 1 int main() { sp sm = defaultServiceManager(); sp ibinder = sm->getService(String16(SAMPLE_SERIVCE_DES)); if (ibinder == NULL){ LOGW( "Client can't find Service" ); return -1; } Parcel _data,_reply; int ret = ibinder->transact(FUNC_CALLFUNCTION, _data, &_reply, 0); LOGD( "Client transact return %d" , ret); ProcessState::self()->startThreadPool(); IPCThreadState::self()->joinThreadPool(); return 0; }
sampleService.cpp ---------------------------------------------------------------------------------------------------------- #include #include #include #include #include using namespace android; #ifdef LOG_TAG #undef LOG_TAG #endif #define LOG_TAG "sampleService" #define SAMPLE_SERIVCE_DES "sample.hello" #define FUNC_CALLFUNCTION 1 class SampleService: public BBinder { public : SampleService() { mydescriptor = String16(SAMPLE_SERIVCE_DES); } virtual ~SampleService() { }
virtual const String16& getInterfaceDescriptor() const { return mydescriptor; } protected : void callFunction() { LOGE( "Service callFunction-----------" ); } virtual status_t onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0) { LOGD( "Service onTransact, code = %d" , code); switch (code) { case FUNC_CALLFUNCTION: callFunction(); break ; default : return BBinder::onTransact(code, data, reply, flags); } return 0; } private : String16 mydescriptor; };
int main() { sp < IServiceManager > sm = defaultServiceManager(); SampleService* samServ = new SampleService(); status_t ret = sm->addService(String16(SAMPLE_SERIVCE_DES), samServ); LOGD( "Service addservice return %d" , ret); ProcessState::self()->startThreadPool(); IPCThreadState::self()->joinThreadPool( true ); return 0; }
Android.mk -------------------------------------------------------------------
LOCAL_PATH: = $(call my-dir) include $(CLEAR_VARS)
LOCAL_MODULE_TAGS : = eng
LOCAL_SRC_FILES: = \ sampleClient.cpp
LOCAL_C_INCLUDES + = \ $(LOCAL_PATH) \
LOCAL_SHARED_LIBRARIES : = \ libcutils \ libbinder \ libutils \ libhardware
LOCAL_CFLAGS : = -DRIL_SHLIB
LOCAL_MODULE: = sampleClient
include $(BUILD_EXECUTABLE)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS : = eng
LOCAL_SRC_FILES: = \ sampleService.cpp
LOCAL_C_INCLUDES + = \ $(LOCAL_PATH) \
LOCAL_SHARED_LIBRARIES : = \ libcutils \ libbinder \ libutils \ libhardware
LOCAL_CFLAGS : = -DRIL_SHLIB
LOCAL_MODULE: = sampleService
include $(BUILD_EXECUTABLE)
------------------------------------------------------------------- 1、新建文件夹binderSample 2、将以上三个文件放入ics-4.x\external\binderSample
sampleClient.cpp ------------------------------------------------------------------- #include
sampleService.cpp ---------------------------------------------------------------------------------------------------------- #include
virtual const String16& getInterfaceDescriptor() const { return mydescriptor; } protected : void callFunction() { LOGE( "Service callFunction-----------" ); } virtual status_t onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0) { LOGD( "Service onTransact, code = %d" , code); switch (code) { case FUNC_CALLFUNCTION: callFunction(); break ; default : return BBinder::onTransact(code, data, reply, flags); } return 0; } private : String16 mydescriptor; };
int main() { sp < IServiceManager > sm = defaultServiceManager(); SampleService* samServ = new SampleService(); status_t ret = sm->addService(String16(SAMPLE_SERIVCE_DES), samServ); LOGD( "Service addservice return %d" , ret); ProcessState::self()->startThreadPool(); IPCThreadState::self()->joinThreadPool( true ); return 0; }
Android.mk -------------------------------------------------------------------
LOCAL_PATH: = $(call my-dir) include $(CLEAR_VARS)
LOCAL_MODULE_TAGS : = eng
LOCAL_SRC_FILES: = \ sampleClient.cpp
LOCAL_C_INCLUDES + = \ $(LOCAL_PATH) \
LOCAL_SHARED_LIBRARIES : = \ libcutils \ libbinder \ libutils \ libhardware
LOCAL_CFLAGS : = -DRIL_SHLIB
LOCAL_MODULE: = sampleClient
include $(BUILD_EXECUTABLE)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS : = eng
LOCAL_SRC_FILES: = \ sampleService.cpp
LOCAL_C_INCLUDES + = \ $(LOCAL_PATH) \
LOCAL_SHARED_LIBRARIES : = \ libcutils \ libbinder \ libutils \ libhardware
LOCAL_CFLAGS : = -DRIL_SHLIB
LOCAL_MODULE: = sampleService
include $(BUILD_EXECUTABLE)
------------------------------------------------------------------- 1、新建文件夹binderSample 2、将以上三个文件放入ics-4.x\external\binderSample
3、编译,拷贝到开发环境中,chmod,然后各自运行
更多相关文章
- Android创建文件夹
- Mqtt从服务端到Android客户端搭建(Android客户端搭建)
- 基于WebSocket的Android与服务端通信
- [hessdroid]Android下使用Hessian与Java服务端通讯的传值测试
- android读写assets目录下面的资源文件(文件夹)
- Android访问WCF服务(上篇)-服务端开发
- android实现ftp上传、下载,支持文件夹
- android java 检测文件夹(目录)是否存在,不存在则创建
- Android在外部修改了工程名文件夹名称,报错