国产在线做a视频网站,简单网页制作素材,网站建设 加强宣传,网络营销心得体会300字从Android 8.0之后#xff0c;Android 引入Treble机制#xff0c;主要是为了解决目前Android 版本之间升级麻烦的问题#xff0c;将OEM适配的部分vendor与google 对android 大框架升级的部分system部分做了分离#xff0c;一旦适配了一个版本的vendor信息之后#xff0c;之… 从Android 8.0之后Android 引入Treble机制主要是为了解决目前Android 版本之间升级麻烦的问题将OEM适配的部分vendor与google 对android 大框架升级的部分system部分做了分离一旦适配了一个版本的vendor信息之后之后的版本再进行升级时直接升级system即可这个就不会给OEM厂商升级带来太大的工作量直接升级最新功能可以解决目前市面上Android版本过来凌乱的问题。 首先Treble机制在Vendor分区中有两种模式一个编译成so库供System分区的进程和应用直接加载调用两者在同一个进程中这种叫直通式 HAL(passthrough)模式 另外一种是直接编译成一个daemon可运行的服务然后System分区的进程通过HwBinder的IPC通信方式来调用两者在二个独立的进程中这种称为绑定式HAL(Binderized )模式。 本文主要讲的是HAL(Binderized )模式。
一、main函数入口
/hardware/interface/camera/provider/2.4/default/service.cpp 主要就是defaultPassthroughServiceImplemention这个函数虽然名字是passthrough其实并不是上面说的直通式的。 二、LegacySupport
/system/libhidl.transport/include/hidl/LegacySupport.h
/system/libhidl.transport/LegacySupport.cpp
defaultPassthroughServiceImplemention的具体实现就在这两个文件里面了 三、ServiceManagement
/system/libhidl.transport/ServiceManagement.cpp
主要逻辑都在这个文件里面 getRawServiceInternal 的本质就是创建CameraProvider对象返回的IBase就是CameraProvider创建完之后将其注册到系统服务由ServiceManager管理 上面这些代码的作用就是到 /system/lib/hw 或者 /vendor/lib/hw 或者 /odm/lib/hw 这些目录下去找动态库找什么样的动态库呢就是根据服务的包名。
上面的fqName就是 ICameraProvider::descriptor 这要就是这段解析服务名去找库名个人感觉很不友好库名必须要和代码逻辑一致sys就是找函数符号了其实就是CameraProvider的构造函数 构造CameraProvider对象也就是IBase service创建好之后就通过回调注册到ServiceManager了不做深入分析了 四、回到ICameraProvider
/hardware/interface/camera/provider/2.4/default CameraProvider的构造大概就这么多至于CameraDeviceCameraSession这些都是通过CameraProvider创建的 另外服务还是需要在manifest里面注册的