公司网站规划案例,怎么做网站营销,垡头网站建设,重庆建设工程信息网怎么查证书接上回#xff0c;继续第三种方式#xff0c;是手动生成 service binder 的方法,项目结构 1#xff0c;编译aidl
aidl 文件保持不变#xff0c;如何生成Bn和Bp 文件呢。
aidl -I ./libserviceaidl/aidl -h ./ -o ./ --langcpp libserviceaidl/aidl/com/test/IService.a…书接上回继续第三种方式是手动生成 service binder 的方法,项目结构 1编译aidl
aidl 文件保持不变如何生成Bn和Bp 文件呢。
aidl -I ./libserviceaidl/aidl -h ./ -o ./ --langcpp libserviceaidl/aidl/com/test/IService.aidl
aidl -I ./libserviceaidl/aidl -h ./ -o ./ --langcpp libserviceaidl/aidl/com/test/IServiceCallback.aidl -I aidi 文件目录 -h头文件生成路径 -o cpp文件存放路径 2Native service 差别不大
#define LOG_TAG testservverfirst
#include log/log.h#include unistd.h
#include stdlib.h
#include utils/RefBase.h
#include utils/Log.h
#include binder/TextOutput.h
#include binder/IInterface.h
#include binder/IBinder.h
#include binder/ProcessState.h
#include binder/IServiceManager.h
#include binder/IPCThreadState.h
#include termios.h
#include utils/String16.h
#include com/test/BnService.h
#include com/test/BnServiceCallback.husing namespace std;
using namespace android;class TestService : public com::test::BnService
{public:TestService(){}binder::Status nativecall(int i) {ALOGI(server nativecall function is running %d,i);if(mycallback ! nullptr){mycallback-onEventString(4,String16(callbacksuccuess));}return binder::Status();}binder::Status callMcu(int32_t file,const vectoruint8_t type, int32_t* _aidl_return){*_aidl_return 1;ALOGI(server callMcu function is running _aidl_return,*_aidl_return);return binder::Status();}binder::Status call(int32_t type){ALOGI(server call function is running call %d,type);return binder::Status();}// 实现回调注册binder::Status registerCallback(const spcom::test::IServiceCallback callback){mycallback callback;return binder::Status();}private:sp::com::test::IServiceCallback mycallback;};int main(int argc, char const *argv[])
{ALOGD(Server is runing);defaultServiceManager()-addService(String16(TestService), new TestService());ProcessState::self()-startThreadPool();IPCThreadState::self()-joinThreadPool();return 0;
}C 调用前面有介绍最后补充下java 的调用方式。
3Java 调用
try {Class? clazz Class.forName(android.os.ServiceManager);Method method clazz.getMethod(getService,String.class);IBinder binder (IBinder) method.invoke(null,TestService);if (binder ! null){IService iservice IService.Stub.asInterface(binder);// 千万不要忘记注册iservice.registerCallback(mycallback);iservice.call(1);}
} catch (ClassNotFoundException | NoSuchMethodException e) {e.printStackTrace();
} catch (IllegalAccessException e) {e.printStackTrace();
} catch (InvocationTargetException e) {e.printStackTrace();
} catch (RemoteException e) {e.printStackTrace();
}或者系统里面 IService.Stub.asInterface(ServiceManager.getService(TestService)); 参考
[Android AIDL系列 1] 手动编译aidl文件生成Java、C[android]、C[ndk]、Rust接口_aidl c-CSDN博客