Android-VNDK
2019-09-27 14:02:34 0 举报
AI智能生成
Android-VNDK
作者其他创作
大纲/内容
如何让vendor模块兼容后续Android版本?
1.Framework保证API/ABI稳定性(被vendor引用的共享库)
2.Framework为vendor保留部分旧版本共享库
Framework共享库
LL-NDK,标准库或Android平台的基础库, vendor和system都会使用
Eligible VNDK(VNDK),通用的工具库,允许存在多个副本
不允许与Framework进行IPC通信
与art虚拟机无关
不会读取特殊(不稳定)的文件或分区
Framework专用库 (FWK-ONLY),如jni库等与具体业务相关的库
Same-Process HAL库
VNDK-SP, google提供给SP-Hals开发使用(本身是framework库), 被framework进程加载多份也不会有什么问题.
SP-HAL由vendor提供,被framework进程加载使用
linker namespace会限制SPHals能访问哪些framework动态库
仅允许依赖LL-NDK和VNDK-SP
允许使用vendor库但不允许直接或间接依赖“白名单”以外的framework库
VNDK版本
构建系统时,vendor依赖的vndk版本(ro.vndk.version)会被写入/vendor/default.prop
VNDK库安装在设备目录: /system/lib[64]/vndk-${ro.vndk.version}
VNDK-SP库安装在设备目录: /system/lib[64]/vndk-sp-${ro.vndk.version}
dynamic linker的配置文件位于: /system/etc/ld.config.${ro.vndk.version}.txt
构建vndk(vndk.enabled=true的库和linker配置文件)
make vndk
BOARD_VNDK_VERSION := current时, make命令也会编译vndk库
生成VNDK VNDK Snapshots(快照)
Linker Namespace
Directories, Rules, and sepolicy
各类库的关系
当某个库被标记vendor_available时,构建系统会构建它两次:
一次为platform编译,编译后安装到/system/lib目录;
一次为vendor编译,编译后安装到/vendor/lib、/system/lib/vndk, 或 /system/lib/vndk-sp目录
当某个库被标记vendor_available时,构建系统会构建它两次:
一次为platform编译,编译后安装到/system/lib目录;
一次为vendor编译,编译后安装到/vendor/lib、/system/lib/vndk, 或 /system/lib/vndk-sp目录
core libs, system使用的主要库,vendor库、vndk库、vndk-sp库等都不能依赖core libs
cc_library {
name: "libThatIsCore",
...
}
cc_library {
name: "libThatIsCore",
...
}
vendor-only libs:vendor进程使用的库,仅存在于vendor分区
cc_library {
name: "libThatIsVendorOnly",
proprietary: true,
...
}
cc_library {
name: "libThatIsVendorOnly",
proprietary: true,
...
}
vendor_available:将部分system库直接拷贝到vendor分区
cc_library {
name: "libThatIsVendorAvailable",
vendor_available: true,
...
}
cc_library {
name: "libThatIsVendorAvailable",
vendor_available: true,
...
}
vndk库,构建系统构建一份库到/lib[64]/vndk-${ro.vndk-version}/中,提供给vendor进程使用
cc_library {
name: "libThatIsVndk",
vendor_available: true,
vndk: { enabled: true,}
...
}
cc_library {
name: "libThatIsVndk",
vendor_available: true,
vndk: { enabled: true,}
...
}
vndk-sp库, 构建系统构建一份库到/lib[64]/vndk-sp-${ro.vndk-version}/中,提供给vendor进程使用
cc_library {
name: "libThatIsVndkSp",
vendor_available: true,
vndk: {enabled: true, support_system_process: true,}
...
}
cc_library {
name: "libThatIsVndkSp",
vendor_available: true,
vndk: {enabled: true, support_system_process: true,}
...
}
llndk库,被system和vendor进程同时使用(vendor进程通过stub库间接使用)
llndk_library {
name: "libThasIsLlndk",
}
llndk_library {
name: "libThasIsLlndk",
}
0 条评论
下一页