#blobs #required #identify #rom #show #builds #depend

bin+lib aosp-missing-blobs

一个用于识别AOSP ROM构建中缺失的必需组件(.so文件)的工具,并显示哪些现有组件依赖于它们

2个不稳定版本

0.5.0 2021年6月8日
0.4.0 2021年6月6日

7 in #blobs

MIT许可证

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.sovendor.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

程序执行以下操作

  1. ~/system/lib~/vendor/lib目录中搜索组件。
  2. 识别找到的每个组件的依赖关系。
  3. 检查必需的依赖关系是否存在于~/system/lib~/vendor/lib中。
  4. 输出缺失依赖关系的列表和需要它们的现有组件。

根据您的搜索范围有多广,程序可能会错误地标记缺失依赖关系。某些依赖关系可能存在于除了示例中所示之外的其他目录中。包含组件的其他目录包括以下内容

  • /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