Android.bp 配置文件详解---gatekeeperd

这是一份 Android 系统的 Android.bp 构建配置文件,用于构建 gatekeeperd(门卫守护进程)及其相关组件。以下是详细注释:

bison 复制代码
// Apache 2.0 许可证头部
// 除非法律要求或书面同意,否则按"原样"分发
// 没有任何形式的明示或暗示担保
// 详见许可证中的具体条款

// 声明默认适用的许可证
package {
    default_applicable_licenses: ["Android-Apache-2.0"],
}

// 定义 gatekeeperd 的默认配置
cc_defaults {
    name: "gatekeeperd_defaults",
    cflags: [                     // 编译标志
        "-Wall",                  // 启用所有警告
        "-Wextra",                // 启用额外警告
        "-Werror",                // 将警告视为错误
        "-Wunused",               // 警告未使用的变量
    ],
    srcs: [                       // 源文件
        "gatekeeperd.cpp",        // 主要实现文件
    ],
    defaults: [                   // 继承的默认配置
        "keymint_use_latest_hal_aidl_ndk_shared",  // 使用最新的 KeyMint HAL AIDL NDK
    ],
    shared_libs: [                // 动态链接库依赖
        "libbinder",              // Binder IPC 库
        "libbinder_ndk",          // Binder NDK 库
        "libgatekeeper",          // gatekeeper 库
        "libgsi",                 // 通用系统镜像库
        "liblog",                 // 日志库
        "libhardware",            // 硬件抽象层库
        "libbase",                // Android 基础库
        "libutils",               // 工具库
        "libcrypto",              // 加密库(OpenSSL)
        "libhidlbase",           // HIDL 基础库
        "lib_android_keymaster_keymint_utils",  // KeyMaster/KeyMint 工具库
        "android.hardware.gatekeeper-V1-ndk",   // Gatekeeper HAL NDK
        "android.hardware.gatekeeper@1.0",      // Gatekeeper HAL 1.0
        "libgatekeeper_aidl",     // Gatekeeper AIDL 库(下面定义的)
        "android.security.authorization-ndk",  // 安全授权 NDK
    ],
    static_libs: ["libscrypt_static"],  // 静态链接库:scrypt 加密算法
    include_dirs: ["external/scrypt/lib/crypto"],  // 包含目录
}

// 定义 gatekeeperd 可执行文件
cc_binary {
    name: "gatekeeperd",         // 二进制文件名
    defaults: [
        "gatekeeperd_defaults",  // 继承上面的默认配置
    ],
    srcs: [
        "main.cpp",              // 主函数入口文件
    ],
    init_rc: ["gatekeeperd.rc"], // init 启动脚本
}

// 定义 AIDL 文件组
filegroup {
    name: "gatekeeper_aidl",     // 文件组名
    srcs: [                      // 包含的 AIDL 文件
        "binder/android/service/gatekeeper/IGateKeeperService.aidl",
    ],
    path: "binder",              // 文件所在路径
}

// 定义 Gatekeeper AIDL 共享库
cc_library_shared {
    name: "libgatekeeper_aidl",  // 库名
    srcs: [
        ":gatekeeper_aidl",      // 引用上面的 AIDL 文件组
        "GateKeeperResponse.cpp", // 响应处理实现
    ],
    aidl: {                      // AIDL 编译配置
        export_aidl_headers: true,  // 导出 AIDL 头文件
        include_dirs: [          // AIDL 包含目录
            "system/core/gatekeeperd/binder",
            "frameworks/base/core/java/",
        ],
    },
    export_include_dirs: ["include"],  // 导出的头文件目录
    shared_libs: [               // 动态库依赖
        "libbase",
        "libbinder",
        "libcutils",
        "liblog",
        "libutils",
    ],
    export_shared_lib_headers: [  // 导出的共享库头文件
        "libbinder",
    ],
}

// 定义模糊测试(Fuzzing)目标
cc_fuzz {
    name: "gatekeeperd_service_fuzzer",  // 模糊测试器名称
    defaults: [
        "gatekeeperd_defaults",   // 继承默认配置
        "service_fuzzer_defaults" // 服务模糊测试默认配置
    ],
    srcs: [
        "fuzzer/GateKeeperServiceFuzzer.cpp",  // 模糊测试源文件
    ],
    fuzz_config: {                // 模糊测试配置
        cc: [                     // 联系人邮箱
            "subrahmanyaman@google.com",
            "swillden@google.com",
        ],
    },
}

