Android源代碼編譯過程及指令


編譯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文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM