在网上看到了一个例子,关于binder的例子,网址是http://blogold.chinaunix.net/u4/123238/showart_2442417.html
一下是代码:CalService.h文件#ifndef ANDROID _CAL_SERVICE_H
#define ANDROID _CAL_SERVICE_H
#include <utils/RefBase.h>
#include <binder/IInterface.h>
#include <binder/Parcel.h>
namespace android
{
    class CalService : public BBinder
    {
    public:
     enum {    //运算操作的命令类型
        ADD,
        SUB,
        MUL,
        DIV,
     };
            static int instantiate();
            CalService();
            virtual ~CalService();
            virtual status_t onTransact(uint32_t, const Parcel&, Parcel*, uint32_t);
    };
};
#endif
CalService.cpp文件
#include "CalService.h"
#include <binder/IServiceManager.h>
#include <binder/IPCThreadState.h>
namespace android 
{
       static struct sigaction oldact;
       static pthread_key_t sigbuskey;       int CalService::instantiate() 
       {
     LOGD("CalService instantiate");
/*向ServiceManager注册CalService服务,名字为"CalService"*/
           int ret = defaultServiceManager()->addService(String16("CalService"), new CalService());
           return ret;
       }       CalService::CalService()
       {
     LOGD("CalService created");
           pthread_key_create(&sigbuskey, NULL);
       }       CalService::~CalService()
       { 
     pthread_key_delete(sigbuskey);
           LOGD("CalService destroyed");
       }
/*具体实现函数*/
       status_t CalService::onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
       {
            switch(code) 
     {
                case ADD: {
                              pid_t pid = data.readInt32();
                              int num1 = data.readInt32();
             int num2 = data.readInt32();
                              int result = num1 + num2;
                              reply->writeInt32(result);
                              return NO_ERROR;
                          } break;
        case SUB: {
             pid_t pid = data.readInt32();
                              int num1 = data.readInt32();
                              int num2 = data.readInt32();
             int result = num1 - num2;
                              reply->writeInt32(result);
                              return NO_ERROR;
             } break;
        case MUL: {
             pid_t pid = data.readInt32();
                              int num1 = data.readInt32();
                              int num2 = data.readInt32();
             int result = num1 * num2;
                              reply->writeInt32(result);
                              return NO_ERROR;
             } break;
        case DIV: {
             pid_t pid = data.readInt32();
                              int num1 = data.readInt32();
                              int num2 = data.readInt32();
             float result = num1 / num2;
                              reply->writeFloat(result);
                              return NO_ERROR;
             } break;
                default:
             return BBinder::onTransact(code, data, reply, flags);
              }
       }    
}; 
Android.mk文件LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= CalService.cpp
LOCAL_C_INCLUDES:= $(JNI_H_INCLUDE) \
    frameworks/base/include #注意添加头文件路径
LOCAL_SHARED_LIBRARIES:= \  #注意需要调用这些共享库
 libutils \
 libcutils \
 libbinder \
 libandroid_runtime
LOCAL_MODULE:= libCalService #服务的库名字
LOCAL_PRELINK_MODULE:= false
include $(BUILD_SHARED_LIBRARY) 
在linux下,若编译生成这个动态库,是不是必须在源码的编译环境下编译啊。在NDK下用ndk-build是否可以编译?谢谢