Android Q 打通应用层到 HAL 层 -- ( JNI 服务和 AIDL 服务实现)
先回顾一下上一篇关于HIDL的内容:什么是HIDLHIDL全称为HALinterfacedefinitionlanguage(发音为“hide-l”
2023-03-05先回顾一下上一篇关于 HIDL 的内容:
(资料图)
HIDL 全称为HAL interface definition language(发音为“hide-l”)是用于指定 HAL 和其用户之间的接口的一种接口描述语言 (IDL),Android O开始引入了HIDL这个概念。
HIDL和应用层AIDL差不多,AIDL常用于连接App和Framework,HIDL则是用来连接Framework和HAL,AIDL使用Binder通信,HIDL则使用HwBinder通信,他们都是通过Binder驱动完成通信,只不过两个Binder域不一样
为什么需要 HIDL目前Android系统生态是几乎每年google都会出一个Android大版本,而普通手机用户一部手机一般要用两三年,所以你会发现尽管Android系统已经升级到了10,马上11出来了,然后还是有很多用户依然使用的是Android 5,6,7等版本。
对普通用户来说如果不更换手机就很难跟上Android版本,这是因为OEM厂商在同一设备上进行系统升级需要花费时间金钱成本很高,导致他们不愿意升级,成本高的原因是Android O之前Android Framework的升级需要OEM将HAL也进行对应升级,Framework和HAL是一起被编译成system.img,它们存在高耦合。
针对这种情况google在Android O中引入了Treble计划,Treble的目的就是解耦Framework和HAL,就是通过HIDL来实现,Framework不再直接调用HAL,而是通过HIDL来间接使用HAL模块,每个HAL模块都可以对应一个HIDL服务,Framework层通过HwBinder创建HIDL服务。
通过HIDL服务来获取HAL相关模块继而打开HAL下的设备,而最终HAL也从system.img中分离,被编进一个单独的分区vendor.img,从而简化了Android系统升级的影响与难度。
这篇文章要写的是JNI服务和framework层AIDL服务实现,由AIDL服务调用JNI层的服务的函数,为了提供给上层APP使用。
JNI 服务和 AIDL 服务实现
同样我们参照系统其他服务的方式来写,来到frameworks/base/services/core/jni目录下,这下面有许多JNI的服务,创建cpp文件com_android_server_am_HelloService.cpp,为什么要叫这个名字,因为等下我们实现的AIDL服务包名为"com.android.server.am"
#include#include #include #include #include usingandroid::sp;usingandroid::hardware::hello_hidl::V1_0::IHello;namespaceandroid{sp hw_device;staticvoidandroid_server_am_HelloService_nativeInit(JNIEnv*/*env*/,jobject/*clazz*/){ALOGW("hello...android_server_am_HelloService_nativeInit.....");hw_device=IHello::getService();if(hw_device==nullptr){ALOGW("hello...failedtogetIHelloservice");return;}ALOGW("hello...successtogetIHelloservice");}staticjintandroid_server_am_HelloService_nativeAdd(JNIEnv*env,jobject/*clazz*/,jinta,jintb){ALOGW("hello...android_server_am_HelloService_nativeAdd.....");uint32_ttotal=hw_device->addition_hidl(a,b);returnreinterpret_cast (total);}staticconstJNINativeMethodgMethods[]={{"nativeAdd","(II)I",(void*)android_server_am_HelloService_nativeAdd},{"nativeInit","()V",(void*)android_server_am_HelloService_nativeInit},};intregister_android_server_am_HelloService(JNIEnv*env){returnjniRegisterNativeMethods(env,"com/android/server/am/HelloService",gMethods,NELEM(gMethods));}};//namespaceandroid
这个JNI服务中定义两个函数,android_server_am_HelloService_nativeAdd 和android_server_am_HelloService_nativeInit,这两个函数是提供给framework层AIDL服务调用的,添加了一些log方便后面验证,对应等下要实现的AIDL服务中的nativeAdd和nativeInit
android_server_am_HelloService_nativeInit函数作用是获取我们上一篇文章实现的HIDL服务IHello
android_server_am_HelloService_nativeAdd函数作用是调用HIDL服务中定义的addition_hidl函数
JNI服务中的函数想要被framework调用还需要通过register_android_server_am_HelloService函数进行注册,"com/android/server/am/HelloService"这个是等下我们要实现的framework层的AIDL服务
接着需要将这个自定义JNI服务添加到onload.cpp中开机注册,打开frameworks/base/services/core/jni/onload.cpp,添加如下代码:
接着需要修改Android.bp文件,打开frameworks/base/services/core/jni/Android.bp,添加如下代码:
首先到frameworks/base/core/java/android/app/目录下创建IHelloService.aidl文件:
packageandroid.app;interfaceIHelloService{intadd(inta,intb);}想要编译这个文件还需要修改Android.bp,在frameworks/base/Android.bp中添加如下代码:
/**Thisfileisauto-generated.DONOTMODIFY.*/packageandroid.app;publicinterfaceIHelloServiceextendsandroid.os.IInterface{/**DefaultimplementationforIHelloService.*/publicstaticclassDefaultimplementsandroid.app.IHelloService{@Overridepublicintadd(inta,intb)throwsandroid.os.RemoteException{return0;}@Overridepublicandroid.os.IBinderasBinder(){returnnull;}}/**Local-sideIPCimplementationstubclass.*/publicstaticabstractclassStubextendsandroid.os.Binderimplementsandroid.app.IHelloService{privatestaticfinaljava.lang.StringDESCRIPTOR="android.app.IHelloService";/**Constructthestubatattachittotheinterface.*/publicStub(){this.attachInterface(this,DESCRIPTOR);}/***CastanIBinderobjectintoanandroid.app.IHelloServiceinterface,*generatingaproxyifneeded.*/publicstaticandroid.app.IHelloServiceasInterface(android.os.IBinderobj){if((obj==null)){returnnull;}android.os.IInterfaceiin=obj.queryLocalInterface(DESCRIPTOR);if(((iin!=null)&&(iininstanceofandroid.app.IHelloService))){return((android.app.IHelloService)iin);}returnnewandroid.app.IHelloService.Stub.Proxy(obj);}@Overridepublicandroid.os.IBinderasBinder(){returnthis;}/**@hide*/publicstaticjava.lang.StringgetDefaultTransactionName(inttransactionCode){switch(transactionCode){caseTRANSACTION_add:{return"add";}default:{returnnull;}}}/**@hide*/publicjava.lang.StringgetTransactionName(inttransactionCode){returnthis.getDefaultTransactionName(transactionCode);}@OverridepublicbooleanonTransact(intcode,android.os.Parceldata,android.os.Parcelreply,intflags)throwsandroid.os.RemoteException{java.lang.Stringdescriptor=DESCRIPTOR;switch(code){caseINTERFACE_TRANSACTION:{reply.writeString(descriptor);returntrue;}caseTRANSACTION_add:{data.enforceInterface(descriptor);int_arg0;_arg0=data.readInt();int_arg1;_arg1=data.readInt();int_result=this.add(_arg0,_arg1);reply.writeNoException();reply.writeInt(_result);returntrue;}default:{returnsuper.onTransact(code,data,reply,flags);}}}privatestaticclassProxyimplementsandroid.app.IHelloService{privateandroid.os.IBindermRemote;Proxy(android.os.IBinderremote){mRemote=remote;}@Overridepublicandroid.os.IBinderasBinder(){returnmRemote;}publicjava.lang.StringgetInterfaceDescriptor(){returnDESCRIPTOR;}@Overridepublicintadd(inta,intb)throwsandroid.os.RemoteException{android.os.Parcel_data=android.os.Parcel.obtain();android.os.Parcel_reply=android.os.Parcel.obtain();int_result;try{_data.writeInterfaceToken(DESCRIPTOR);_data.writeInt(a);_data.writeInt(b);boolean_status=mRemote.transact(Stub.TRANSACTION_add,_data,_reply,0);if(!_status&&getDefaultImpl()!=null){returngetDefaultImpl().add(a,b);}_reply.readException();_result=_reply.readInt();}finally{_reply.recycle();_data.recycle();}return_result;}publicstaticandroid.app.IHelloServicesDefaultImpl;}staticfinalintTRANSACTION_add=(android.os.IBinder.FIRST_CALL_TRANSACTION+0);publicstaticbooleansetDefaultImpl(android.app.IHelloServiceimpl){if(Stub.Proxy.sDefaultImpl==null&&impl!=null){Stub.Proxy.sDefaultImpl=impl;returntrue;}returnfalse;}publicstaticandroid.app.IHelloServicegetDefaultImpl(){returnStub.Proxy.sDefaultImpl;}}publicintadd(inta,intb)throwsandroid.os.RemoteException;}其实这个文件和我们用Android Studio创建AIDL服务生成的中间文件差不多的,都是统一的AIDL框架:有一个Stub抽象类,继承IBinder,实现IHelloService,还有一个代理类Proxy继承IHelloService,通过asInterface方法来获取
了解了IHelloService.aidl生成的一个中间文件,我们再实现HelloService.java的时候就清晰了,在frameworks/base/services/core/java/com/android/server/am/目录下创建HelloService.java文件:
packagecom.android.server.am;importandroid.app.IHelloService;publicclassHelloServiceextendsIHelloService.Stub{publicHelloService(){android.util.Log.d("dongjiao","StartHelloService...");nativeInit();}@Overridepublicintadd(inta,intb){android.util.Log.d("dongjiao","HelloServiceadd()...a=:"+a+",b=:"+b);returnnativeAdd(a,b);}privatestaticnativevoidnativeInit();privatestaticnativeintnativeAdd(inta,intb);}这个HelloService继承自IHelloService.Stub,它作为Binder的具体实现端,里面定义了两个native方法,这两个方法和之前创建的JNI服务中的那两个函数一一对应,HelloService构造方法中调用nativeInit,add方法提供给外界访问,它里面调用nativeAdd
好了这个AIDL服务已经创建好了,接着我们到SystemServer中去添加开机注册此服务的代码,打开frameworks/base/services/java/com/android/server/SystemServer.java随便在其他某个服务下添加如下代码:
开始进行编译 mmm frameworks/base/
编译成功后需要将/system/framework/下所有文件push进手机 adb push out/target/product/TOKYO_TF_arm64/system/framework/ /system/
另外定义的JIN服务相关代码会被编译到libandroid_servers.so这个so中,还需push这个so adb push out/target/product/TOKYO_TF_arm64/system/lib64/libandroid_servers.so /system/lib64/
重启手机发现了如下错误:
我们发现如下log,这是因为我的HIDL服务还没启动
启动一下前一篇文章实现的HIDL服务:
04-1423:58:58.76092799279E:hello_hidlserviceisinitsuccess…04-1423:58:58.76192799279IServiceManagement:Registeredandroid.hardware.hello_hidl@1.0::IHellodefault(startdelayof52ms)04-1423:58:58.76292799279IServiceManagement:Removingnamespacefromprocessnameandroid.hardware.hello_hidl@1.0-servicetohello_hidl@1.0-service.04-1423:58:58.76292799279Iandroid.hardware.hello_hidl@1.0-service:Registrationcompleteforandroid.hardware.hello_hidl@1.0::IHellodefault.
这一段代表的是HIDL服务的启动注册
04-1423:59:38.881328328IServiceManager:service‘helloService’died04-1423:59:41.5821403714037W:JNI_OnLoad…hello…04-1423:59:41.5941403714037W:register_android_server_am_HelloService…04-1423:59:44.9781403714037Ddongjiao:SystemServer…addService(helloService)…04-1423:59:44.9781403714037Ddongjiao:StartHelloService…04-1423:59:44.9781403714037W:HelloService…nativeInit…04-1423:59:44.9801403714037W:successtogetIHelloservice"
这一段代表AIDL服务的启动注册
可以看到关闭了SELinux权限之后,HIDL和AIDL服务都注册成功了,并且在AIDL服务初始化时也能成功通过JNI服务获取到HIDL服务了,后面如果调用HIDL的addition_hidl函数也应该是很简单了。
其实整个调用逻辑还是比较清晰的,从AIDL到JNI到HIDL,在AIDL服务初始化中调用JNI服务的nativeInit函数,JNI服务的nativeInit函数中获取到HIDL服务,之后就可以随意调用HIDL的函数了。
原文链接: https://blog.csdn.net/qq_34211365/article/details/105642229
先回顾一下上一篇关于HIDL的内容:什么是HIDLHIDL全称为HALinterfacedefinitionlanguage(发音为“hide-l”
2023-03-05
1、号码“95114”规划用于跨省 全国范围内统一使用的客户服务短号码、电信业务接入号码等,由工业和信...
2023-03-05
中新社北京3月4日电(记者李雪峰王恩博)在4日举行的全国政协十四届一次会议首场“委员通道”集体采访活动...
2023-03-05
1、《(文野)五年高考,三年模拟》是连载中的一部衍生类轻小说,作者是凡人的美学。文章到此就分享结束...
2023-03-05
对于系统分析师考试科目是什么这个问题感兴趣的朋友应该很多,这个也是目前大家比较关注的问题,那么下...
2023-03-05
3月2日上午,国网福州供电公司工会举办“茉香送暖爱心春拍”活动,旨在通过春拍活动,在全国“学雷锋日...
2023-03-04
1、2014年11月22日17时许,湖南张家界市永定区大庸桥街道办事处大庸桥社区发生一起爆炸事件,造成13人受伤。文
2023-03-04
是中国建设银行。6283开头是建设银行的公务卡。该卡是为预算单位工作人员量身定制的,用于日常公务支出...
2023-03-04
近几年院线出现了很多方言电影,是个可喜的现象。农村电影大多为小成本制作上不了台面,但却是国产电影...
2023-03-04
泉州网3月4日讯(记者苏凯芳通讯员陈俊萍)路遇绿化带起火,公交车驾驶员王文华二话不说,停车、取灭火...
2023-03-04
1、技术许可是指技术供方以技术许可协定的方式。2、将自己有权处置的某项技术许可技术受方按照合同约定...
2023-03-02
靠“破产营销”续命,负债近300亿:中国女性救不活露华浓,彩妆,中国,美妆,露华浓,欧莱雅,美宝莲,破产营销,revlon
2023-03-02
一、距离检测模块简介距离检测模块是由一组传感器和相关控制电路组成,可以自动检测物体和机器人之间的...
2023-03-02
1、洛阳市花是牡丹花2、牡丹性喜温暖、凉爽、干燥、阳光充足的环境。喜阳光,也耐半阴,耐寒,耐干旱,...
2023-03-02
玉溪新型冠状病毒肺炎疫情:3月2日玉溪疫情最新消息今天数据统计情况通报,截至3月2日02时30分玉溪疫情数...
2023-03-02
塞尔维亚前外长姆尔基奇作者:伊万·姆尔基奇(IvanMrkic),塞尔维亚前外长编译:赵芃2月24日,在乌克...
2023-03-01
1、这本书为都市中热爱美食的你提供了最地道,最经典的法式西餐食谱,每道菜的准备工作,包括食材、烹饪...
2023-03-01
1、:组合物12、我们期待已久的拉锯战终于在10月21日拉开了序幕。3、今天早上,我们兴高采烈地来到学校。...
2023-03-01
之前我们讨论电动车究竟能不能取代燃油车时,一个重要的指标就是其究竟能不能解决里程焦虑,做到长续航...
2023-03-01
1、,copy,老版和柳云龙主演的那个片子,名字不知道啦。2、其余的土匪片就还像个土匪。3、美剧建议看,...
2023-03-01
第一步:领取并填写相关表格申请对象凭户口簿、身份证向户籍所在地街道办事处(镇政府)政务服务中心或相...
2023-03-01
小明是一个年轻有为的人,工作和生活都非常充实。他和父母一起居住,每天都过着愉快而和谐的家庭生活。...
2023-03-01
首先,想要还原魔方,就要先了解它的结构,魔方共6色6面,一般为红、黄、蓝、绿、白、橙6种颜色,每面又...
2023-03-01
1、《CNT悦游(2014年9月刊)》内容简介:CondéNastTraveler是康泰纳仕集团出版的高端旅游杂
2023-03-01
1、病情分析:月经为闭经,分为原发性和继发性。2、原发性闭经是指将来月经,继发性闭经是指过去有过月...
2023-03-01
2月28日,国际滑联公布了2023世界花样滑冰锦标赛参赛名单。中国花滑队缺席女子单人滑比赛,金博洋、张思...
2023-03-01
1、GPS防盗报警器是最先进的防盗设置,除了普通的防盗外,还能在汽车被盗时迅速跟踪汽车位置,从而寻回...
2023-03-01
1、我特首普选特指香港特首普选制度根据十二届全委第十议表决通全委关于香港特别行政区行政官普选问题20...
2023-03-01
北京2月28日电题:为罕见病患者增添生命色彩新华社记者李恒“瓷娃娃”“蝴蝶宝贝”“黏宝宝”……这些罕...
2023-02-28
1、根据2018年第10号台风安比路径图,在内蒙古东南部开鲁减弱退化为温带气旋,经过沪、苏、鲁、冀、津等...
2023-02-28
1、lest大型地基太阳望远镜”是天文学专有名词。2、来自中国天文学名词审定委员会审定发布的天文学专有...
2023-02-28
合康新能:独立董事关于相关事项的事前认可意见
2023-02-28
1、电流是有方向的,都是从正极流向负极。2、而交流电的正负极始终都在变化,因此它的电流方向也一直在...
2023-02-28
1、photodynamic,英语单词,主要用作形容词,作形容词时译为“光动力的,光力学的”。2、。文章到此就分享
2023-02-28
大摩发布研究报告称,予中国电信(00728 HK)“增持”评级,预计股价将于未来60日上升,同时见到更健康的...
2023-02-28
智通财经获悉,2月27日(周一)理想汽车(LI US)公布了2022年第四季度业绩,财报数据显示,第四季度车辆销售收入为
2023-02-28
上证报中国证券网讯(记者张雪)2月27日晚间,奇安信发布2022年年度业绩快报。公告显示,公司实现营业总收...
2023-02-28
1、No 6木之本樱2、小樱虽然是剧中的女主角,但是人家毕竟还是个小孩子,魔力比较弱。尤其是一开始接触...
2023-02-28
1、很高兴为您回答:你可以用快播,也可以去优酷,迅雷,美吻,土豆看,不需下东西,高清大片都有。2、希...
2023-02-28
个人不应跟风囤药,先诊后方、规范就医,让医生来帮助自己应对流感疫情,才是正确的选择。近日,甲流进...
2023-02-28
1、《一千零九十九个项目那个项目适合你》是由周光启创作的一本关于家庭创业项目的书籍。2、。文章到此...
2023-02-28
1、堤丰有百个龙头,最为出名。2、每张口中,暗色的蛇信伸缩吞吐。3、百双骇人的眼里不时喷出烈焰。4、...
2023-02-28
2月27日,秀强股份发布业绩快报,公司2022年1-12月实现营业收入15 02亿元,同比增长3 02%;归属于上市...
2023-02-27
1、养生之道网导读:看似无花却有果,这是很多人对无花果的理解,其实无花果并非没有花,作为一种隐花植...
2023-02-27
1、推荐使用招商银行信用卡。2、1 办卡快,额度高。3、金卡最高额度可达50000元,首年免年费,刷卡达标...
2023-02-27
中国经济网北京2月27日讯达瑞电子(300976 SZ)今日股价下跌,截至收盘报55 10元,跌幅4 65%,总市值52...
2023-02-27
招聘安排1 简历投递截止时间自公告发布至2023年3月3日17:30。2 简历投递及报名应聘毕业生必须在中国...
2023-02-27
1、健康指导:一般对于这种情况的体质,建议先到正规医院咨询中医,跟据中医辨证指导下进行服用为好。2...
2023-02-27
这个周末,“二次方城市”产业园接连举办了“时光记忆”市集和“备婚美学工厂”启幕活动,让这里的人气...
2023-02-27
新华社华沙2月26日电(记者陈琛张章)波兰奥伦石油公司日前说,俄罗斯已停止通过“友谊”输油管道向波兰供...
2023-02-27
直播吧2月27日讯本轮结束的法甲联赛,巴黎圣日耳曼3-0战胜马赛,比赛结束后,巴黎圣日耳曼中场维拉蒂接...
2023-02-27
1、东风汽车集团旗下自主中高端品牌,创立于2009年。2、在东风自主乘用车事业中居于核心地位;东风风神...
2023-02-27
镰刀妹AI智能播报|2月27日长沙天气和明日预报
2023-02-27
1、慢性乙型肝炎是由HBV感染引起的慢性传染病。2、慢性乙型肝炎的主要传播途径是血液传播、母婴传播和性...
2023-02-27
1、《那时花开》是由著名音乐人高晓松执导和编剧,周迅、朴树、夏雨等主演的一部极具探索精神的电影。2...
2023-02-26
据俄罗斯卫星通讯社、塔斯社26日报道,俄总统普京向土耳其总统埃尔多安发去生日贺电,赞扬后者为俄土关...
2023-02-26
1、没有。2、 如果没有限购令,二套房、三套房购房契税都是3%,担负的税费没有区别。3、 房屋交易税...
2023-02-26
1、中等专业学校,简称中专,其招生列入国家统招计划,毕业由省人事厅大中专毕业生就业指导办公室开具的...
2023-02-26
1、用干布将手机擦拭干净,用吹风机或空调扇吹干手机插座。外部的水干了之后,你需要去维修处,把手机拆...
2023-02-26
Tim和qq都是腾讯推出的聊天软件。两者的区别可以从几个方面来说。区别一主界面不一样,qq主界面更个性化...
2023-02-26
1、吴启迪,女,汉族,1947年8月出生于上海,1970年毕业于清华大学通信技术专业,1981年获清华大学自动...
2023-02-26
1、去百度文库,查看完整内容>内容来自用户:蝗和局竞近三年个人工作总结三篇 【导语】马上年底了,很...
2023-02-26
1、宙王,霹雳布袋戏虚拟人物。2、中阴界之主,统掌着生与死的中继站,心机深沉、狂气内敛,但性格阴晴...
2023-02-26
撸袖加油干实现开门红本报讯(记者李佳)为加快释放绿色消费潜力,促进消费升级,结合传统节假日等重要...
2023-02-26
欢迎观看本篇文章,小升来为大家解答以上问题。经典生日祝福短信,适合生日祝福的短息很多人还不知道,...
2023-02-26
1、灿达里斯(TheofanisTzandaris),1993年6月13日出生于希腊索科斯,希腊足球运动员,场上司
2023-02-25
1、中国篮球博物馆(网络版)(ChinaBasketballMuseum,简称CBM)启动新闻发布会于2007年
2023-02-25
(镜观中国·新华社国内新闻照片一周精选)(8)辽宁北票迎来越冬白天鹅
2023-02-25
民间智慧|牛市初期震荡多,牛市,股价,泛舟,民间智慧
2023-02-25
中市龙岗学校汉中市龙岗学校是汉中市龙岗中学及附属小学、附属幼儿园的全称 。该校是汉中市教育局、南...
2023-02-25
人能理解此刻青门门主心里到底掀起什么样的惊涛骇浪!古武者的巅峰就是化境宗师,也就是所谓的宗师之境...
2023-02-25
1、临房网于2007年成立,以鲁南地区经济带为核心,覆盖临沂、日照、枣庄等多个城市两千万人口。2、临房...
2023-02-25
1、始祖鸟的户外鞋更好2、始祖鸟是加拿大顶级户外品牌。它的中文名字是始祖鸟,1989年成立于加拿大不列...
2023-02-25
夏弥来为大家解答以下的问题,陈格,说一说陈格的简介,现在让我们一起来看看吧!1、陈格,女,1985年出...
2023-02-25
1、乌鲁木齐市沙依巴克区人民政府办公室是乌鲁木齐市沙依巴克区人民政府工作部门。2、。文章到此就分享...
2023-02-25
1、一、打开windows设置,在搜索框内,输入:触摸板。2、二、点击触摸板设置,在右边找到相关设置。3、...
2023-02-25
1、使用软件下载网站下载。2、可以百度,【淘宝网下载】,3、点开任何一个下载网站,进去下载。例子如下...
2023-02-24
最美警花张津瑜太惨了,最新厕所6分35秒视频流出?戴副局比不上,厕所,副局,张津瑜,女警花
2023-02-24
1、相信很多朋友都对如何加入城市易酒店感兴趣。让我们一起来看看吧。2、第一步,打开电脑,找到uc浏览...
2023-02-24
76人今日110-105逆转击败灰熊。赛后,76人中锋恩比德接受了媒体采访。谈及自己本场进攻不佳,恩比德表示...
2023-02-24
中国日报2月24日电2月23日,2023年安阳市“融入京津冀共创新未来”招商推介大会在北京举行。现场签约项...
2023-02-24
旷达科技(002516)02月24日在投资者关系平台上答复了投资者关心的问题。
2023-02-24
关于报告的所有内容,公众『行业报告智库』阅读原文或点击菜单获取报告下载查看。摘要:内容电商概念已久...
2023-02-24
1、迷你世界红土有什么用?迷你世界红土在哪挖?迷你世界红土地图种子,很多玩家对迷你世界的红土都非常好...
2023-02-24
俄乌冲突爆发到24日将满一周年。西方国家对资源和谷物出口国俄罗斯实施经济制裁导致的原油和谷物涨价引...
2023-02-23
1,疯狂猜图人物角色白底黑头蓝眼睛两个字伊娃2,疯狂猜图答案是:史迪克3,疯狂猜图这是什么打一电影或...
2023-02-23
1、最近很多人问我什么是微淘客户,怎么做?这里我给大家简单介绍一下,希望能帮到你。微淘宝是通过微信...
2023-02-23
俄罗斯总统普京当地时间23日发表视频讲话,庆祝俄罗斯祖国保卫者日。普京在讲话中指出,现代化的、高效...
2023-02-23
2023年1月份,企业资产证券化产品共备案确认103只,新增备案规模合计1063 66亿元。1月份新增备案规模环...
2023-02-23
之前博士和大家分享了文章《“1000天俱乐部”解散?官方计划为冷门英雄出新皮肤》,讲述了拳头将为一些...
2023-02-23
中国青年网西安2月22日电近日,西安市灞桥区召开全区党建引领基层治理“多网合一”工作现场会,总结、分...
2023-02-22
1、海螺人是指有些人外表可爱安静,看起来和普通人没什么两样,但只要你靠近。2、试着去听他们的声音,...
2023-02-22
2月21日,普洱澜沧古茶股份有限公司(下称“澜沧古茶”)按香港上市规则更新财务报告期,再次递表港交所...
2023-02-22
路面坑坑洼洼泉州网2月22日讯(记者柯丽娟文 图)近日,读者张先生@96339记者热线反映,鲤城区金龙街道...
2023-02-22
北京时间2月22日凌晨,WTA250梅里达站首轮比赛展开争夺,中国小花王欣瑜同资格赛突围的阿瓦涅相相遇。经...
2023-02-22
1、香蕉要进入姐姐身体香蕉要进入姐姐身体漫画《香蕉要进入姐姐身体》讲妹控死宅悠二平静NEET某忙于工作...
2023-02-22
财联社美东时间周二,高盛首席经济学家JanHatzius在接受媒体采访时表示,美国近期的经济数据要比预期强...
2023-02-21
重要判断:120万亿的存款,或有新去向
2023-02-21
1、现发现最古老的日本人人骨、大约属于2万年前至3万年前的冰河期时代。2、一般认为(绳文人)最早于冰...
2023-02-21
*ST亚联最新股东户数2 34万户,低于行业平均水平。公司户均持有流通股份1 25万股;户均流通市值4 39万元。
2023-02-21Copyright © 2015-2022 亚太水产网版权所有 备案号:沪ICP备2020036824号-11 联系邮箱: 562 66 29@qq.com