Android Android.bp 预编译/集成三方so 二进制 rc etc 配置文件等

2,073 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

现在大多数项目需要集成三方的so, 二进制, rc, etc, 配置文件,ko等,下面的方法基本可以覆盖,备用

语法参考

语法参考谷歌官方的语法详细说明官方链接

实例

预编译集成二进制文件/bin 和启动rc

  • 源文件 vendor/bin/hw/android.hardware.configstore@1.1-service
  • rc文件 android.hardware.configstore@1.1-service.rc
  • proprietary: 是否私有,等价与vendor属性
  • vendor 是否放到vendor/bin目录(属于vendor分区)
  • relative_install_path 安装的相对路径(既是指定安装路径,vendor 为true bin会安装到/vendor/bin,指定了相对安装路径(相对/vendor/bin)后就会放到指定路径,本例子就会放到/vendor/bin/hw)
  • required 依赖的module name
  • strip 预编译集成 bin和 so 此属性必须配置 none为trtue
  • init_rc 此bin所需要的启动rc,如果不需要可以去掉此属性
cc_prebuilt_binary {
    name: "android.hardware.configstore@1.1-service",
    proprietary: true,
    vendor: true,
    required: ["configstore@1.1.policy"],
    relative_install_path: "hw",
    strip: {
        none: true,
    },
    srcs:  ["vendor/bin/hw/android.hardware.configstore@1.1-service"],
    init_rc: ["android.hardware.configstore@1.1-service.rc"],
}

预编译集成配置文件

  • Android 10 开始Android.bp 才支持集成此类文件

  • sub_dir 放置到etc的子文件夹

  • vendor 放到vendor分区(此例子预编译etc会安装到/vendor/etc)

 prebuilt_etc {
     name: "configstore@1.1.policy",
     vendor: true,
     srcs: ["seccomp_policy/configstore@1.1-arm64.policy"],
     sub_dir: "seccomp_policy",
 }

预编译集成动态库 so

  • vendor_available vendor是否可用,设置为true,则system vendor分区各自安装一份
  • multilib 指定32或者64位的原始文件
  • compile_multilib 预编译32 64 还是都要
  • vndk 是否使能VNDK
  • export_include_dirs 导出的头文件路径
  • shared_libs 指定依赖的动态库
  • export_shared_lib_headers 导出的头文件库
cc_prebuilt_library_shared {
    name: "android.hardware.configstore-utils",
    vendor_available: true,
    vndk: {
        enabled: true,
    },
    strip: {
        none: true,
    },
    multilib: {
        lib64: {
            srcs: ["system/lib64/android.hardware.configstore-utils.so"],
        },
        lib32: {
            srcs: ["system/lib/android.hardware.configstore-utils.so"],
        },
    },
    compile_multilib: "both",
    export_include_dirs: ["include"],
    shared_libs: [
        "android.hardware.configstore@1.0",
        "android.hardware.configstore@1.1",
        "libbase",
        "libhidlbase"
    ],
    export_shared_lib_headers: [
        "android.hardware.configstore@1.0",
        "android.hardware.configstore@1.1",
        "libbase",
        "libhidlbase"
    ],
}