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 实现
相关推荐
2501_915909063 小时前
深入解析Mock.js:功能、应用及实战案例,提升前端开发效率
android·ios·小程序·https·uni-app·iphone·webview
流星白龙5 小时前
【MySQL高阶】21.撤销表空间,撤销日志
android·mysql·adb
我命由我123456 小时前
Android 开发,FragmentPagerAdapter 的 isViewFromObject 方法问题
android·java-ee·kotlin·android studio·android jetpack·android-studio·android runtime
weiggle6 小时前
第五篇:Modifier 解析——链式调用的艺术
android
awu的Android笔记6 小时前
Android 弱网模拟:别只会用均匀分布——三种延迟模型和两种丢包模型的原理与实现
android·tcp/ip
sensor_WU7 小时前
【Delphi】 开发 android 升级模块硬核实现
android·delphi android·android 升级·apk升级 delphi
帅次7 小时前
Kotlin MVVM 实战入门:从分层到状态闭环
android·kotlin·android studio·android jetpack
YF02117 小时前
Android BLE 信号强度获取与 底层原理深度解析
android·蓝牙
随遇丿而安7 小时前
第7周:RecyclerView 高级功能与列表硬核优化
android
qq3621967057 小时前
手机App下载安装完全指南:2026最新教程(Android & iOS)
android·ios·智能手机