type
status
date
slug
summary
tags
category
icon
password
C/C++是一种非常古老的编程语言,在大型项目开发管理过程中,单靠MAKE,CMAKE等工具已经不满足需求了,因此催生出了各种个样的构建工具,比如Google自家的GN,Bazel等,还有CMake,XMake,Vcpkg等.工具虽然多种多样,但是要解决问题是一样的,思路也大同小异.
从Android 7.0开始,ASOP开始引入Soong构建系统,用来替换之前的Make. Soong使用bp文件来描述构建:
cc_library_shared { name: “libxmlrpc++”, rtti: true, cppflags: [ “-Wall”, “-Werror”, “-fexceptions”, ], export_include_dirs: [“src”], srcs: [“src/**/*.cpp”], target: { darwin: { enabled: false, }, }, }
这个语法和Google的GN,Bazel有点像.

Android.bp 文件格式

bp文件中不包含任何条件语句和控制语句,所有复杂的问题都由Go编写逻辑处理.

模块/Module

Android.bp中的模块都以模块类型开头,模块类型有很多,具体的参考Soong模块类型.
cc_binary { name: "gzip", srcs: ["src/test/minigzip.c"], shared_libs: ["libz"], stl: "none", }
每个模块下都必须有一个唯一的name属性,不同的模块类型下面的属性各不相同,还比价灵活.后面总结下一些常见的模块和它的属性.

C++

对于C++模块来说,我们一般关注三种类型:
  • cc_binary 即二进制执行文件
    • cc_binary { name: "android.hardware.biometrics.fingerprint@2.1-service", defaults: ["hidl_defaults"], init_rc: ["android.hardware.biometrics.fingerprint@2.1-service.rc"], vintf_fragments: ["android.hardware.biometrics.fingerprint@2.1-service.xml"], vendor: true, relative_install_path: "hw", srcs: [ "BiometricsFingerprint.cpp", "service.cpp", ], shared_libs: [ "libcutils", "liblog", "libhidlbase", "libhardware", "libutils", "android.hardware.biometrics.fingerprint@2.1", ], }
      srcs: 表示模块包含的源文件 init_rc : 表示如果该模块被安装,这些rc配置文件也会被安装 shared_lib : 表示会被链接到该模块的动态链接库 vendor: 模块是否与特定的SOC有关 relative_install_path: 安装到默认安装目录的子目录
  • cc_library_shared 动态链接库
  • cc_library_static 静态链接库

java

  • android_app
  • java_library

默认模块

默认模块可用于在多个模块中重复使用相同的属性。例如:
cc_defaults { name: "gzip_defaults", shared_libs: ["libz"], stl: "none", } cc_binary { name: "gzip", defaults: ["gzip_defaults"], srcs: ["src/test/minigzip.c"], }

预编译的模块

某些预编译的模块name与源码中模块的name相同.

总结

  1. 遇到不清楚的属性,模块类型,直接查文档就行
APK安装流程分析-普通APP的安装AOSP的编译
姜康
姜康
一个软件工程师
公告
type
status
date
slug
summary
tags
category
icon
password
🎉博客网站重新制作了🎉
👏欢迎更新体验👏