Android源代码编译脚本
16lz
2021-12-04
前言
在Android源代码编译过程中经常要source,lunch等一系列命令,这个脚本实现了默认保存编译log,无参可编译,可根据需求使用参数,可以单编,清编 update-api等
脚本代码
#!/bin/bash##creat by Deep Lee for android build# set -o errexitusage() { cat <<USAGEUsage: bash $0 [OPTIONS]Description: Builds Android tree for given TARGET_PRODUCTOPTIONS: -c, --clean_build Clean build - build from scratch by removing entire out dir -h, --help Display this help message -i, --image Specify image to be build/re-build (bootimg/sysimg/usrimg/all Default: all) -j, --jobs Specifies the number of jobs to run simultaneously (Default: CPU core Number) -k, --kernel_defconf Specify defconf file to be used for compiling Kernel -l, --log_file Log file to store build logs (Default: build.log) -m, --module Module to be build -p, --project Project to be build -u, --update-api Update APIs -v, --build_variant Build variant (Default: userdebug)USAGE}clean_build() { echo -e "\nINFO: Removing entire out dir. . .\n" make clobber}set_jack_vm_arg() { if [ $MEMGB -gt 12 ];then echo -e "\nINFO: Build MEMGB $MEMGB for $TARGET And Use Default\n\n" elif [ $MEMGB -gt 8 ];then echo -e "\nINFO: Build MEMGB $MEMGB for $TARGET And Set Xmx to 8g\n\n" export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8g" elif [ $MEMGB -gt 6 ];then echo -e "\nINFO: Build MEMGB $MEMGB for $TARGET And Set Xmx to 4g\n\n" export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g" fi prebuilts/sdk/tools/jack-admin kill-server prebuilts/sdk/tools/jack-admin start-server}build_android() { echo -e "\nINFO: Build Android tree for $TARGET\n" make $@ | tee $LOG_FILE}build_bootimg() { echo -e "\nINFO: Build bootimage for $TARGET\n" make bootimage $@ | tee $LOG_FILE}build_sysimg() { echo -e "\nINFO: Build systemimage for $TARGET\n" make systemimage $@ | tee $LOG_FILE}build_usrimg() { echo -e "\nINFO: Build userdataimage for $TARGET\n" make userdataimage $@ | tee $LOG_FILE}build_module() { echo -e "\nINFO: Build $MODULE for $TARGET\n" make $MODULE $@ | tee $LOG_FILE}build_project() { echo -e "\nINFO: Build $PROJECT for $TARGET\n" mmm $PROJECT | tee $LOG_FILE}update_api() { echo -e "\nINFO: Updating APIs\n" make update-api | tee $LOG_FILE}# Set defaults#need modify here for your target boardTARGET="aosp_arm64"VARIANT="userdebug"#default make jobs is same as cpu core processor numberJOBS=$(cat /proc/cpuinfo | grep processor | wc -l)#can modify here if need store more or less log fileLOG_MAX=5LOG_DIR="Log"LOG_FILE="${LOG_DIR}/$(date +"%Y%m%d_%H%M%S").log"MEMTOTAL=$(cat /proc/meminfo |grep MemTotal | awk '{print $2;}')MEMGB=$(( $MEMTOTAL/1024/1024 ))IMAGE="all"BUILDIMG="true";# Setup getopt.long_opts="clean_build,help,image:,jobs:,kernel_defconf:,log_file:,module:,build_variant:"long_opts+="project:,update-api"getopt_cmd=$(getopt -o chi:j:k:l:m:p:uv: --long "$long_opts" \ -n $(basename $0) -- "$@") || \ { echo -e "\nERROR: Getopt failed. Extra args\n"; usage; exit 1;}eval set -- "$getopt_cmd"while true; do case "$1" in -c|--clean_build) CLEAN_BUILD="true";; -h|--help) usage; exit 0;; -i|--image) IMAGE="$2"; shift;; -j|--jobs) JOBS="$2"; shift;; -k|--kernel_defconf) DEFCONFIG="$2"; shift;; -l|--log_file) LOG_FILE="$2"; shift;; -m|--module) MODULE="$2"; shift;; -p|--project) PROJECT="$2"; shift;; -u|--update-api) UPDATE_API="true";; -v|--build_variant) VARIANT="$2";shift;; --) shift; break;; esac shiftdoneif [[ "${VARIANT}" != "user" ]] && [[ "${VARIANT}" != "userdebug" ]] && [[ "${VARIANT}" != "eng" ]]then echo -e "ERROR: VARIANT=${VARIANT}" usage exit 1;fiCMD="-j $JOBS"if [ "$DEBUG" = "true" ]; then CMD+=" showcommands"fiif [ -n "$DEFCONFIG" ]; then CMD+=" KERNEL_DEFCONFIG=$DEFCONFIG"fiexport LC_ALL=Cexport AUTO_TREE_ID=msmnile_gvmqsource build/envsetup.sh nplunch msmnile_gvmq-${VARIANT}set_jack_vm_argif [[ ! -d ${LOG_DIR} ]]then mkdir ${LOG_DIR}else log_num=$(ls ${LOG_DIR} | wc -l) echo "log number $log_num" while [[ ${log_num} -ge ${LOG_MAX} ]] do old_log=$(ls ${LOG_DIR} | head -1) echo $old_log rm -f ${LOG_DIR}/${old_log} log_num=$(ls ${LOG_DIR} | wc -l) donefiif [ "$CLEAN_BUILD" = "true" ]; then clean_buildfiif [ "$UPDATE_API" = "true" ]; then update_apifiif [ -n "$MODULE" ]; then BUILDIMG="false" build_module "$CMD"fiif [ -n "$PROJECT" ]; then BUILDIMG="false" build_projectfiif [ "$BUILDIMG" == "true" ]; then if [ "$IMAGE" == "all" ]; then build_android "$CMD" else build_$IMAGE "$CMD" fifiret=$(tail -n 2 ${LOG_FILE})if [[ "${ret}" == *"failed"* ]]; then exit 8else exit 0fi
更多相关文章
- Android一级目录介绍
- Android架构分析之Android开发环境搭建
- 如何使Android应用程序获取系统权限
- Android(安卓)Studio之编译t提示Invoke-customs are only suppor
- ubuntu10.10下编译android内核源码
- 如何在android 中编译alsa-utils工具
- android内核编译方法
- Android:搭建NDK环境(Cygwin+android-NDK)
- android高版本系统源码下载和编译刷机