51M-CompileScript.sh 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. #!/bin/bash
  2. export PATH=$(echo $PATH)
  3. #/////////////////////////////////////////////////////////////////#
  4. #////// 其他变量定义,全大写 //////#
  5. # 工作空间目录;
  6. WORK_DIR=$(pwd)
  7. # 日志文件;
  8. LOG_FILE=${WORK_DIR}/Target/build.log
  9. # 日期;
  10. CURR_TIME=$(date +"%Y-%m-%d %T")
  11. # Android目录;
  12. ANDROID_DIR=${WORK_DIR}"/kernel/android/R"
  13. # 配置文件;
  14. PROJECT_NAME="NOKIA.cfg"
  15. # Dailybuild输出目录;
  16. RTK_DAILYBUILD_OUTPUT_PATH=${WORK_DIR}"/kernel/system/tmp/dailybuild_output"
  17. # Key目录;
  18. KEY_OPTION=${ANDROID_DIR}"/device/tv051/R4/Releasekeys"
  19. # 是否增量编译OTA包(Incremental Compilation OTA),只用于Arg_BuildMark=1时,即Dailybuild才需要;
  20. # 星期四:全量编译OTA;
  21. # 星期五:增量编译OTA;
  22. IC_OTA=false
  23. # SVN路径;
  24. SCBC_APPS_SVN_SRC_APK=https://odm-design-center-hz.tclking.com/svn/scbc_apps/trunk/app/apk
  25. # 是否编译中间件;
  26. export TV_MIDWARE_MAKE=false
  27. # 是否安装RTK的APP,即RTK公版;
  28. export RTK_TV_APK_INSTALL=false
  29. # 是否开启远场语音;
  30. export Argument_FarfieldVoice=true
  31. # 版本号;
  32. export SCBC_PRODUCT_VERSION="V8-T851MGL-LF1V001"
  33. #/////////////////////////////////////////////////////////////////#
  34. # 获取参数个数使用: $#
  35. echo "外部参数个数="$#
  36. # 定义外部参数,命名要求:匈牙利命名,带前缀Arg_.
  37. # 每个参数意义,需要明确说明,请参照以下方式添加新参数;
  38. #/////////////////////////////////////////////////////////////////#
  39. # 外部参数定义: 字符串类型、布尔类型、数字类型;
  40. Arg_RedirectLog=true # 是否重定向log;
  41. Arg_CodeSync=true # 是否需要更新代码;
  42. Arg_BuildRelease='' # 编译的Img类型:2=Debug、1=Release(CTS\user);
  43. Arg_BuildOTA=false # 是否编译OTA包;
  44. Arg_VersionNum='' # 编译版本号;
  45. Arg_CleanBuild=false # 是否Clean编译;
  46. Arg_BrandName='' # 编译的品牌名称;
  47. Arg_FarfieldVoice=true # 是否开启远场语音;
  48. Arg_MakeTVMidware=false # 是否编译TVMidware
  49. Arg_InstallRTKAPK=false # 是否安装RTK APK,即RTK公版;
  50. Arg_BuildMark=0 # 编译类型:给一个编译标志,用于区分某些编译的不同,如1=Dailybuild, 0=普通编译;
  51. #/////////////////////////////////////////////////////////////////#
  52. # 解析外部参数;
  53. parseArgument()
  54. {
  55. echo "func=parseArgument"
  56. # 遍历参数;
  57. for arg in $*
  58. do
  59. if [[ $arg == *'='* ]];then
  60. # 获取参数值;
  61. key=${arg%%=*}
  62. val=${arg#*=}
  63. echo -e $arg "\t\t\t取等号左边值:"${key} "\t\t\t取等号右边值:"${val}
  64. # 新增外部参数时,请依次添加;
  65. if [ ${key} = 'Arg_RedirectLog' ];then
  66. Arg_RedirectLog=${val}
  67. fi
  68. if [ ${key} = 'Arg_BuildRelease' ];then
  69. Arg_BuildRelease=${val}
  70. fi
  71. if [ ${key} = 'Arg_BuildOTA' ];then
  72. Arg_BuildOTA=${val}
  73. fi
  74. if [ ${key} = 'Arg_VersionNum' ];then
  75. Arg_VersionNum=${val}
  76. fi
  77. if [ ${key} = 'Arg_CleanBuild' ];then
  78. Arg_CleanBuild=${val}
  79. fi
  80. if [ ${key} = 'Arg_BrandName' ];then
  81. Arg_BrandName=${val}
  82. fi
  83. if [ ${key} = 'Arg_FarfieldVoice' ];then
  84. Arg_FarfieldVoice=${val}
  85. fi
  86. if [ ${key} = 'Arg_MakeTVMidware' ];then
  87. Arg_MakeTVMidware=${val}
  88. fi
  89. if [ ${key} = 'Arg_InstallRTKAPK' ];then
  90. Arg_InstallRTKAPK=${val}
  91. fi
  92. if [ ${key} = 'Arg_BuildMark' ];then
  93. Arg_BuildMark=${val}
  94. fi
  95. fi
  96. done
  97. }
  98. # 用户手动选择参数进行编译;
  99. manualArgument()
  100. {
  101. echo "==================================================================================="
  102. echo "默认客户版本号:V8-T851MGL-LF1V001"
  103. echo "==================================================================================="
  104. echo "请输入版本号[Please type version]"
  105. read -p "[V8-T851MGL-LF1V001]" Arg_VersionNum
  106. echo "CTS or not?"
  107. read -p "[1-CTS 2-Debug ]" Arg_BuildRelease
  108. echo "Build OTA package or not?"
  109. read -p "[y/n]" Arg_BuildOTA
  110. echo "是否启用远场语音[n/y]?"
  111. read -p "[n/y]" Arg_FarfieldVoice
  112. echo "Clean or not?"
  113. read -p "[n/y]" Arg_CleanBuild
  114. echo "是否编译中间件"
  115. read -p "[n/y]" Arg_MakeTVMidware
  116. echo "是否编译RTK公版?"
  117. read -p "[n/y]" Arg_InstallRTKAPK
  118. read -p "编译标志位
  119. [
  120. 0-Normal(defualt) 1-Dailybuild
  121. ] " Arg_BuildMark
  122. }
  123. redirectLog()
  124. {
  125. if [ ${Arg_RedirectLog} = false ];then
  126. echo -e "\n未开启日志重定向功能,无build.log生成!\n"
  127. else
  128. rm -rf ${WORK_DIR}/Target
  129. if [ ! -d ${WORK_DIR}/Target ];then
  130. mkdir ${WORK_DIR}/Target
  131. fi
  132. # 重定向Log到文件中;
  133. exec 1>>${LOG_FILE}
  134. exec 2>>${LOG_FILE}
  135. fi
  136. }
  137. # 初始化参数;
  138. initArgument()
  139. {
  140. # 重定向日志;
  141. redirectLog
  142. echo "Start DateTime:${CURR_TIME}"
  143. # 用户不给版本号,设置默认值;
  144. if [ x$Arg_VersionNum = "x" ];then
  145. Arg_VersionNum=V8-T851MGL-LF1V001
  146. fi
  147. # 远场语音设置:用户选择n不开启,否则不选或y都为开启;
  148. if [ x$Arg_FarfieldVoice = "xy" ]; then
  149. Arg_FarfieldVoice=true
  150. elif [ x$Arg_FarfieldVoice = "xn" ]; then
  151. Arg_FarfieldVoice=false
  152. elif [ x$Arg_FarfieldVoice = "x" ]; then
  153. Arg_FarfieldVoice=false
  154. fi
  155. # 用户不选择OTA编译,则默认为false;
  156. if [ x$Arg_BuildOTA = "xy" ]; then
  157. Arg_BuildOTA=true
  158. elif [ x$Arg_BuildOTA = "xn" ]; then
  159. Arg_BuildOTA=false
  160. elif [ x$Arg_BuildOTA = "x" ]; then
  161. Arg_BuildOTA=false
  162. fi
  163. # Clean编译:用户手动选择,则true,否则不选或n都为关闭;
  164. if [ x$Arg_CleanBuild = "xy" ]; then
  165. Arg_CleanBuild=true
  166. elif [ x$Arg_CleanBuild = "x" ];then
  167. Arg_CleanBuild=false
  168. elif [ x$Arg_CleanBuild = "xn" ];then
  169. Arg_CleanBuild=false
  170. fi
  171. # 编译类型:用户不选择则默认Debug;
  172. if [ x$Arg_BuildRelease = "xy" ]; then
  173. Arg_BuildRelease=1
  174. elif [ x$Arg_BuildRelease = "xn" ]; then
  175. Arg_BuildRelease=2
  176. elif [ x$Arg_BuildRelease = "x" ]; then
  177. Arg_BuildRelease=2
  178. fi
  179. # 将字串小写比较;
  180. if [ x${Arg_BuildRelease,} = "xdebug" ]; then
  181. Arg_BuildRelease=2
  182. fi
  183. if [ x${Arg_BuildRelease,} = "xrelease" ]; then
  184. Arg_BuildRelease=1
  185. fi
  186. # 编译中间件,默认false;
  187. if [ x$Arg_MakeTVMidware = "xy" ]; then
  188. Arg_MakeTVMidware=true
  189. elif [ x$Arg_MakeTVMidware = "xn" ]; then
  190. Arg_MakeTVMidware=false
  191. elif [ x$Arg_MakeTVMidware = "x" ]; then
  192. Arg_MakeTVMidware=false
  193. fi
  194. # rtk公版;
  195. if [ x$Arg_InstallRTKAPK = "xy" ]; then
  196. Arg_InstallRTKAPK=true
  197. # RTK公版不能编译中间件;
  198. Arg_MakeTVMidware=false
  199. elif [ x$Arg_InstallRTKAPK = "xn" ]; then
  200. Arg_InstallRTKAPK=false
  201. elif [ x$Arg_InstallRTKAPK = "x" ]; then
  202. Arg_InstallRTKAPK=false
  203. fi
  204. # Arg_BuildMark,无选或大于范围的值默认为Normal编译;
  205. if [ x$Arg_BuildMark = "x" ] || [ $Arg_BuildMark -gt 1 ]; then
  206. Arg_BuildMark=0
  207. fi
  208. # Dailybuild专项处理;
  209. if [ $Arg_BuildMark = 1 ];then
  210. if [ $Arg_InstallRTKAPK = false ];then
  211. # Dailybuild Moka版本号
  212. Arg_VersionNum=V8-T851MGL-000$(date +"%m%d")
  213. else
  214. # Dailybuild RTK公版版本号
  215. Arg_VersionNum=V8-T851MGL-001$(date +"%m%d")
  216. fi
  217. fi
  218. # Dailybuild的特殊处理;
  219. if [ $Arg_BuildMark -eq 1 ]; then
  220. # 获取周几:0~6 星期天~星期六
  221. week=$(date +%w)
  222. # 周四:全量编译OTA;
  223. if [ ${week} -eq 4 ]; then
  224. IC_OTA=false
  225. Arg_BuildOTA=true
  226. echo "全量编译OTA包"
  227. fi
  228. # 周五:增量编译OTA;
  229. if [ ${week} -eq 5 ]; then
  230. IC_OTA=true
  231. Arg_BuildOTA=true
  232. echo "增量编译OTA包"
  233. fi
  234. fi
  235. export TV_MIDWARE_MAKE=${Arg_MakeTVMidware}
  236. export SCBC_PRODUCT_VERSION=${Arg_VersionNum}
  237. export RTK_TV_APK_INSTALL=${Arg_InstallRTKAPK}
  238. export Argument_FarfieldVoice=${Arg_FarfieldVoice}
  239. echo "==================================================================================="
  240. echo "SCBC_PRODUCT_VERSION: ${SCBC_PRODUCT_VERSION}"
  241. echo "RTK_TV_APK_INSTALL: ${Arg_InstallRTKAPK}"
  242. echo "Arg_FarfieldVoice: ${Arg_FarfieldVoice}"
  243. echo "Arg_BuildOTA: ${Arg_BuildOTA}"
  244. echo "Arg_CleanBuild: ${Arg_CleanBuild}"
  245. echo "==================================================================================="
  246. echo "软件版本(version): ${Arg_VersionNum} "
  247. echo "CTS版本编译: ${Arg_BuildRelease} "
  248. echo "TV_MIDWARE_MAKE: ${Arg_MakeTVMidware} "
  249. echo "Arg_InstallRTKAPK: ${Arg_InstallRTKAPK} "
  250. echo "Arg_BuildMark: ${Arg_BuildMark} "
  251. echo "==================================================================================="
  252. }
  253. pre_build()
  254. {
  255. HEAD_VERSION=`svn info $SCBC_APPS_SVN_SRC_APK|grep Revision|cut -d' ' -f2`
  256. if [ -z "$HEAD_VERSION" ]; then
  257. echo "HEAD_VERSION is empty 退出编译"
  258. exit;
  259. fi
  260. #======================
  261. cd ${ANDROID_DIR}/device/realtek/common
  262. git checkout product/display/rtk_display_xhdpi.mk
  263. cd ${ANDROID_DIR}/device/tv051/R4/
  264. git checkout AndroidProducts.mk
  265. #======================
  266. if [ x$panel = "x2K" ] || [ x$panel = "x2k" ];then
  267. echo "2K屏项目输出"
  268. PROJECT_NAME="MOTOROLA.cfg"
  269. else
  270. echo "4K屏项目输出"
  271. fi
  272. #======================
  273. cd ${WORK_DIR}
  274. ./kernel/android/R/device/tv051/R4/update_debug_apps.sh
  275. ./kernel/android/R/device/tv051/R4/save_apps_svn.sh
  276. }
  277. build_img()
  278. {
  279. rm -rf ${ANDROID_DIR}/signed-target_files.zip
  280. rm -rf ${ANDROID_DIR}/signed-ota_update.zip
  281. rm -rf ${WORK_DIR}/image_creator/*.img
  282. rm -rf ${WORK_DIR}/kernel/system/tmp/dailybuild_output
  283. if [ ${Arg_BuildRelease} -eq 1 ];then
  284. COMPILEMODE="user"
  285. else
  286. COMPILEMODE="userdebug"
  287. fi
  288. if [ ${Arg_CleanBuild} = true ];then
  289. make_img_clean
  290. else
  291. make_img_noclean
  292. fi
  293. }
  294. #报错退出
  295. make_error_exit()
  296. {
  297. if [ "$(echo $?)" != "0" ]; then
  298. echo "There is a error , The compiler is fail !!!!"
  299. exit
  300. fi
  301. }
  302. #编译kernel
  303. make_kernel()
  304. {
  305. echo "Start make linux kernel"
  306. #./build_android.sh [-p project_name] [-c y/n] [-v Build_variant] [-d device_name] {-j job} {-k key_path}
  307. cd ${WORK_DIR}/kernel/system
  308. #./build_android.sh -p $PROJECT_NAME -c n -v $COMPILEMODE -j 12 -k $KEY_OPTION -V n
  309. make_error_exit
  310. echo "make linux kernel succeed"
  311. }
  312. #编译kernel and Android
  313. make_img_clean()
  314. {
  315. echo "make_img_clean"
  316. cd ${WORK_DIR}/kernel/system
  317. case $COMPILEMODE in
  318. user)
  319. ./build_android.sh -p $PROJECT_NAME -c y -v $COMPILEMODE -j 8 -k $KEY_OPTION -o y
  320. ;;
  321. *)
  322. if [ $Arg_BuildOTA = true ];then
  323. ./build_android.sh -p $PROJECT_NAME -c y -v $COMPILEMODE -j 8 -k $KEY_OPTION -o y
  324. else
  325. ./build_android.sh -p $PROJECT_NAME -c y -v $COMPILEMODE -j 8 -o y
  326. fi
  327. make_error_exit
  328. ;;
  329. esac
  330. cd ${WORK_DIR}/image_creator
  331. if [ x$panel = "x2K" ] || [ x$panel = "x2k" ];then
  332. echo "2K屏项目输出"
  333. python create_rtk_image.py --profile=MOTOROLA_allpackage.cfg --bootcode=n --outfile=install_wipe.img --clean_factory=n
  334. else
  335. echo "4K屏项目输出"
  336. python create_rtk_image.py --profile=NOKIA_allpackage.cfg --bootcode=n --outfile=install_wipe.img --clean_factory=n
  337. fi
  338. make_error_exit
  339. }
  340. #编译kernel and Android noclean
  341. make_img_noclean()
  342. {
  343. echo "make_img_noclean"
  344. cd ${WORK_DIR}/kernel/system
  345. #./build_android.sh [-p project_name] [-c y/n] [-v Build_variant] [-d device_name] {-j job} {-k key_path}
  346. #./build_android.sh -p CASPER.cfg -c n -v userdebug -j 8
  347. case $COMPILEMODE in
  348. user)
  349. ./build_android.sh -p $PROJECT_NAME -c n -v $COMPILEMODE -j 8 -k $KEY_OPTION -o y
  350. make_error_exit
  351. ;;
  352. *)
  353. if [ $Arg_BuildOTA = true ];then
  354. ./build_android.sh -p $PROJECT_NAME -c n -v $COMPILEMODE -j 8 -k $KEY_OPTION -o y
  355. else
  356. ./build_android.sh -p $PROJECT_NAME -c n -v $COMPILEMODE -j 8 -o y
  357. fi
  358. make_error_exit
  359. ;;
  360. esac
  361. cd ${WORK_DIR}/image_creator
  362. if [ x$panel = "x2K" ] || [ x$panel = "x2k" ];then
  363. echo "2K屏项目输出"
  364. python create_rtk_image.py --profile=MOTOROLA_allpackage.cfg --bootcode=n --outfile=install_wipe.img --clean_factory=n
  365. else
  366. echo "4K屏项目输出"
  367. python create_rtk_image.py --profile=NOKIA_allpackage.cfg --bootcode=n --outfile=install_wipe.img --clean_factory=n
  368. fi
  369. make_error_exit
  370. }
  371. # 复制结果(同时需要处理OTA增量编译);
  372. copy_file()
  373. {
  374. if [ $Arg_BuildRelease -eq 1 ];then
  375. OutputDir="${Arg_VersionNum}"-CTS
  376. else
  377. OutputDir=${Arg_VersionNum}
  378. fi
  379. if [ x$panel = "x2K" ] || [ x$panel = "x2k" ];then
  380. echo "2K屏项目输出"
  381. OutputDir="${OutputDir}"_2K
  382. fi
  383. mkdir -p ${WORK_DIR}/Target/${OutputDir}/BOOT
  384. mkdir -p ${WORK_DIR}/Target/${OutputDir}/OTA
  385. mkdir -p ${WORK_DIR}/Target/${OutputDir}/USB
  386. mkdir -p ${WORK_DIR}/Target/${OutputDir}/WIPE
  387. mkdir -p ${WORK_DIR}/Target/${OutputDir}/Write
  388. mkdir -p ${WORK_DIR}/Target/${OutputDir}/Reports
  389. mkdir -p ${WORK_DIR}/Target/${OutputDir}/OTA/IncrementalOTA
  390. if [ $Arg_BuildRelease -eq 1 ];then
  391. cd ${WORK_DIR}/kernel/android/R/vendor/realtek/tool/image_file_creator
  392. cp install_user_4K_RTD288OB7_C1R62_B2B_tv051_R4.img ${WORK_DIR}/Target/${OutputDir}/USB/${OutputDir}.img
  393. md5sum ${WORK_DIR}/Target/${OutputDir}/USB/${OutputDir}.img > ${WORK_DIR}/Target/${OutputDir}/USB/MD5.txt
  394. cp -f ${ANDROID_DIR}/signed-target_files.zip ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-target_files.zip
  395. cp -f ${ANDROID_DIR}/signed-ota_update.zip ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-ota_update.zip
  396. md5sum ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-target_files.zip > ${WORK_DIR}/Target/${OutputDir}/OTA/MD5_target_files.txt
  397. md5sum ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-ota_update.zip > ${WORK_DIR}/Target/${OutputDir}/OTA/MD5_ota_update.zip.txt
  398. else
  399. cd ${WORK_DIR}/kernel/android/R/vendor/realtek/tool/image_file_creator
  400. cp install_userdebug_4K_RTD288OB7_C1R62_B2B_tv051_R4.img ${WORK_DIR}/Target/${OutputDir}/USB/${OutputDir}.img
  401. md5sum ${WORK_DIR}/Target/${OutputDir}/USB/${OutputDir}.img > ${WORK_DIR}/Target/${OutputDir}/USB/MD5.txt
  402. if [ $Arg_BuildOTA = true ];then
  403. cp -f ${ANDROID_DIR}/signed-target_files.zip ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-target_files.zip
  404. cp -f ${ANDROID_DIR}/signed-ota_update.zip ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-ota_update.zip
  405. md5sum ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-ota_update.zip > ${WORK_DIR}/Target/${OutputDir}/OTA/MD5_ota_update.zip.txt
  406. md5sum ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-target_files.zip > ${WORK_DIR}/Target/${OutputDir}/OTA/MD5_target_files.txt
  407. fi
  408. fi
  409. cp -f ${ANDROID_DIR}/out/target/product/R4/system/build.prop ${WORK_DIR}/Target/${OutputDir}/USB/
  410. cd ${WORK_DIR}/kernel/android/R/vendor/realtek/tool/image_file_creator
  411. cp install_wipe.img ${WORK_DIR}/Target/${OutputDir}/WIPE/"${OutputDir}"-wipe.img
  412. md5sum ${WORK_DIR}/Target/${OutputDir}/WIPE/*.img > ${WORK_DIR}/Target/${OutputDir}/WIPE/MD5_WIPE.txt
  413. cp -f ${WORK_DIR}//kernel/fw/bootcode/RTD288OB7_C1R62_B2B_tv051_R4/* ${WORK_DIR}/Target/${OutputDir}/BOOT/
  414. md5sum ${WORK_DIR}/Target/${OutputDir}/BOOT/bootcode_for_rtice.bin > ${WORK_DIR}/Target/${OutputDir}/BOOT/MD5_bootcode_for_rtice.txt
  415. md5sum ${WORK_DIR}/Target/${OutputDir}/BOOT/bootloader.img > ${WORK_DIR}/Target/${OutputDir}/BOOT/MD5_bootloader_img.txt
  416. md5sum ${WORK_DIR}/Target/${OutputDir}/BOOT/bootloader.pkg > ${WORK_DIR}/Target/${OutputDir}/BOOT/MD5_bootloader_pkg.txt
  417. md5sum ${WORK_DIR}/Target/${OutputDir}/BOOT/dvrboot.exe.bin > ${WORK_DIR}/Target/${OutputDir}/BOOT/MD5_dvrboot.exe.txt
  418. md5sum ${WORK_DIR}/Target/${OutputDir}/BOOT/dvrboot.rescue.exe.bin> ${WORK_DIR}/Target/${OutputDir}/BOOT/MD5_dvrboot_rescue_exe.txt
  419. # 处理Dailybuild 增量编译;
  420. if [ $Arg_BuildMark -eq 1 ]; then
  421. # 获取周几:0~6 星期天~星期六
  422. week=$(date +%w)
  423. # 周五:增量编译OTA,需要保存周四的全量包;
  424. if [ ${week} -eq 4 ]; then
  425. day=$(date +%m%d)
  426. echo "保存周四全量编译OTA包,用于周五增量编译OTA" # /home/exchange/Dailybuild/ 该目录必须存在且有权限;
  427. mkdir /home/exchange/Dailybuild/RTK2851M_OTA_$day/
  428. cp -r ${WORK_DIR}/Target/${OutputDir}/OTA/*-target_files.zip /home/exchange/Dailybuild/RTK2851M_OTA_$day/
  429. fi
  430. fi
  431. }
  432. # 保存apk;
  433. save_apk_svn()
  434. {
  435. cp ${ANDROID_DIR}/vendor/tv051/app/prebuilt_app/save_apk_svn ${WORK_DIR}/Target/${OutputDir}/Reports
  436. }
  437. # 保存版本号文件;
  438. save_version_number()
  439. {
  440. var_d=$(date '+%Y%m%d%H')
  441. version_number="${Arg_VersionNum}"_"$var_d"
  442. cd ${WORK_DIR}
  443. repo manifest -r -o ./$version_number.xml
  444. cp -r ${WORK_DIR}/$version_number.xml ${WORK_DIR}/Target/${OutputDir}/Reports/
  445. rm ${WORK_DIR}/$version_number.xml
  446. }
  447. getold()
  448. {
  449. cd ${WORK_DIR}/OTA/old/
  450. files=$(ls $path)
  451. A=".zip";
  452. for filename1 in $files
  453. do
  454. if [[ $filename1 == *$A* ]] ; then
  455. echo "getold-ota"$filename1
  456. break
  457. fi
  458. done
  459. }
  460. getnew()
  461. {
  462. cd ${WORK_DIR}/OTA/new/
  463. files=$(ls $path)
  464. B=".zip";
  465. for filename2 in $files
  466. do
  467. if [[ $filename2 == *$B* ]] ; then
  468. echo "getnew-ota="$filename2
  469. break
  470. fi
  471. done
  472. }
  473. makeota_diff()
  474. {
  475. otaname="51M"_"$filename1"_"$filename2"
  476. cd ${ANDROID_DIR}
  477. ./build/tools/releasetools/ota_from_target_files --signapk_path ${ANDROID_DIR}/out/host/linux-x86/framework/signapk.jar --signapk_shared_library_path ${ANDROID_DIR}/out/host/linux-x86/lib64 -i ${WORK_DIR}/OTA/old/$filename1 ${WORK_DIR}/OTA/new/$filename2 ${WORK_DIR}/OTA/IncrementalOTA/$otaname.zip
  478. md5sum ${WORK_DIR}/OTA/IncrementalOTA/$otaname.zip > ${WORK_DIR}/OTA/IncrementalOTA/MD5_incrementalOTA.txt
  479. }
  480. make_incrementalOTA()
  481. {
  482. yesterday=$(date -d"-1 day" +%m%d )
  483. cp -r /home/exchange/Dailybuild/RTK2851M_OTA_$yesterday/*-target_files.zip ${WORK_DIR}/OTA/old/
  484. cp -r ${WORK_DIR}/Target/${OutputDir}/OTA/*-target_files.zip ${WORK_DIR}/OTA/new/
  485. cd ${ANDROID_DIR}
  486. source build/envsetup.sh
  487. lunch NOKIA-userdebug
  488. getnew
  489. getold
  490. makeota_diff
  491. cp -r ${WORK_DIR}/OTA/IncrementalOTA/ ${WORK_DIR}/Target/${OutputDir}/OTA
  492. }
  493. EnableFarfieldVoice()
  494. {
  495. if [ ${Arg_FarfieldVoice} == true ]; then
  496. echo "开启远场语音"
  497. cd ${ANDROID_DIR}/device/tv051/R4/
  498. findstr=' device\/tv051\/R4\/etc\/permissions\/privapp-permissions-rtk.xml:system_ext\/etc\/permissions\/privapp-permissions-rtk.xml \\'
  499. newline=' device/tv051/R4/etc/permissions/echo_reference.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/echo_reference.xml \\'
  500. sed -i "/^$findstr/a\\$newline" device.mk
  501. fi
  502. }
  503. commitMidware()
  504. {
  505. if [ $Arg_MakeTVMidware = true ]; then
  506. cd "${ANDROID_DIR}"/vendor/tv051/app/prebuilt_app/TVMidwareManager || exit
  507. midware_revision=$(svn info --show-item last-changed-revision)
  508. cd "${ANDROID_DIR}"/vendor/tv051/app/prebuilt_app/tvmidware/ || exit
  509. readme_midware_revision=$(sed -n '/revision/p' readme.txt | awk -F '=' '{print $2}')
  510. if [ $midware_revision -gt $readme_midware_revision ]; then
  511. cp -f ${ANDROID_DIR}/out/target/product/R4/system_ext/framework/tv-midware-manager.jar ${ANDROID_DIR}/vendor/tv051/app/prebuilt_app/tvmidware/tv-midware-manager.jar
  512. cp -f ${ANDROID_DIR}/out/target/product/R4/system_ext/framework/oat/arm/tv-midware-manager.odex ${ANDROID_DIR}/vendor/tv051/app/prebuilt_app/tvmidware/oat/arm/tv-midware-manager.odex
  513. cp -f ${ANDROID_DIR}/out/target/product/R4/system_ext/framework/oat/arm/tv-midware-manager.vdex ${ANDROID_DIR}/vendor/tv051/app/prebuilt_app/tvmidware/oat/arm/tv-midware-manager.vdex
  514. cd "${ANDROID_DIR}"/vendor/tv051/app/prebuilt_app/tvmidware || exit
  515. sed -i "s/revision=$readme_midware_revision/revision=$midware_revision/" readme.txt
  516. svn add tv-midware-manager.jar
  517. svn add readme.txt
  518. svn add oat/
  519. svn commit -m "dailybuild commit revision $midware_revision"
  520. fi
  521. cd "${ANDROID_DIR}"/vendor/tv051/app/prebuilt_app/ || exit
  522. rm -rf TVMidwareManager/
  523. fi
  524. }
  525. setMakeFileBuildNumber()
  526. {
  527. cd "${ANDROID_DIR}"/build/make || exit
  528. git checkout -- core/Makefile
  529. # 0:11 - 取左边11个字符判断是否="V8-T851MGL-LF1V"
  530. if [ ${Arg_VersionNum:0:15} == 'V8-T851MGL-LF1V' ]; then
  531. BUILD_NUMBER=${Arg_VersionNum:0-3} #0-3:取最后3位;
  532. else
  533. BUILD_NUMBER='dailybuild'${Arg_VersionNum##*debug}
  534. fi
  535. echo ${BUILD_NUMBER}
  536. sed -i "s/BF_BUILD_NUMBER := 000/BF_BUILD_NUMBER := ${BUILD_NUMBER}/g" core/Makefile
  537. sed -i "s/BUILD_NUMBER_FROM_FILE:= 000/BUILD_NUMBER_FROM_FILE:= ${BUILD_NUMBER}/g" core/Makefile
  538. }
  539. compile()
  540. {
  541. setMakeFileBuildNumber
  542. pre_build
  543. build_img
  544. copy_file
  545. save_apk_svn
  546. save_version_number
  547. if [ $IC_OTA = true ];then
  548. make_incrementalOTA
  549. fi
  550. commitMidware
  551. echo "$(date '+%Y-%m-%d %H:%S') compile finished"
  552. }
  553. main()
  554. {
  555. echo "Start main:${CURR_TIME}"
  556. # 如果外部参数>0,解析参数;
  557. if [ $# -gt 0 ]; then
  558. parseArgument $@
  559. else
  560. manualArgument
  561. fi
  562. # 初始化参数;
  563. initArgument
  564. # 编译;
  565. compile
  566. echo "$(date '+%Y-%m-%d %H:%S') compile finished"
  567. }
  568. main $@