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 接口层,再到安全测试工具的全套实现。

相关推荐
Kapaseker4 分钟前
为什么 Java 的数组需要 new 出来
android·java·kotlin
黄林晴19 分钟前
颠覆开发!Google AI Studio 一句话生成原生 Android App
android·google io
恋猫de小郭31 分钟前
Flutter 3.44 发布啦,超级大版本更新!!!
android·flutter·ios
zb2006412037 分钟前
Laravel10.x重磅升级:新特性全解析
android
2601_9574188044 分钟前
深入解析Android相机有线连接:PTP与MTP协议栈实现原理与实践
android·数码相机·智能手机
努力努力再努力wz1 小时前
【QT入门系列】QWidget 六大常用属性详解:windowOpacity、cursor、font、focus、toolTip 与 styleSheet
android·开发语言·数据结构·c++·qt·mysql·算法
撩得Android一次心动1 小时前
C语言基础笔记3【个人用】
android·c语言·开发语言·笔记
小离a_a1 小时前
uniapp小程序封装圆环显示比例数据
android·小程序·uni-app
三少爷的鞋1 小时前
Android 面试系列:runBlocking 到底该在哪用?
android
DogDaoDao9 小时前
Android 硬件编码器参数完全指南:MediaCodec 深度解析
android·音视频·视频编解码·h264·硬编码·视频直播·mediacodec