工作上需要外測,所以必須準備可以帶出去Build Code的環境,
當然在自己的Notebook上架虛擬機器是比較便利的,
想說新進同事們的新機器上跑Ubuntu 14.04沒有問題,
就直接安裝卻是災難的開始…
灌好Unbuntu環境以後,當然第一步就是到Android的安裝指南:
繼續完成JAVA JRE, JDK 後續編譯軟體的佈建,
然後透過rsync把我工作機上的開發套件整個搬移過來,
rsync -av --delete -e ssh 192.168.1.100:~/Workspace/android_project ~/Workspace |
當然Build的過程不會這麼順利,主要是遇到缺哪個套件就去裝它這樣,
惡夢是,我居然在rsync之前再工作機上敲了repo sync
結果這個周末我們code base上就有待解的issues導致沒辦法順利build出fw.
最後找了個指令把整個code base退回一個禮拜前,
repo forall -c 'HAHA=`git log --before="3 days" -1 --pretty=format:"%H"`;git reset --hard $HAHA' |
確保工作機上可以順利build出後,才真正開始浮出問題:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | Export includes file: frameworks/support/v8/renderscript/jni/Android.mk -- out/host/linux-x86/obj/EXECUTABLES/rsg-generator_support_intermediates/export_includes host Executable: rsg-generator_support (out/host/linux-x86/obj/EXECUTABLES/rsg-generator_support_intermediates/rsg-generator_support) target Generated: libRSSupport <= frameworks/rs/rsgApiStructs.h.rsg Copy: out/target/product/msm8909/obj/SHARED_LIBRARIES/libRSSupport_intermediates/rsgApiStructs.h target Generated: libRSSupport <= frameworks/rs/rsgApiFuncDecl.h.rsg Copy: out/target/product/msm8909/obj/SHARED_LIBRARIES/libRSSupport_intermediates/rsgApiFuncDecl.h target Generated: libRSSupport <= frameworks/rs/rsgApi.cpp.rsg Copy: out/target/product/msm8909/obj/SHARED_LIBRARIES/libRSSupport_intermediates/rsgApi.cpp target Generated: libRSSupport <= frameworks/rs/rsgApiReplay.cpp.rsg Copy: out/target/product/msm8909/obj/SHARED_LIBRARIES/libRSSupport_intermediates/rsgApiReplay.cpp Installing recovery patch to system partition Warning: could not find SYSTEM/build.prop in <built-in function zip> using prebuilt recovery.img from BOOTABLE_IMAGES... using prebuilt boot.img from BOOTABLE_IMAGES... Traceback (most recent call last): File "./build/tools/releasetools/make_recovery_patch", line 53, in <module> main(sys.argv[1:]) File "./build/tools/releasetools/make_recovery_patch", line 49, in main common.MakeRecoveryPatch(input_dir, output_sink, recovery_img, boot_img) File "/home/scottj/Workspace/PCT5230_LA13/LINUX/android/build/tools/releasetools/common.py", line 1398, in MakeRecoveryPatch _, _, patch = d.ComputePatch() File "/home/scottj/Workspace/PCT5230_LA13/LINUX/android/build/tools/releasetools/common.py", line 1089, in ComputePatch p = Run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) File "/home/scottj/Workspace/PCT5230_LA13/LINUX/android/build/tools/releasetools/common.py", line 83, in Run return subprocess.Popen(args, **kwargs) File "/usr/lib/python2.7/subprocess.py", line 710, in __init__ errread, errwrite) File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory make: *** [out/target/product/msm8909/system/bin/install-recovery.sh] Error 1 #### make failed to build some targets (01:33:48 (hh:mm:ss)) #### XXXXXX [ Build ANDROID Failed !! ] XXXXXX |
首先當然先問問Google大神拉,的確有伙伴是跑出一模一樣的錯誤訊息,
但是檢查我的out/system/底下是有出現build.prop這個檔案,
而且照樓主的解決方式是JAVA編譯環境的問題
但這邊的情況就只有裝設JDK7而已,
反而是自己工作機上JAVA6&7混合卻沒見過類似的錯誤訊息.
顯然問題並不是出在這.
然後重新檢視Google來的文章,終於看到一線曙光:
(which is basically always reproducible when building with -j1)
所以這就反映了這個錯誤訊息後面的情況”raise child_exception”
於是馬上去檢查我們的build script,果然被帶入了這個參數.
原來我們的Build Script有一段自動去帶目前機器上的CPU數目的機制
egrep '^processor' /proc/cpuinfo | wc -l |
再加上VirtualBox預設就是帶一顆CPU去跑虛擬機器,問題就是在這邊了,
不去修改原本Code的情況下,只要增加VM上的CPU數目問題就解了.
Refers:
https://source.android.com/source/initializing.html
http://newsletter.ascc.sinica.edu.tw/news/read_news.php?nid=1742
http://blog.csdn.net/zrf1335348191/article/details/51678730
http://review.cyanogenmod.org/#/c/135641/