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

Android中的系统级共享库

native lib的作用以及使用

  1. 开发时

    • 编译
    • 链接
  2. 运行时

    • 安装路径
    • 加载

Android上面由于分区的限制,libbinder_nkd.so可以帮助vendor分区的native 进程访问system分区的libbinder.so,这个是针对运行时。

对于第三方Native 代码,从编译和链接的层面要使用NDK中提供的libbinder_ndk。从运行时考虑,如果相关代码安装在system分区那么libbinder_ndk也是可以正常链接的,如果安装在vendor分区那么libbinder_ndk也是可以正常链接的。

libbinder_ndk.so

libbinder.so

binder driver

AAOS中的native code无需使用libbinder_ndk,可以直接使用libbinder,比如SurfaceFlinger。


libnativewindow.so定义标准接口
libgui.so提供具体实现

第三方native 应用

libnativewindow.so

libgui.so

SurfaceFlinger


Android中的系统级共享库

这里只总结了system分区的系统级共享库,system_ext、vendor和product分区内的可以类比,具体库因项目而异,因为都是OEM或者Vendor开发的。

1. Java 系统级共享库

安装条件

  1. 要在mk脚本的PRODUCT_PACKAGES中列出,这样才会被编译到。
    比如build/make/target/product/base_system.mk中的:

    PRODUCT_PACKAGES += \ framework-graphics \ framework-location \ framework-minus-apex \
  2. Android.bp或Android.mk中要配置相关属性

    编译脚本属性功能
    installabletrue标记为可安装到系统
    sdk_version“system_current”使用系统级SDK
    visibility适当范围控制模块可见性

    min_sdk_version 和 visibility是可选的

    比如:

    java_library { name: "framework-minus-apex", defaults: ["framework-minus-apex-defaults"], installable: true, // For backwards compatibility. stem: "framework", visibility: [ "//frameworks/base", // TODO(b/147128803) remove the below lines "//frameworks/base/apex/blobstore/framework", "//frameworks/base/apex/jobscheduler/framework", "//frameworks/base/packages/Tethering/tests/unit", "//packages/modules/Connectivity/Tethering/tests/unit", ], } java_defaults { name: "framework-minus-apex-defaults", ... sdk_version: "core_platform", ... }

常见的Java系统级共享库

系统级Java共享库安装在system/framework目录下,下面是几个常用的:

库名称功能
framework.jarframework核心库
framework-res.jarframework资源库
framework-graphic.jargraphic相关的库
services.jar系统服务相关的库
android.car.jarAndroid Car相关
uiinput.jarinput相关
telephony-common.jartelephony相关

2. native系统级共享库

对第三方的native开发,NDK可以辅助编译和链接;另外对于Android 14和Android 8的Android开发,需要了解VNDK。

安装条件

  1. 要在mk脚本的PRODUCT_PACKAGES中列出,这样才会被编译到。
    比如build/make/target/product/base_system.mk中的:
    PRODUCT_PACKAGES += \ libEGL \ libgui \ libinput \ libui \
  2. 满足下面条件中的一种:
    • 显示要求安装
      在源码中未发现installable: true的native 系统共享库。

      cc_library_shared { ... installable: true ... }

      or

      cc_library { ... installable: true ... }
    • 被另一个需要安装的模块通过shared_libsstatic_libs等属性所依赖
      比如 libinput.so

    • 是VNDK库
      比如 libgui.so

      cc_library_shared { name: "libgui", vendor_available: true, vndk: { enabled: true, private: true, }, ...
    • NDK 库
      比如 libvulkan.so

      ndk_library { name: "libvulkan", symbol_file: "libvulkan.map.txt", first_version: "24", unversioned_until: "current", export_header_libs: [ "ndk_vulkan_headers", ], } cc_library_shared { name: "libvulkan", llndk: { symbol_file: "libvulkan.map.txt", export_llndk_headers: [ "vulkan_headers", ], } ... }

安装的native系统级共享库(小部分):

库名称功能
libc.soC 标准库实现
libdl.so动态链接器接口
libbinder.soBinder核心库
libbinder_ndkBinder NDK库(LL-NDK)
libinput.so输入系统的库
libinputflinger.soinputflinger的实现库
libgui.so实现了BLSTBufferQueue等
libui.so有Gralloc等,用于访问Gralloc和mapper的HAL实现
libEGLEGL实现
libGLESv3openGLES API实现
libvulkan.soVulkan API 实现
http://www.jsqmd.com/news/475277/

相关文章:

  • 终极Upspin服务器部署指南:5步搭建个人云存储系统
  • Bacon.js终极构建和打包指南:从源码到生产环境的完整教程
  • 如何在没有网络时运行Kubernetes策略检查:Datree终极离线模式指南
  • Node-Config 高级用法:多实例配置与子模块配置管理终极指南
  • Rustfmt终极指南:解决代码格式化中的10个常见问题
  • Bookshelf.js序列化与反序列化终极指南:掌握数据转换的艺术
  • Afero与标准库io/fs对比:Go文件系统抽象终极选择指南
  • Beehive故障排除终极指南:15个常见问题与快速解决方案
  • 终极指南:如何在C++项目中快速集成Snappy压缩库
  • 终极React源码构建与调试:快速搭建just-react开发环境完整指南
  • 终极指南:Node.js配置不变性原理——为什么配置对象必须不可变?
  • 10个node-config环境变量配置技巧:安全高效管理敏感信息
  • 终极跨端适配指南:Ant Design Landing如何实现PC与移动端完美统一
  • 如何使用Gorilla构建智能空气质量监测与污染预警系统
  • 终极彩虹文本生成工具:lolcat Ruby gem完全指南
  • 前端GitHub终极指南:如何从零搭建个人技术成长体系
  • Bedrock性能优化终极指南:10个技巧让你的WordPress网站快如闪电
  • 2026年评价高的数控折弯机模具厂家推荐:高精度折弯机模具厂家实力参考 - 品牌宣传支持者
  • Apache OpenWhisk测试完整指南:从单元测试到性能测试的终极策略
  • 终极指南:如何10分钟掌握Code Surfer创建专业代码幻灯片
  • ProcessHacker内存映射分析:掌握进程如何高效使用系统内存的终极指南
  • 2026年靠谱的折弯模具厂家推荐:液压折弯模具人气实力厂商推荐 - 品牌宣传支持者
  • async-http-client配置外部化终极指南:环境变量与配置文件集成详解
  • mmdetection模型解释性研究:注意力权重分析的终极指南
  • OCRmyPDF多语言OCR实践:同时识别英语、中文和日语的完整指南
  • Go-callvis终极指南:5种高级过滤与分组策略深度解析
  • 2026年靠谱的导电塑料母粒厂家推荐:导电塑料配方/防静电导电塑料厂家实力与用户口碑参考 - 品牌宣传支持者
  • Bookshelf.js钩子函数终极指南:掌握beforeSave、afterFetch等生命周期方法的实战技巧
  • Spring Cloud Contract 终极指南:构建 Pig 系统契约测试的完整实践
  • 终极指南:如何使用Prisma与gRPC构建高效微服务API通信解决方案