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 实现
相关推荐
huwuhang12 小时前
Winkawaks街机游戏模拟器整合ROM版 1.65 汉化修正完整版 2026.03.30
android·游戏·游戏机
yitian_hm12 小时前
MySQL主从复制与读写分离实战指南
android·mysql·adb
NEGl DRYN13 小时前
Plugin ‘mysql_native_password‘ is not loaded`
android·数据库·mysql
Derrick__113 小时前
Android混淆和加密技术
android·jvm·python
sunwenjian88614 小时前
MySQL加减间隔时间函数DATE_ADD和DATE_SUB的详解
android·数据库·mysql
ictI CABL14 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
放学以后Nicetry16 小时前
Android SELinux 指南:从基本概念到实战修复
android
CCIE-Yasuo16 小时前
《永恒战士2-无双战神》无限金币版(提供apk下载)安卓Android逆向记录学习-Deepseek-AI辅助
android·java·学习·游戏
jzlhll12318 小时前
kotlin flow去重distinctUntilChanged vs distinctUntilChangedBy
android·开发语言·kotlin
渡我白衣18 小时前
【MySQL基础】(3):MySQL库与表的操作
android·数据库·人工智能·深度学习·神经网络·mysql·adb