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中的:

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

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

    min_sdk_version 和 visibility是可选的

    比如:

    mk 复制代码
     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.jar framework核心库
framework-res.jar framework资源库
framework-graphic.jar graphic相关的库
services.jar 系统服务相关的库
android.car.jar Android Car相关
uiinput.jar input相关
telephony-common.jar telephony相关

2. native系统级共享库

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

安装条件

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

    mk 复制代码
    PRODUCT_PACKAGES += \ 
    libEGL \
    libgui \
    libinput \
    libui \
  2. 满足下面条件中的一种:

    • 显示要求安装

      在源码中未发现installable: true的native 系统共享库。

      mk 复制代码
      cc_library_shared {
          ...
          installable: true
          ...
      }

      or

      mk 复制代码
      cc_library {
          ...
          installable: true
          ...
      }
    • 被另一个需要安装的模块通过shared_libsstatic_libs等属性所依赖

      比如 libinput.so

    • 是VNDK库

      比如 libgui.so

      mk 复制代码
      cc_library_shared {
      name: "libgui",
      vendor_available: true,
      vndk: {
          enabled: true,
          private: true,
      },
      ...
    • NDK 库

      比如 libvulkan.so

      mk 复制代码
      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.so C 标准库实现
libdl.so 动态链接器接口
libbinder.so Binder核心库
libbinder_ndk Binder NDK库(LL-NDK)
libinput.so 输入系统的库
libinputflinger.so inputflinger的实现库
libgui.so 实现了BLSTBufferQueue等
libui.so 有Gralloc等,用于访问Gralloc和mapper的HAL实现
libEGL EGL实现
libGLESv3 openGLES API实现
libvulkan.so Vulkan API 实现
相关推荐
私人珍藏库5 小时前
[Android] 会计快题库 -财会职称考试刷题学习
android·人工智能·学习·app·软件·多功能
安卓修改大师10 小时前
安卓修改大师 vs MT管理器:反编译工具终极对决与全景解析
android·人工智能·机器翻译
程序员小八77711 小时前
从 0 学习 MySQL 索引——7 大核心精讲
android·学习·mysql
雅客李12 小时前
2026云手机低价机型实测 安卓云手机踩坑测评报告
android·智能手机
蓝速科技13 小时前
蓝速科技鸿蒙广告机替代安卓实测:信创系统下的性能与边界评估
android·科技·harmonyos
雅客李13 小时前
2026云手机高负载压力测评 安卓云手机多开实测数据
android·智能手机·php
千里马学框架15 小时前
google官方Perfetto 中使用 AI相关skill
android·人工智能·ai·framework·perfetto·性能·skill
zhangphil16 小时前
Android RecyclerView图像类ViewHolder离屏缓存数量直接增加Java/View对象内存,间接增加Graphics/GL内存
android
众少成多积小致巨17 小时前
Android C++ 编码规范指南
android·c++·google
雅客李18 小时前
2026云手机旗舰机型评测 安卓云手机游戏帧率实测
android·智能手机