Android Framework 編譯環境 分析

Android編譯過程

1. 初始化參數設置

2. 檢查環境變量和目標環境

3. 選擇lunch並讀取目標配置和平臺信息

4. 清空輸出目錄

5. 編譯

6.生成升級包

 

1. .build/envsetup.sh 分析

1. 加載編譯命令

在 .build/envsetup.sh 這個文件中,是將下面這些命令加載到終端上,也就是說,在還未執行 source .build/envsetup.sh 這條命令之前,lunch等命令是無法使用的。

 

2. 加載平臺信息

當執行完 source .build/envsetup.sh 命令之後,發現下面include了一些device目錄下的腳本文件,而這些文件的作用,就是當我們選lunch的時候,需要從這裏面選對應的平臺信息。

當執行 lunch 命令的時候,會列出所有的lunch,而這些lunch信息就是從 source .build/envsetup.sh 加載過來的。

 

2. lunch 函數分析

先找到lunch函數的代碼。

它首先就有一個判斷,如果這個lunch後面跟了參數,那麼就直接決定使用哪個分支;如果lunch後面沒有跟參數,那麼它就把所有的分支全部列舉出來。

print_lunch_menu 這個函數的作用就是將所有的lunch分支全部都列舉出來,從這個代碼中可以看到保存lunch信息的變量是 LUNCH_MENU_CHOICES,那LUNCH_MENU_CHOICES是在什麼時候被添加的呢?

這個 add_lunch_combo 函數就是添加lunch分支的函數。

假如說拿一個 source .build/envsetup.sh 加載的其中一個sh腳本來說,在打開腳本的末尾可以清楚的看到:

也就是說它在source .build/envsetup.sh 的時候,就執行了add_lunch_combo函數,將 fiber_a31st-eng 和 fiber_a31st-eng 加載到了環境變量中去;相反,假如將 add_lunch_combo fiber_a31st-eng 這一行註釋掉,在lunch的時候也會將這個分支給刪除了。

當從列出的分支選擇出想要的分支之後,lunch函數就會把所選擇的分支記錄下來,做一系列的初始化工作,這樣就完成了環境變量的配置。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章