Android编译系统中的Android.bp

https://www.cnblogs.com/bluestorm/p/10895005.html

Android.bp,是用来替换Android.mk的配置文件。 它使用Blueprint框架来解析,最终转换成Ninja文件。

与Android.mk不同的是,Android.bp是纯粹的配置文件,不包含分支、循环等流程控制,也不能做算数、逻辑运算。 与此同时,Ninja文件也是如此。 这就产生了一些新的问题与需求——在Android项目上进行选择编译、解析配置、转换成Ninja等——Soong应运而生。 Soong其实就相当于Makefile编译系统的核心,即build/make/core/下面的内容。 它负责提供Android.bp的含义定义与解析,并将之转换为Ninja文件。。

BlueprintSoong都是由Golang写的项目。 从Android Nougat开始,prebuilts/go/目录下新增了Golang所需的运行环境,在编译时使用。

Android.bp以及相关支持,从Android Nougat开始加入,从Android Oreo(8.0)开始默认开启。 如果需要在Android Nougat的版本使用,需要在执行编译时添加变量。

Android.mk转换Android.bp实例

下面,以一个AOSP上的简单模块,system/core/sdcard/Android.mk,来做为案例。

  1.  
    LOCAL_PATH := $(call my-dir)
  2.  
     
  3.  
    include $(CLEAR_VARS)
  4.  
     
  5.  
    LOCAL_SRC_FILES := sdcard.cpp fuse.cpp
  6.  
    LOCAL_MODULE := sdcard
  7.  
    LOCAL_CFLAGS := -Wall -Wno-unused-parameter -Werror
  8.  
    LOCAL_SHARED_LIBRARIES := libbase libcutils libminijail libpackagelistparser
  9.  
     
  10.  
    LOCAL_SANITIZE := integer
  11.  
     
  12.  
    include $(BUILD_EXECUTABLE)

这是一个编译二进制可执行文件的小模块,内容非常简单。 通过执行androidmk Android.mk > Android.bp,可以转换成Android.bp。

  1.  
    cc_binary {
  2.  
    srcs: [
  3.  
    "sdcard.cpp",
  4.  
    "fuse.cpp",
  5.  
    ],
  6.  
    name: "sdcard",
  7.  
    cflags: [
  8.  
    "-Wall",
  9.  
    "-Wno-unused-parameter",
  10.  
    "-Werror",
  11.  
    ],
  12.  
    shared_libs: [
  13.  
    "libbase",
  14.  
    "libcutils",
  15.  
    "libminijail",
  16.  
    "libpackagelistparser",
  17.  
    ],
  18.  
    sanitize: {
  19.  
    misc_undefined: ["integer"],
  20.  
    },
  21.  
    }

可以看出,虽然行数变多,但其实含义更明确了

原文地址:https://www.cnblogs.com/bluestorm/p/10895005.html