脚本代码如下

clone_project.sh 放在alps目录下。./clone_project.sh 新项目名即可

#!/bin/bash
#Author: tuliyuan
#Email: 975150240@qq.com
# 基于的公司名称
BASE_COMPANY_NAME="top"
# 创建的公司名称
NEW_COMPANY_NAME="top"
# 基于的产品名称 注意 这个不是full_xxxx 是xxxx
#BASE_PROJECT_NAME="k39tv1_bsp_1g"
BASE_PROJECT_NAME="top6739_66_n1"
# 这个一般是创建的某个产品的文件夹名称...一般等同于产品名称
BASE_PROJECT_DIR_NAME=${BASE_PROJECT_NAME}
# 这是lunch的时候选择的product name一般等同于产品名称 特殊时前面可能加full
BASE_PROJECT_LUNCH_NAME="full_${BASE_PROJECT_NAME}"
# 创建的新产品名称
NEW_PROJECT_NAME=""# 平台代码根目录
BASE_DIR=`pwd`
# 蓝色
#ARM 类型
#ARM_NAME="arm"
ARM_NAME="arm64"
#######################
#以下为echo -e时需要制定的颜色需要 color_end 收尾。否则颜色显示不生效 颜色范围为31~37可以自行尝试#蓝色
COLOR_BLUE="\033[34m"
#红色 多为警告
COLOR_RED="\033[31m"
#绿色
COLOR_GREEN="\033[36m"
#紫色
COLOR_PERSE="\033[35m"
#黄色
COLOR_YELLOW="\033[33m"
#结束符
COLOR_END="\033[0m"
#默认颜色
COLOR_DEFAULT=${COLOR_GREEN}
source build/envsetup.sh > /dev/null#获取配置文件值
getProjectKey(){local file=$1local key=$2if [ -f "${file}" ];thenlocal value=$(grep -v "^\s*#" ${file} | grep -w ${key} | tail -1 | sed 's#^[^=]*=\(.*\)$#\1#g' | sed 's#[[:space:]]##g' )fiecho ${value}
}# kernel dir名称
KERNEL_DIR_NAME=$(getProjectKey device/${BASE_COMPANY_NAME}/${BASE_PROJECT_NAME}/ProjectConfig.mk LINUX_KERNEL_VERSION)
PLATFORM_NAME=$(getProjectKey device/${BASE_COMPANY_NAME}/${BASE_PROJECT_NAME}/ProjectConfig.mk MTK_PLATFORM)
MTK_PLATFORM_NAME=$(echo ${PLATFORM_NAME} | tr A-Z a-z)
usage(){echo "基础产品名称为:${BASE_PROJECT_LUNCH_NAME}"echo "新产品名称为空,退出脚本"echo "根目录为:${BASE_DIR}"echo -e "$0 [new_project_name] clone一个新的名为new_project_name产品"
}
make_new_project(){NEW_PROJECT_NAME=$1if [ "$1" = "" ] ;thenusageexit 1fiif [ "${#NEW_PROJECT_NAME}" -gt "32" ]; thenecho "**********error occured with project name $NEW_PROJECT***************"echo "error!!! 工程名长度请不要超过32个字符,否则可能出现一些奇怪的问题 "echo "**********error occured with project name $NEW_PROJECT***************"exit 1fiecho "即将创建名为${NEW_PROJECT_NAME}的产品....." _copy_device_dir_copy_kerner_dir_copy_vendor_direcho "工程创建完成!!!"
}
#拷贝device目录
_copy_device_dir(){local company_name_dir_old="device/${BASE_COMPANY_NAME}/"local project_name_dir_old="device/${BASE_COMPANY_NAME}/${BASE_PROJECT_DIR_NAME}"local company_name_dir="device/${NEW_COMPANY_NAME}/"local project_name_dir="device/${NEW_COMPANY_NAME}/${NEW_PROJECT_NAME}"echo -e "${COLOR_DEFAULT}开始为${NEW_PROJECT_NAME}进行device目录的复制.....${COLOR_END}"
#判断是否存在此要创建的路径,如果存在说明已有此工程,请检查该工程目录下的vendorsetup.sh
#判断是否需要创建对应的文件夹
#aaaa noterm -rf ${project_name_dir}if [ -d "${project_name_dir}" ] ;thenecho -e "[device]  ${COLOR_RED}当前已存在此工程....请重新创建新的工程名,退出程序!${COLOR_END}"exit 1fiif [ ! -d "${company_name_dir}" ] ;thenecho "[device]  当前没有${company_name_dir}公司目录...将会创建...."mkdir -pv ./device/${NEW_COMPANY_NAME}fiif [ ! -d "${project_name_dir}" ] ;thenecho "[device]  当前没有${NEW_PROJECT_NAME}产品目录...将会创建...."mkdir -pv ${project_name_dir}fi
#开始拷贝数据echo "[device]  正在从初始工程中拷贝文件到新工程目录下...." cp -r ${project_name_dir_old}/* ${project_name_dir}
#make文件的更名echo "[device]  ${NEW_PROJECT_NAME}.mk 正在更名...." mv ${project_name_dir}/${BASE_PROJECT_LUNCH_NAME}.mk ${project_name_dir}/${NEW_PROJECT_NAME}.mk
#lunch combo相关echo "[device]  vendorsetup.sh 正在替换字符串...." sed -i "s/${BASE_PROJECT_LUNCH_NAME}/${NEW_PROJECT_NAME}/g" ${project_name_dir}/vendorsetup.shecho "[device]  AndroidProducts.mk 正在替换字符串...." sed -i "s/${BASE_PROJECT_LUNCH_NAME}/${NEW_PROJECT_NAME}/g" ${project_name_dir}/AndroidProducts.mk
#产品配置相关 echo "[device]  BoardConfig.mk 正在替换字符串...." sed -i "s/${BASE_PROJECT_DIR_NAME}/${NEW_PROJECT_NAME}/g" ${project_name_dir}/BoardConfig.mk    sed -i "s/${BASE_COMPANY_NAME}/${NEW_COMPANY_NAME}/g" ${project_name_dir}/BoardConfig.mkecho "[device]  board-info.txt 正在替换字符串...." sed -i "s/${BASE_PROJECT_DIR_NAME}/${NEW_PROJECT_NAME}/g" ${project_name_dir}/board-info.txt
#device.mk用的copy fileecho "[device]  device.mk 正在替换字符串...." sed -i "s/${BASE_PROJECT_DIR_NAME}/${NEW_PROJECT_NAME}/g" ${project_name_dir}/device.mksed -i "s/${BASE_COMPANY_NAME}/${NEW_COMPANY_NAME}/g" ${project_name_dir}/device.mk#产品mk的主要配置替换,如产品名词产品型号等echo "[device] ${NEW_PROJECT_NAME}.mk 正在替换字符串...." sed -i "s/${BASE_PROJECT_LUNCH_NAME}/${NEW_PROJECT_NAME}/g" ${project_name_dir}/${NEW_PROJECT_NAME}.mksed -i "s/${BASE_PROJECT_DIR_NAME}/${NEW_PROJECT_NAME}/g" ${project_name_dir}/${NEW_PROJECT_NAME}.mksed -i "s/${BASE_COMPANY_NAME}/${NEW_COMPANY_NAME}/g" ${project_name_dir}/${NEW_PROJECT_NAME}.mk#需要使用自己的签名
#   sed -i s/'MTK_SIGNATURE_CUSTOMIZATION = no'/'MTK_SIGNATURE_CUSTOMIZATION = yes'/g  "device/${NEW_COMPANY_NAME}/"${NEW_PROJECT_NAME}"/ProjectConfig.mk"
#   mkdir -pv device/mediatek/security/${NEW_PROJECT_NAME}echo -e "${COLOR_DEFAULT}为${NEW_PROJECT_NAME}进行device目录的复制完成.....${COLOR_END}" }#拷贝kernel目录
_copy_kerner_dir(){local _old_dconfig="${KERNEL_DIR_NAME}/arch/${ARM_NAME}/configs/${BASE_PROJECT_DIR_NAME}_defconfig"local _old_debugconfig="${KERNEL_DIR_NAME}/arch/${ARM_NAME}/configs/${BASE_PROJECT_DIR_NAME}_debug_defconfig"local _old_dts="${KERNEL_DIR_NAME}/arch/${ARM_NAME}/boot/dts/${BASE_PROJECT_DIR_NAME}.dts"local _old_dws="${KERNEL_DIR_NAME}/drivers/misc/mediatek/dws/${MTK_PLATFORM_NAME}/${BASE_PROJECT_DIR_NAME}.dws"if [  "${ARM_NAME}" = "arm64" ] ; then_old_dts="${KERNEL_DIR_NAME}/arch/${ARM_NAME}/boot/dts/mediatek/${BASE_PROJECT_DIR_NAME}.dts"fi local _new_dconfig="${KERNEL_DIR_NAME}/arch/${ARM_NAME}/configs/${NEW_PROJECT_NAME}_defconfig"local _new_debugconfig="${KERNEL_DIR_NAME}/arch/${ARM_NAME}/configs/${NEW_PROJECT_NAME}_debug_defconfig"local _new_dts="${KERNEL_DIR_NAME}/arch/${ARM_NAME}/boot/dts/${NEW_PROJECT_NAME}.dts"local _new_dws="${KERNEL_DIR_NAME}/drivers/misc/mediatek/dws/${MTK_PLATFORM_NAME}/${NEW_PROJECT_NAME}.dws"if [  "${ARM_NAME}" = "arm64" ] ; then_new_dts="${KERNEL_DIR_NAME}/arch/${ARM_NAME}/boot/dts/mediatek/${NEW_PROJECT_NAME}.dts"fi #aaaaa note rm -rf ${_new_dconfig}rm -rf ${_new_debugconfig}rm -rf ${_new_dts}echo -e "${COLOR_DEFAULT}开始为${NEW_PROJECT_NAME}进行kernel目录的复制.....${COLOR_END}" echo "[kernel]  kernel目录为${KERNEL_DIR_NAME} 平台名称为${MTK_PLATFORM_NAME}"if [ -f "${_new_dconfig}" ] ;thenecho -e "[kernel]  ${COLOR_RED}当前已存在此工程defconfig....请重新创建新的工程名,正在退出程序!${COLOR_END}"exit 1fiif [ -f "${_new_debugconfig}" ] ;thenecho -e "[kernel]  ${COLOR_RED}当前已存在此工程debug_config....请重新创建新的工程名,正在退出程序!${COLOR_END}"exit 1fiif [ -f "${_new_dts}" ] ;thenecho -e "[kernel]  ${COLOR_RED}当前已存在此工程dts....请重新创建新的工程名,正在退出程序!${COLOR_END}"exit 1  fi
#拷贝defconfig 为user版本的使用echo "[kernel]  正在复制defconfig...."cp -r ${_old_dconfig} ${_new_dconfig}sed -i "s/${BASE_PROJECT_DIR_NAME}/${NEW_PROJECT_NAME}/g" ${_new_dconfig}
#拷贝defconfig 为userdebug or eng 版本的使用echo "[kernel]  正在复制debug_defconfig...."cp -r ${_old_debugconfig} ${_new_debugconfig}sed -i "s/${BASE_PROJECT_DIR_NAME}/${NEW_PROJECT_NAME}/g" ${_new_debugconfig}
#拷贝dts配置echo "[kernel]  正在复制dts...."cp -r ${_old_dts} ${_new_dts}cp -r ${_old_dws} ${_new_dws}sed -i "s/${BASE_PROJECT_DIR_NAME}/${NEW_PROJECT_NAME}/g" ${_new_dts}echo -e "${COLOR_DEFAULT}为${NEW_PROJECT_NAME}进行kernel目录的复制完成.....${COLOR_END}"
}
#拷贝vendor目录
_copy_vendor_dir(){local old_lk="vendor/mediatek/proprietary/bootable/bootloader/lk/project/${BASE_PROJECT_DIR_NAME}.mk"local old_preloader_dir="vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/${BASE_PROJECT_DIR_NAME}/"local old_custom_dir="vendor/mediatek/proprietary/custom/${BASE_PROJECT_DIR_NAME}/"local old_custom_trust_zone="vendor/mediatek/proprietary/trustzone/custom/build/project/${BASE_PROJECT_DIR_NAME}.mk" local new_lk="vendor/mediatek/proprietary/bootable/bootloader/lk/project/${NEW_PROJECT_NAME}.mk"local new_preloader_dir="vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/${NEW_PROJECT_NAME}/"local new_custom_dir="vendor/mediatek/proprietary/custom/${NEW_PROJECT_NAME}/"local new_custom_trust_zone="vendor/mediatek/proprietary/trustzone/custom/build/project/${NEW_PROJECT_NAME}.mk"
# aaaa noterm -rf ${new_lk}rm -rf ${new_preloader_dir}rm -rf ${new_custom_dir}if [ -f "${new_lk}" ] ;thenecho -e "[vendor]  ${COLOR_RED}当前已存在此工程lk文件....请重新创建新的工程名,正在退出程序!${COLOR_END}"exit 1fiif [ -d "${new_preloader_dir}" ] ;thenecho -e "[vendor]  ${COLOR_RED}当前已存在此工程preloader...请重新创建新的工程名,正在退出程序!${COLOR_END}"exit 1fiif [ -d "${new_custom_dir}" ] ;thenecho -e "[vendor]  ${COLOR_RED}当前已存在此工程custom....请重新创建新的工程名,正在退出程序!${COLOR_END}"exit 1  fiecho -e "${COLOR_DEFAULT}开始为${NEW_PROJECT_NAME}进行vendor目录的复制.....${COLOR_END}" #为新工程创建对应的lkecho "[vendor]  开始复制lk文件,并替换旧工程为新工程的名称....."cp -r ${old_lk} ${new_lk}cp -r vendor/mediatek/proprietary/bootable/bootloader/lk/target/${BASE_PROJECT_DIR_NAME} vendor/mediatek/proprietary/bootable/bootloader/lk/target/${NEW_PROJECT_NAME} sed -i "s/${BASE_PROJECT_DIR_NAME}/${NEW_PROJECT_NAME}/g" ${new_lk}echo "[vendor]  开始创建preloader目录,并替换旧工程为新工程的名称....."#为新工程创建对应的preloader目录mkdir -pv ${new_preloader_dir}cp -r ${old_preloader_dir}/* ${new_preloader_dir}mv ${new_preloader_dir}/${BASE_PROJECT_DIR_NAME}.mk ${new_preloader_dir}/${NEW_PROJECT_NAME}.mk sed -i "s/${BASE_PROJECT_DIR_NAME}/${NEW_PROJECT_NAME}/g" ${new_preloader_dir}/${NEW_PROJECT_NAME}.mk ##为新工程创建对应的custom目录echo "[vendor]  开始创建custom目录,并替换旧工程为新工程的名称....."mkdir -pv ${new_custom_dir}cp -r ${old_custom_dir}/* ${new_custom_dir}sed -i "s/${BASE_PROJECT_DIR_NAME}/${NEW_PROJECT_NAME}/g" ${new_custom_dir}/Android.mk sed -i "s/${BASE_PROJECT_DIR_NAME}/${NEW_PROJECT_NAME}/g" ${new_custom_dir}/security/efuse/input.xmlecho -e "${COLOR_DEFAULT}为${NEW_PROJECT_NAME}进行vendor目录的复制完成.....${COLOR_END}" #为新的工程创建对应的trustzonecp -r ${old_custom_trust_zone} ${new_custom_trust_zone}#TOP 项目专属# cp -rf vendor/${BASE_COMPANY_NAME}/ vendor/${NEW_COMPANY_NAME}/mkdir -pv  vendor/${NEW_COMPANY_NAME}/libs/$NEW_PROJECT_NAME/cp -rf vendor/${BASE_COMPANY_NAME}/libs/$BASE_PROJECT_NAME/device-vendor.mk vendor/${NEW_COMPANY_NAME}/libs/$NEW_PROJECT_NAME/device-vendor.mk
}make_new_project $1

MTK MT6739P 项目克隆脚本相关推荐

  1. 嵌入式 linux 启动脚本 编写,[9构建嵌入式linux系统项目-启动脚本的编写.ppt

    [9构建嵌入式linux系统项目-启动脚本的编写 启动脚本 教学回顾 shell语法 管道.重定向 变量 结构性语句 教学内容 启动脚本的写法 教学要求 熟悉掌握启动脚本的写法 shell 函数 在s ...

  2. KVM 虚拟机自动克隆脚本

    #!/bin/sh #----------------------------------# # virt-clone auto script[虚拟机自动克隆脚本] # create by xueku ...

  3. CentOS7 2.新项目上线脚本

    我司一个客户项目对应代码仓库的一个分支,每次新项目上线总是要从master复制一个分支,接着git clone到本地,在IDEA里面替换配置文件内容,上传到代码仓库,启动项目,配置nginx.conf ...

  4. Centos7搭建Java环境,并设置项目自启动脚本、定时数据库备份/日志清理脚本

    开发环境下载,提供nginx-1.12.2.jdk-8u162.Jenkins下载 建个文件夹,作为开发环境存放路径 cd /usr mkdir developmentEnvironment cd / ...

  5. 将远程仓库的项目克隆到本地

    第一步,需要安装Git,可利用cmd查看系统中是否安装了Git. 打开cmd,输入git,回车,没有安装会显示:提示不是内部或外部命令,也不是可运行的程序或批处理文件. 在Windows上使用Git, ...

  6. 一个自动配置 opengrok 多项目的脚本

    前段时间在服务器上配置 opengrok 阅读代码,项目有很多个,一个一个手动配置比较繁琐. 我从搭建 tomcat 和 opengrok,到配置和索引完 5 个 Android 项目,用了差不多一整 ...

  7. 项目防止脚本攻击sxx存储性漏洞

    项目防止脚本攻击sxx存储性漏洞 <a 标签跳转,等等 现象: 如上页面一些更新修改添加操作,输入js一些可执行脚本,对网站进行攻击. 解决: 可引入以下的工具类,对保存的字段做过滤拦截,防止j ...

  8. JAVA项目启动脚本编写的一些笔记整理

    写在前面 公司项目里看到,之前的项目都是在物理机部署的,而且大都是Server,没搞过,这里整齐学习. 博文分为两部分: 项目启动脚本总结,java常用启动参数,,启动参数部分参考 流年似水,有些事情 ...

  9. Ubuntu真机下MTK平台FAE自助脚本调试工具,无需驱动工程师协助(shell源码开源)

    利用工作的闲余时间,写了2个月的shell脚本仅适用于MTK代码环境.主要是为了改变繁琐的工作量,并且外来FAE前来调试模块,可以不用再去陪着调试.脚本实现主要功能有: (1)git拉取代码,编译好代 ...

最新文章

  1. [转载] iphone 很有意思的NSString 和 Autorelease
  2. jmeter学习指南之深入分析跨域传递cookie
  3. Unhandled exception 0xC0000005: Access violation writing location
  4. UNIYT关于V S2017,VS2019断点调试卡住的问题
  5. 前端面试知识点目录整理
  6. 11 | 排序(上):为什么插入排序比冒泡排序更受欢迎?
  7. LFYZOJ 104 Counting Swaps
  8. python语音合法命名-下列哪些语句在Python中是合法的( )
  9. C/C++ 图像二进制存储与读取
  10. 根据经度纬度 筛选距离远近
  11. Cron表达式学习:每天十二点执行一次:0 0 12 * * ?
  12. c程序设计语言 qsort,【程序设计基础_C语言】北理工的恶龙(附qsort范例)
  13. 怎样循序渐进、有效地学习JavaScript(转)
  14. 2018校招笔试题——网易编程题跳石板
  15. JavaScript进阶
  16. Sea of nodes 中译文
  17. PS 父图层与子图层
  18. MYSQL内存请求一直不释放_MySQL内存不释放分析
  19. bzoj4920: 薄饼切割
  20. 【毕设狗】【单片机毕业设计】基于单片机的温控风扇的设计–仿真设计

热门文章

  1. linux 如何重启crontab,Linux crontab用法、启动关闭重启操作
  2. 关于Hibernate里hibernate.properties not found的问题及数据库方言更新问题
  3. 3D修复版《泰坦尼克》2012上映 纪念沉没百年
  4. Bluetooth 4.0之Android 讲解
  5. 吴恩达《神经网络和深度学习》第二周编程作业—用神经网络思想实现逻辑回归
  6. 孙鑫VC++讲座笔记-(6)菜单编程
  7. 构建中国云生态|华云数据与百望云完成产品兼容互认证 携手搭建版式文档新生态
  8. Adobe Premiere Pro2020中文版
  9. 计算机好玩的配件,游戏电竞好帮手,实用桌面配件大盘点
  10. CVE-2017-7659(Apache漏洞)