編譯Android源代碼分為兩種情況:
1. 完整編譯源碼:
./mk_aliphone.sh --> 完整編譯腳本
--> 6735 輸入對應的編號
--> userdebug
adb
new(-->remake)
上述指令流程后,若報錯,則將錯誤解決后,執行. ./mk_aliphone.sh后開始編譯流程
2. 源碼編譯完成后,單獨編譯模塊:
. ./build/envsetup.sh (當前目錄:build/目錄上級目錄) --> 初始化環境的腳本:envsetup.sh
lunch(在當前目錄即可)選擇CPU:full_aeon6735_65c_s_l1-userdebug
選擇要編譯的模塊(即:進入到想要編譯的模塊)比如:~/v6SourceCode/aliyunos/packages/apps/uShell(只需要執行一次腳本和lunch;再次進入時就不需要)
mm -b(觸發編譯)
source xxx.sh 初始化編譯環境
lunch 指定本次編譯的目標設備以及編譯類型
make -j12 開始編譯,默認是編譯整個系統,參數表示編譯的job數量
單獨編譯apk結果目錄:~/v6SourceCode/out/target/product/generic(aeon6735_65c_s_l1)/system/app/uShell(對應編譯的模塊)
單獨編譯apk后,將結果apk安裝到設備中,一般有兩種方式:adb install和adb push;可以分別使用兩種方式安裝。
其他資料:引自:http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359.html 對比博文:http://gityuan.com/2016/03/19/android-build/https://www.sdk.cn/news/3313
按照Google給出的編譯步驟如下:
1. source build/envsetup.sh 加載編譯指令(envsetup.sh文件存放在Android源代碼根目錄下的build目錄下)
2. lunch 選擇平台編譯選項 --> 控制台列出所有可供選擇的平台,使用哪個平台根據具體情況而定,本次選擇6735_debug
3. make 執行編譯
分析1:source build/envsetup.sh
上述指令用來將envsetup.sh里的所有指令加載到環境變量中,比如:網上提供的指令列表
function help() # 顯示幫助信息 function get_abs_build_var() # 獲取絕對變量 function get_build_var() # 獲取絕對變量 function check_product() # 檢查product function check_variant() # 檢查變量 function setpaths() # 設置文件路徑 function printconfig() # 打印配置 function set_stuff_for_environment() # 設置環境變量 function set_sequence_number() # 設置序號 function settitle() # 設置標題 function choosetype() # 設置type function chooseproduct() # 設置product function choosevariant() # 設置variant function tapas() # 功能同choosecombo function choosecombo() # 設置編譯參數 function add_lunch_combo() # 添加lunch項目 function print_lunch_menu() # 打印lunch列表 function lunch() # 配置lunch function m() # make from top function findmakefile() # 查找makefile function mm() # make from current directory function mmm() # make the supplied directories function croot() # 回到根目錄 function cproj() function pid() function systemstack() function gdbclient() function jgrep() # 查找java文件 function cgrep() # 查找c/cpp文件 function resgrep() function tracedmdump() function runhat() function getbugreports() function startviewserver() function stopviewserver() function isviewserverstarted() function smoketest() function runtest() function godir () # 跳到指定目錄 405
具體看一下YunOS平台上的envsetup.sh文件內容:
envsetup.sh主要的作用如下:
1. 加載編譯時使用到的函數命令:m、mm等等
2. 添加兩個編譯選項:generic-eng和simulator
3. 查找vendor/<廠商目錄>/和vendor/<廠商目錄>/build/下的vendorsetup.sh;如果存在的話,就加載執行,添加廠商自己定義的編譯選項
分析2:lunch
執行lunch命令,它會打印出一個選擇菜單,列出可用的編譯選項;lunch命令是envsetup.sh里定義的一個命令,用來讓用戶選擇編譯項,來定義Product和編譯過程中用到的全局變量。
列表中可能有的字段定義:
eng:工程版本
user:最終用戶版本
userdebug:調試測試版本
tests:測試版本
一般而言,tests和userdebug兩個版本是不能交付給最終用戶的。
分析3:make
執行make命令的結果就是去執行當前目錄下的Makefile文件