10、Android.bp文件介绍

  1. 什么是 Android.bp 文件?
    Android.bp 文件是 Android 构建系统的一部分,用于定义模块的构建逻辑。它采用 JSON 类似的语法,简单、结构化,可读性更强。构建系统会根据这些规则生成需要的目标文件。
    主要功能:
  • 定义模块类型(例如应用程序、库、工具等)。
  • 描述模块依赖关系。
  • 指定源文件、标志和输出路径。
  1. Android.bp 文件的语法基础
    2.1. 基本结构

    模块类型 {
         属性名1: "值1",
         属性名2: ["值2", "值3"],
     }
    

2.2. 常见数据类型
字符串: 用于表示路径或模块名称,使用双引号。

  name: "MyModule"

列表: 用于存储多个值,用方括号括起。

  srcs: ["file1.c", "file2.c"]

布尔值: true 或 false,用来表示开关。

 enabled: true
  1. 常见模块类型
    3.1. cc_library_shared
    定义共享库模块(.so 文件)。

    cc_library_shared {
        name: "mylib",
        srcs: ["mylib.cpp"],
        shared_libs: ["liblog"],  # 依赖其他共享库
        include_dirs: ["include"], # 指定头文件目录
    

    }

3.2. cc_library_static
定义静态库模块(.a 文件)。

   cc_library_static {
       name: "mylib_static",
       srcs: ["mylib_static.cpp"],
  }

3.3. cc_binary
定义可执行文件模块。

  cc_binary {
      name: "mytool",
      srcs: ["main.cpp"],
      shared_libs: ["liblog"], # 依赖共享库
  }

3.4. android_app
定义 APK 模块。

  android_app {
      name: "MyApp",
      srcs: ["src/**/*.java"],
      manifest: "AndroidManifest.xml",
      static_libs: ["mylib"],
 }
  1. 关键属性解析
    4.1. name
    模块的唯一名称,必须全局唯一。

    name: "MyModule"
    

4.2. srcs
指定源文件列表,可以包含 C/C++ 文件、Java 文件等。

   srcs: ["file1.cpp", "file2.c"]

4.3. shared_libs 和 static_libs
shared_libs: 声明依赖的共享库(.so 文件)。
static_libs: 声明依赖的静态库(.a 文件)。

 shared_libs: ["liblog", "libc"],
 static_libs: ["libmylib"],

4.4. include_dirs
指定头文件搜索路径。

 include_dirs: ["include"],

4.5. cflags 和 ldflags
cflags: 传递给编译器的标志(如优化或警告标志)。
ldflags: 传递给链接器的标志。

 cflags: ["-Wall", "-O2"],
 ldflags: ["-lm"],

5.上节案例改造成Android.bp编译
改造static_lib下的Android.bp:

 cc_library_static {
     name: "libhello_static",
     srcs: ["hello_static.cpp"],
 }

改造shared_lib下的Android.bp:

 cc_library_shared {
     name: "libhello_shared",
     srcs: ["hello_shared.cpp"],
 }

改造executable下的Android.bp:

  cc_binary {
      name: "hello_executable",
      srcs: ["main.cpp"],
      static_libs: ["libhello_static"],
      shared_libs: ["libhello_shared"],
  }

再次编译,编译过程参考mmm指令用法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容