• Android.bp常用语法和预定义属性


    介绍

    Android.bp是Android构建系统中用于定义模块和构建规则的配置文件,它使用一种简单的声明式语法。以下是Android.bp的一些常见语法规则和约定:

    • 注释:
      单行注释使用//符号。
      多行注释使用//包围。
      和go语言相同

      // 这是单行注释
      /* 这是
         多行注释 */
      
      • 1
      • 2
      • 3
    • 模块定义:
      每个模块都以module_type字段开始,指定模块的类型,例如cc_library、java_library等。
      模块定义由大括号{}包围,包含模块的属性和规则。

      cc_library {
      	name: "my_lib",
      	srcs: ["file1.cpp", "file2.cpp"],
      	shared_libs: ["lib1", "lib2"],
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • 属性和值:
      属性以名称和冒号:组成,后跟相应的值。
      值可以是字符串、整数、布尔值、列表等,具体取决于属性的类型。
      字符串值通常使用双引号括起来,但也可以不括起来,只要字符串中不包含空格等特殊字符。

      name: "my_module",
      
      
      • 1
      • 2
    • version: 1,

      enabled: true,
      srcs: [“file1.cpp”, “file2.cpp”],

      • 列表属性:
        列表属性使用方括号[]来定义,元素之间用逗号分隔。
        列表属性可以包含字符串、整数、布尔值等。

        srcs: ["file1.cpp", "file2.cpp", "file3.cpp"],
        
        • 1
      • 变量和函数:
        Android.bp支持一些内置变量和函数,用于获取构建系统的信息或执行特定操作。

        target: {
        	android: {
            	srcs: ["android_src.cpp"],
        	},
        	host: {
            	srcs: ["host_src.cpp"],
         	},
        },
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8

      这些是Android.bp的一些基本语法规则和约定。Android构建系统使用这些规则来构建Android操作系统,开发者可以根据项目需求自定义Android.bp文件来定义模块和构建规则。有关更详细的语法规则和属性,请参阅Android构建系统的官方文档。

      以下是一些常见的预定义属性(以下没有定义模块属性):
      1. name:定义模块的名称,通常是唯一标识符。

        name: "my_module",
        
        • 1
      2. srcs:指定模块的源文件,可以是一个文件列表。

        srcs: ["file1.cpp", "file2.cpp"],
        
        • 1
      3. deps:指定模块的依赖关系,即依赖于其他模块的模块列表。

        deps: ["dependency_module1", "dependency_module2"],
        
        • 1
      4. visibility:指定模块的可见性,确定哪些模块可以访问它。

        visibility: ["//my/module:visible_module"],
        
        • 1
      5. cflags、cppflags、ldflags:用于指定C/C++编译和链接的标志。

        cflags: ["-Wall", "-O2"],
        cppflags: ["-DDEBUG"],
        ldflags: ["-L/path/to/lib", "-lmylib"],
        
        • 1
        • 2
        • 3
      6. shared_libs、static_libs:指定模块的动态链接库和静态链接库的依赖关系。

        shared_libs: ["lib1", "lib2"],  //编译依赖的动态库lib1和lib2
        static_libs: ["lib3", "lib4"],  //编译依赖的静态库lib3和lib4
        
        • 1
        • 2
      7. host_supported、device_supported:指定模块是否支持主机构建和目标设备构建。

        host_supported: true,
        device_supported: true,
        
        • 1
        • 2
      8. installable:指定模块是否可以被安装到系统镜像中。

        installable: true,
        
        • 1
      9. product_specific: 指定编译出来放在/product/目录下(默认是放在/system目录下)

        product_specific: true
        
        • 1
      10. vendor: 指定编译出来放在/vendor/目录下(默认是放在/system目录下)

        vendor: true,  
        
        • 1

      案例:

      //hello.cpp源码
      #include 
      #include 
      
      #define LOG_TAG "ezconn"
      #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG ,__VA_ARGS__)
      #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG ,__VA_ARGS__)
      
      int main() {
          printf("hello ezconn\n");
          LOGD("hello ezconn");
          return 0;
      }
      
      cc_binary {              //模块类型为可执行文件
          name: "Hello1",       //模块名Hello1
          srcs: ["hello.cpp"], //源文件列表
          vendor: true,        //编译出来放在/vendor/bin目录下(默认是放在/system目录下)
          shared_libs: [       //编译依赖的动态库
          	 "liblog",
         ],
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22

      案例2

      //hello.cpp源码
      #include 
      int main()
      {
          printf("Hello Android\n");
          return 0;
      }
      
      cc_binary {
          name: "Hello2",       //模块名Hello2
          srcs: ["hello.cpp"],
          product_specific: true,  //编译出来放在/product/bin目录下(默认是放在/system目录下)
          cflags: ["-Werror"], //添加编译选项
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14

      这些是Android.bp文件中一些常见的预制属性。每个属性用于不同的目的,开发者可以根据模块的类型和需求来使用它们。此外,Android构建系统还支持许多其他属性,这些属性可以根据具体的构建任务和模块类型进行自定义。有关更多属性和其详细说明,请参阅Android构建系统的官方文档。

      哈德良长城,诺森伯兰郡国家公园

    • 相关阅读:
      【python】基础复习
      python爬山算法求函数值
      [附源码]计算机毕业设计基于vuejs的文创产品销售平台app
      <网络安全>《30 网络信息安全基础(1)常用术语整理》
      计算机毕业设计django基于协同过滤的旅游推荐系统
      HTML期末作业-基于HTML+CSS+JavaScript制作学生信息管理系统模板
      PPT密码解密,简单教程,保护幻灯片内容
      SpringBoot 刷新上下文6--加载并注册BeanDefinition
      Oracle-PLSQL编程
      linux下打包qt程序
    • 原文地址:https://blog.csdn.net/ezconn/article/details/133011126