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

相关推荐
方白羽13 小时前
Android Gradle 缓存与文件目录深度解析
android·gradle·android studio
曲幽17 小时前
Termux里的二进制和脚本,到底怎么运行才不踩坑?Termux-service 保活妙招!
android·termux·nohup·services·wake-lock
plainGeekDev17 小时前
单例模式 → object 声明
android·java·kotlin
程序员陆业聪18 小时前
读者点单·03|Compose 与传统 View 混用的 12 个真实坑
android
程序员陆业聪18 小时前
读者点单·02|Android 启动优化实战:Trace 抓取→Application 编排→冷启动全流程拆解
android
Coffeeee18 小时前
帮你快速理解AI Agent之我想招个Android实习生
android·人工智能·agent
恋猫de小郭19 小时前
苹果 AirPods 协议,Android 也可以使用完整版 AirPods 能力
android·前端·flutter
黄林晴20 小时前
告别无效重建:Gradle 9.6.0 解决 CI 构建缓存失效痛点告别无效重建:Gradle 9.6.0 解决 CI 建筑缓存失效痛点
android·gradle
张风捷特烈20 小时前
Flutter 类库大揭秘#01 | path_provider架构与设计
android·flutter
_阿南_1 天前
Android文件读写和分享总结
android