2个不稳定版本
0.5.0 | 2021年6月8日 |
---|---|
0.4.0 | 2021年6月6日 |
7 in #blobs
11KB
165 行
aosp-missing-blobs
aosp-missing-blobs是一个方便的工具,用于识别AOSP ROM构建中缺失的必需组件(.so文件),并显示哪些现有组件依赖于它们。这对于想要确保没有遗漏任何必需的专有OEM组件的ROM开发者特别有用。
概念
Android中的组件(.so)和编译后的二进制文件需要其他组件才能工作。可以通过检查它们的ELF信息来识别每个组件的依赖关系
$ readelf -d <name_of_blob.so> | grep "\(NEEDED\)" | sed -r "s/.*\[(.*)\]/\1/"
示例(查找libqti_performance.so
的依赖关系)
$ readelf -d libqti_performance.so | grep "\(NEEDED\)" | sed -r "s/.*\[(.*)\]/\1/"
libnativehelper.so
liblog.so
libcutils.so
libutils.so
libbase.so
[email protected]
libhidlbase.so
libhidltransport.so
libqti-perfd-client_system.so
libhwui.so
libc++.so
libc.so
libm.so
libdl.so
从示例中,我们可以看到libqti_performance.so
依赖于libqti-perfd-client_system.so
和vendor.qti.hardware.iop@2.0.so
。
aosp-missing-blobs使用这个想法来识别给定列表中所有组件的依赖关系,并检查这些依赖关系中是否有任何缺失。
安装
Cargo
在设置Rust之后,可以使用cargo
安装
cargo install aosp-missing-blobs
构建
aosp-missing-blobs是用Rust编写的,因此您需要安装Rust才能构建该项目。
在仓库的根目录中执行
$ git clone https://github.com/joshuous/aosp-missing-blobs
$ cd aosp-missing-blobs
$ cargo build --release
$ ./target/release/aosp-missing-blobs
将生成可运行的aosp-missing-blobs
二进制文件。
用法
此程序接受作为参数的包含编译后的二进制文件和组件(.so)的目录列表。
$ aosp-missing-blobs <blob directory1> <blob directory2> <blob directory3> <blob directoryN>
递归搜索组件目录
$ aosp-missing-blobs -r <blob root directory>
示例
假设您已将ROM的系统.img和vendor.img分别提取到~/system
和~/vendor
,然后运行以下命令
$ aosp-missing-blobs ~/system/lib ~/vendor/lib
程序执行以下操作
- 在
~/system/lib
和~/vendor/lib
目录中搜索组件。 - 识别找到的每个组件的依赖关系。
- 检查必需的依赖关系是否存在于
~/system/lib
和~/vendor/lib
中。 - 输出缺失依赖关系的列表和需要它们的现有组件。
根据您的搜索范围有多广,程序可能会错误地标记缺失依赖关系。某些依赖关系可能存在于除了示例中所示之外的其他目录中。包含组件的其他目录包括以下内容
- /system/bin
- /system/lib[64]
- /system/lib[64]/vndk-28
- /system/lib[64]/vndk-sp-28
- /vendor/bin
- /vendor/lib[64]
- /vendor/lib[64]/vndk
- 等。
请注意,您指定的目录作为参数越多,程序运行时间越长!
依赖项
~5–14MB
~151K SLoC