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

相关推荐
来来走走2 小时前
Android开发(kotlin) 开发一个简单天气应用
android·kotlin
SweetCode3 小时前
汉诺塔问题
android·java·数据库
音视频牛哥4 小时前
Android 端构建高性能 RTSP 转 RTMP|轻量级RTSP服务 网关:透传与二次编码深度实践
android·音视频·大牛直播sdk·rtsp转rtmp推送·rtsp转发到rtsp服务器·rtsp转rtmp二次编码推送·rtsp二次编码加水印
方白羽4 小时前
Android 16 (Target 36) 应用适配指南
android·app·客户端
微爱帮监所写信寄信5 小时前
微爱帮监狱寄信写信系统后台PHP框架优化实战手册
android·开发语言·人工智能·网络协议·微信·https·php
私人珍藏库6 小时前
[Android] 无印2.2视频解析去水印工具,支持多个平台 2025.12.29更新
android·app·安卓·工具·软件·音乐·music
雨声不在6 小时前
多进程的多语言切换
android
Yang-Never6 小时前
Android 内存泄漏 -> ViewModel持有Activity/Fragment导致的内存泄漏
android·java·开发语言·kotlin·android studio
Android_xiong_st7 小时前
(原创)Android遍历文件方法walk函数介绍
android