当前位置: 首页 > news >正文

网站分析流程做设计需要素材的常用网站有哪些

网站分析流程,做设计需要素材的常用网站有哪些,满版型网站有哪些,郑州航空港建设局网站Android 14之HIDL转AIDL通信 1、interface接口1.1 接口变更1.2 生成hidl2aidl工具1.3 执行hidl2aidl指令1.4 修改aidl的Android.bp文件1.5 创建路径1.6 拷贝生成的aidl到1和current1.7 更新与冻结版本1.8 编译模块接口 2、服务端代码适配hal代码修改2.1 修改Android.bp的hidl依… Android 14之HIDL转AIDL通信 1、interface接口1.1 接口变更1.2 生成hidl2aidl工具1.3 执行hidl2aidl指令1.4 修改aidl的Android.bp文件1.5 创建路径1.6 拷贝生成的aidl到1和current1.7 更新与冻结版本1.8 编译模块接口 2、服务端代码适配hal代码修改2.1 修改Android.bp的hidl依赖2.2 修改头文件依赖2.3 修改服务启动的rc脚本2.4 修改接口函数返回值Return拆分2.5 aidl 服务实现 1、interface接口 1.1 接口变更 google原生的::ndk::ScopedAStatus 已经支持status返回了hal接口理论上不需要再自定义status。所以需要删除掉目前我们HIDL文件里面里所有使用到status的接口。 注意需要用到的返回值不需要删除要保留只需要删除无用的status即可。 例子1 gwm_subscribe(IDiagCallback callback, vecuint16_t didList) generates (GWM_StatusCode status); 修改为 gwm_subscribe(IDiagCallback callback, vecuint16_t didList) ; 并删掉enum GWM_StatusCode 枚举GWM_StatusCode不需要使用的话例子2 gwm_registerCallback(ISwumCallback callback) generates (bool status); 修改为 bool gwm_registerCallback(ISwumCallback callback);例子3: gwm_setCallback(IInformationCallback callback) generates (GWM_StatusCode status, int32_t clientid); 修改为 int gwm_setCallback(in IInformationCallback callback);后续的例子以ILog.hal为例 修改前 sendToServer(String data) generates(boolean result) ; void setCallback(ILogCallback callback); 修改后 boolean sendToServer(in String data); void setCallback(in vendor.mediatek.hardware.log.ILogCallback callback); 1.2 生成hidl2aidl工具 注意需要先执行source和lunch命令 m hidl2aidl -j128 1.3 执行hidl2aidl指令 hidl2aidl -o 要生成的aidl的路径 -r 转换的hidl的路径 hidl_interface name 这里用的命令是 hidl2aidl -o vendor/mediatek/proprietary/hardware/interfaces/log/aidl -r vendor/mediatek/proprietary/hardware/interfaces/log vendor.mediatek.hardware.log1.0 hidl_interface name一般是hidl同级目录下Android.bp文件里面定义的。 1、如果有报错按照提示修改即可。 2、VehicleHAL/wifi/sensor等原生接口除外如VehicleHAL为原生接口需要根据原生接口适配aidl 服务器 3、当执行完上述的hidl2aidl指令后会在-o 对应目录下生成aidl文件和一些translate文件以及Android.bp。 1.4 修改aidl的Android.bp文件 删除translate文件。 会生成如下截图红框所示文件 文件结构 Android.bp: aidl_interface {name: vendor.mediatek.hardware.log,system_ext_specific: true,vendor_available: true,host_supported: true,frozen: true,srcs: [vendor/mediatek/hardware/log/*.aidl],stability: vintf,backend: {cpp: {// FIXME should this be disabled?// prefer NDK backend which can be used anywhere// If you disable this, you also need to delete the C// translate code.enabled: true, },java: {sdk_version: system_current,enabled: true, },},versions_with_info: [{version: 1,imports: [],},], } backend: 服务的后端AIDL支持四种后端分别是C/JAVA/NDK/RUST, 我们要使用NDK谷歌推荐CPP和JAVA后端加上enabled: true。 vendor_available配置参考vndk介绍文档 ILog.aidl package vendor.mediatek.hardware.log;import vendor.mediatek.hardware.log.ILogCallback;VintfStability interface ILog {// Adding return type to method instead of out param boolean success since there is only one return value.boolean sendToServer(in String data);void setCallback(in ILogCallback callback);} ILogCallback.aidl: // FIXME: license file, or use the -l option to generate the files with the header.package vendor.mediatek.hardware.log;VintfStability interface ILogCallback {// Adding return type to method instead of out param boolean success since there is only one return value.boolean callbackToClient(in String data);} 1.5 创建路径 mkdir -p aidl_api/vendor.mediatek.hardware.log cd aidl_api/vendor.mediatek.hardware.log mkdir 1 mkdir current 1.6 拷贝生成的aidl到1和current 我自己本地尝试不拷贝直接进行下一步更新和冻结版本会遇到问题提示文件夹1下面没有文件。如果可以用1.7更新api和冻结api直接生成的请跳过这一步。 1.7 更新与冻结版本 先生成hash文件 croot system/tools/aidl/build/hash_gen.sh vendor/mediatek/proprietary/hardware/interfaces/log/aidl/aidl_api/vendor.mediatek.hardware.log/1 latest-version vendor/mediatek/proprietary/hardware/interfaces/log/aidl/aidl_api/vendor.mediatek.hardware.log/1/.hash //更新api m vendor.mediatek.hardware.log-update-api //执行后生成current的api //冻结api: m vendor.mediatek.hardware.log-freeze-api //执行后生成初始版本号为1的api并且生成.hash文件并将frozen改为true 如果提示version:这个错误需要在Android.bp添加 versions_with_info: [ { version: 1, imports: [], }, ],错误提示 vendor/mediatek/proprietary/hardware/interfaces/log/aidl/Android.bp:3:1: module “vendor.mediatek.hardware.log_interface”: versions: must be set (need to be frozen) because: “this is a release branch - freeze it or set ‘owners:’” 1.8 编译模块接口 先将interface编译通过 mmm vendor/mediatek/proprietary/hardware/interfaces/log/aidl 有错解错 会编译生成jar包还有ndk相关文件 2、服务端代码适配hal代码修改 2.1 修改Android.bp的hidl依赖 去掉hidl依赖库 “libhidlbase”, “libhidltransport”, 添加binder依赖库 “libbinder_ndk”, “libbinder”, 去掉hidl接口模块 vendor.mediatek.hardware.log1.0 添加aidl接口模块 “vendor.mediatek.hardware.lbs-V1-ndk”, 2.2 修改头文件依赖 HIDL的特点是服务端和客户端都引用相同的接口文件即可由编译时工具自动进行展开。这里需要将HIDL的引用该为AIDL的。 将vendor/mediatek/hardware/log/2.0/ILog.h 改为aidl/vendor/mediatek/hardware/log/BnILog.h //BinderNative 在路径gen\include\aidl\vendor\mediatek\hardware\log路径下生成的头文件。 2.3 修改服务启动的rc脚本 service mtk_lbs_service.rc: service mtk_lbs_service /vendor/bin/mtk_lbs_serviceclass haluser systemgroup system gps radio inet2.4 修改接口函数返回值Return拆分 AIDL不再使用Return模板函数直接将其拆分为状态和值状态由 ::ndk::ScopedAStatus返回非void的值由输出参数返回。 之前实现的hidl接口返回类型为Return的需要改成**::ndk::ScopedAStatus**返回值也需要同步修改为ScopedAStatus::ok() 例子 virtual ::android::hardware::Returnbool gwm_registerCallback( const ::android::sp::vendor::gwm::hardware::swum::V2_0::ISwumCallback callback) override; 修改为 virtual ::ndk::ScopedAStatus gwm_registerCallback( const ::android::sp::vendor.gwm.hardware.swum::ISwumCallback callback,bool* _aidl_return) override;状态拆分成了::ndk::ScopedAStatus作为返回值HIDL的GWM_StatusCode 返回值放到了输出参数中使用指针的形式返回。 注意 1、::ndk::ScopedAStatus 依然可以使用isOk的方法。类似于下面这种用法在aidl仍然适用。具体作用就不在这里详细讲了后面有机会更新下。 auto ret mCallback-LocationInfoStructOnChange(locationStruct); if (!ret.isOk()) { ALOGI(%s has error, func); }除了拆分其实也可以直接去参考BnILog.h文件最后头文件的声明为 virtual ScopedAStatus setCallback(const std::shared_ptrILbsCallback callback) override; virtual ScopedAStatus sendToServer(const std::vectoruint8_t data, bool* result) override; cpp文件的实现为 ScopedAStatus AgpsDebugInterfaceLbsService::setCallback(const std::shared_ptrILbsCallback callback) {if (callback nullptr) {LOGE([%s][%s] AgpsDebugInterfaceLbsService setCallback is null !!!, g_ver, mName);return ScopedAStatus::ok();;}BaseLbsService::setCallback(callback);if(mLocalFd ! -1) {LOGE([%s][%s] DebugInterface::setCallback() mLocalFd is not -1, g_ver, mName);return ScopedAStatus::ok();}if (connectToAgpsd3()) {mIsExit false;};return ScopedAStatus::ok(); }ScopedAStatus AgpsDebugInterfaceLbsService::sendToServer(const std::vectoruint8_t data,bool* result) {char buff[MAX_BUFFER_SIZE] {0};int read_len 0;LOGD([%s][%s] DebugInterface::sendToServer() size[%d], g_ver, mName, (int)data.size());if (data.size() 0 || data.size() MAX_BUFFER_SIZE) {LOGE([%s][%s] DebugInterface::sendToServer() data size check fail !, g_ver, mName);*result false;return ScopedAStatus::ok();}covertVector2Array(data, buff);read_len mtk_socket_write(mLocalFd, buff, (int)data.size());if (read_len 0 ) {LOGE([%s][%s] DebugInterface mtk_socket_write() failed, len%d, g_ver, mName, read_len);}// we dont care the error happens in this scenarioUNUSED(read_len);mIsExit true;*result true;return ScopedAStatus::ok(); } 注意在aidl中所有的指针类型都会定义为智能指针std_sharedptr之前hidl定义的强指针sp需要修改为智能指针。 2.5 aidl 服务实现 模板大概是 hidl hal: auto service std::make_uniqueDiag(); //创建对象 configureRpcThreadpool(4, true /* callerWillJoin */); //配置线程池 ALOGD(Diag HAL service starting); status_t status service-registerAsService(); //注册服务 if (status ! OK) {ALOGE(Unable to register Diag HAL service (%d), status); return 1; }ALOGI(Register DiagHAL Service successfully); joinRpcThreadpool(); //加入线程池aidl hal android::ProcessState::initWithDriver(/dev/vndbinder); //使用vndbinder设备节点 ABinderProcess_setThreadPoolMaxThreadCount(1); // vnbinder的线程池独立需要单独配置 ABinderProcess_startThreadPool(); //手动启动线程池 // registering std::shared_ptrDiag service ::ndk::SharedRefBase::makeDiag(); //创建对象 const std::string desc Diag::descriptor /defaults;binder_exception_t err AServiceManager_addService(serviceasBinder().get(), desc.c_str()); //注册服务 CHECK_EQ(err, STATUS_OK); ABinderProcess_joinThreadPool(); //加入线程池最终实现 #define LOG_TAG mtk_lbs_service#include android/binder_process.h #include log/log.h#include mtk_lbs_service.h//namespace aidl::vendor::mediatek::hardware::lbs { //extern int mtk_lbs_main(); //}int main() { Register AIDL servicebinder_exception_t err AServiceManager_addService(service-asBinder().get(), vendor.mediatek.hardware.log.ILog/lbs);if (err ! EX_NONE) {ALOGE(failed to register vendor.mediatek.hardware.log.ILog service, exception: %d, err);return 1;}ABinderProcess_setThreadPoolMaxThreadCount(20);ABinderProcess_startThreadPool();//aidl::vendor::mediatek::hardware::lbs::mtk_lbs_main();ABinderProcess_joinThreadPool();return EXIT_FAILURE; // should not reach } 然后就是编译hal模块编译遇到什么问题改什么。
http://www.dnsts.com.cn/news/13036.html

相关文章:

  • wordpress 多站点 子目录wordpress主题一点就升级
  • html购物网站模板新闻单位网站建设的意义
  • 在线支付网站建设网页布局分析
  • 怎么做网站推广电话wordpress缓存插件比拼
  • 《高性能网站建设指南有什么做照片书的网站
  • 重庆忠县网站建设公司推荐wordpress 链接 弹窗
  • 可视化设计最重要的是确定网站的html网页基本结构
  • windows8风格网站模板外链系统
  • 做生存曲线的网站 域名经常更换
  • 扬州建设网站企企网官网
  • 网站建设风景课程设计报告太原网站开发哪家好
  • 怎么查看网站解析如何创建自己公司的网站
  • 订阅号怎么做微网站wordpress访客统计
  • 网站维护和更新手机网站 wap
  • 1280的界面网站做多宽安龙网站建设
  • 阿里云投数亿资源扶持中小网站迁移服务器科研院所网站建设
  • 个人网站 百度推广照片查询百度图片搜索
  • wordpress时间标签阿里seo排名优化软件
  • 网站开发项目思路做网站前
  • 织梦网站开发反恶意镜像网站
  • seo网站诊断流程优班图搭建网站
  • 毕业生网站建设方案书asp网站报错信息
  • 用哪个语言做网站比较好网页设计制作网站代码
  • 网站前置审批项微网站设计与开发
  • 怎么把百度地图放到网站上优秀设计工作室网站
  • 贵阳花果园网站建设网站建设网站及上传
  • 国家骨干高职院校建设网站营销推广ppt模板
  • 网站编辑软件有哪些网页设计板式要求
  • 幼教资源网网站开发策划书安阳铁保芬
  • 制作网站图片不显示湘潭自助建站系统