运行结果分析

由于这是一个 构建配置文件 ,不是可执行脚本,因此不能直接"运行"。它需要由 Android 的构建系统(Soong/Blueprint) 处理:

构建系统处理流程

  1. 解析配置:构建系统读取此文件,创建模块依赖图
  2. 编译组件
    • 生成 libgatekeeper_aidl.so(共享库)
    • 编译 gatekeeperd 可执行文件
    • 编译模糊测试器 gatekeeperd_service_fuzzer
  3. 打包到系统镜像
    • gatekeeperd 和其 .rc 文件会被打包到 /system/bin//system/etc/init/
    • 库文件打包到 /system/lib//vendor/lib/

实际部署后的运行效果

当 Android 系统启动时:

  1. init 进程

    bash 复制代码
    # 读取 gatekeeperd.rc 文件
    service gatekeeperd /system/bin/gatekeeperd
        class main
        user system
        group system
  2. 启动 gatekeeperd

    • 作为一个守护进程运行,提供设备解锁、密码验证等服务
    • 通过 Binder 接口 IGateKeeperService 暴露服务
  3. 功能

    • 处理 PIN/图案/密码验证
    • 管理设备解锁凭证
    • 与 TEE(可信执行环境)或 HSM(硬件安全模块)交互
  4. 模糊测试

    bash 复制代码
    # 可以运行模糊测试器来检测安全漏洞
    adb shell /data/fuzz/arm64/gatekeeperd_service_fuzzer/gatekeeperd_service_fuzzer

关键文件位置

组件 构建输出位置 系统安装位置
gatekeeperd 可执行文件 out/target/product/[device]/system/bin/gatekeeperd /system/bin/gatekeeperd
gatekeeperd.rc 启动脚本 out/target/product/[device]/system/etc/init/gatekeeperd.rc /system/etc/init/gatekeeperd.rc
AIDL 库 out/target/product/[device]/system/lib[64]/libgatekeeper_aidl.so /system/lib[64]/libgatekeeper_aidl.so
模糊测试器 out/target/product/[device]/data/fuzz/[arch]/gatekeeperd_service_fuzzer /data/fuzz/[arch]/gatekeeperd_service_fuzzer/

验证构建成功

bash 复制代码
# 在构建环境中检查
m gatekeeperd libgatekeeper_aidl gatekeeperd_service_fuzzer

# 检查生成的文件
ls -la out/target/product/[device]/system/bin/gatekeeperd
ls -la out/target/product/[device]/system/lib[64]/libgatekeeper_aidl.so

这个配置展示了 Android 安全子系统中一个关键组件的完整构建过程,从核心守护进程到 AIDL 接口层,再到安全测试工具的全套实现。

相关推荐
三少爷的鞋5 分钟前
Android 慢性病之拒绝"带病"上线:为什么 ANR 是必须根除的代码 HP?
android
草莓熊Lotso8 分钟前
Linux 线程深度剖析:线程 ID 本质、地址空间布局与 pthread 源码全解
android·linux·运维·服务器·数据库·c++
私人珍藏库14 分钟前
【Android】Shizuku升级版-Stellar-提高软件权限
android·app·工具·软件·多功能
白毛大侠18 分钟前
# MySQL InnoDB 隔离级别与 MVCC 完全解析
android·数据库·mysql
冬奇Lab11 小时前
MediaPlayer 播放器架构:NuPlayer 的 Source/Decoder/Renderer 三驾马车
android·音视频开发·源码阅读
炸炸鱼.12 小时前
Python 操作 MySQL 数据库
android·数据库·python·adb
用户416596736935514 小时前
nextlib 项目架构与深度技术指南 (Architecture & Technical Master Guide)
android
aq553560014 小时前
Laravel10.x重磅升级,新特性一览
android·java·开发语言
Trouvaille ~15 小时前
【MySQL篇】数据类型:存储数据的基础
android·数据库·mysql·adb·字符集·数据类型·基础入门
2401_8858850416 小时前
开发视频短信接口好开发吗?图文视频短信接口对接教程
android·音视频