Android build/soong/scripts/microfactory.bash源码分析

该文件export一个全局变量,提供了两个方法,执行了一个source导入命令。

export一个全局变量

# Ensure GOROOT is set to the in-tree version.
# 确保 GOROOT 环境变量被设置为 Android 源代码树中的适当版本的 Go 运行时目录
# uname返回操作系统的名称
# 开始一个 case 语句,用于根据操作系统执行不同的命令。
case $(uname) in
    Linux)
        export GOROOT="${TOP}/prebuilts/go/linux-x86/"
        ;;
    Darwin)
        export GOROOT="${TOP}/prebuilts/go/darwin-x86/"
        ;;
    *) echo "unknown OS:" $(uname) >&2 && exit 1;;
# 结束一个case语句
esac

export 全局变量 GOROOT,作为Android源代码go语言运行时目录,即go源码的位置。

提供两个方法

1. getoutdir

getoutdir 确定 Android 构建系统的输出目录

function getoutdir
{
    #尝试使用环境变量 OUT_DIR 的值对其进行初始化。如果 OUT_DIR 未设置,out_dir 将为空字符串
    local out_dir="${OUT_DIR-}"
    #-z 测试操作符用于检查字符串长度是否为零
    if [ -z "${out_dir}" ]; then
        #再次检查环境变量 OUT_DIR_COMMON_BASE 是否设置。如果设置了,使用它的值来构建输出目录的路径
        if [ "${OUT_DIR_COMMON_BASE-}" ]; then
            #如果 OUT_DIR_COMMON_BASE 被设置了,将 out_dir 设置为 OUT_DIR_COMMON_BASE 目录下,
            #加上 TOP 变量所指向的目录的基本名称(即 TOP 目录的名称)
            out_dir="${OUT_DIR_COMMON_BASE}/$(basename ${TOP})"
        else
            #如果没有指定 OUT_DIR 或 OUT_DIR_COMMON_BASE,则默认输出目录为 out
            out_dir="out"
        fi
    fi
    #如果 out_dir 不是绝对路径,将其设置为相对于 TOP 目录的路径
    if [[ "${out_dir}" != /* ]]; then
        out_dir="${TOP}/${out_dir}"
    fi
    #输出最终确定的输出目录路径
    echo "${out_dir}"
}

2. soong_build_go

用于将源码编译为二进制文件,有两个参数,第一个参数指定二进制文件的名称,第二个参数执行二进制文件编译所需的源码位置。

# Bootstrap microfactory from source if necessary and use it to build the
# requested binary.
#
# Arguments:
#  $1: name of the requested binary
#  $2: package name
#它用于构建指定的 Go 语言编写的 Android 二进制文件。
#这个函数使用了 microfactory 工具来构建 Go 代码
function soong_build_go
{
    #调用 getoutdir 函数来确定构建输出目录
    BUILDDIR=$(getoutdir) \
      #Android 源代码树的顶部目录
      SRCDIR=${TOP} \
      #存放构建蓝图文件的目录
      BLUEPRINTDIR=${TOP}/build/blueprint \
      #构建额外参数 EXTRA_ARGS,用于指定 Go 包的路径。这里指定了两个包路径:android/soong 和
      #github.com/golang/protobuf,它们都指向 TOP 目录下的特定子目录
      EXTRA_ARGS="-pkg-path android/soong=${TOP}/build/soong -pkg-path github.com/golang/protobuf=${TOP}/external/golang-protobuf" \
      #调用 build_go 函数,并传递所有传入 soong_build_go 函数的参数($@ 表示所有参数)
      build_go $@
}

执行了一个source导入命令

# 执行命令或导入函数变量
source ${TOP}/build/blueprint/microfactory/microfactory.bash

负责提供soong_build_go所需的build_go方法。

build/soong/java是Android源码中的一个目录,它包含了Soong构建系统针对Java代码的相关功能。 Soong是一个用于构建Android源码的构建系统,取代了过去使用的Make构建系统。build/soong/java目录下的代码主要负责处理Java代码的构建和编译过程。 其中,build/soong/java的功能作用主要包括以下几个方面: 1. 处理模块依赖:Soong构建系统使用一种模块化的方式来组织代码,每个模块都可以指定自己的依赖关系。build/soong/java会根据模块的依赖关系来确定编译顺序,保证依赖的模块先编译。 2. 解析Android.mk文件:在Android源码中,有一种叫做Android.mk的文件,用于描述模块的编译规则。build/soong/java会解析Android.mk文件,提取其中的编译规则,并将其转换为Soong构建系统所需要的格式。 3. 处理Java编译:build/soong/java会调用Java编译器,对Java源代码进行编译。它会根据模块的配置和编译规则,生成对应的编译命令。 4. 处理资源文件:在Android开发中,除了Java代码,还有一些资源文件需要处理,例如布局文件、图片等。build/soong/java会处理这些资源文件的编译和打包过程,确保它们能够正确地被应用程序使用。 总的来说,build/soong/java是Android源码中负责处理Java代码构建和编译的部分,它通过解析Android.mk文件,处理模块依赖关系,调用Java编译器等方式,完成Java代码的构建过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值