Android 8.0編譯過程


Android編譯系統中的Android.bp、Blueprint與Soong
http://note.qidong.name/2017/08/android-blueprint/

工具鏈關系

Android.mk、Android.bp、Soong、Blueprint、Ninja,它們之間到底有什么關系? 以下用簡單的方式表達這幾個概念之間的作用關系。

Android.bp --> Blueprint --> Soong --> Ninja Makefile or Android.mk --> kati --> Ninja (Android.mk --> Soong --> Blueprint --> Android.bp) 

Blueprint是生成、解析Android.bp的工具,是Soong的一部分。 Soong則是專為Android編譯而設計的工具,Blueprint只是解析文件的形式,而Soong則解釋內容的含義。

Android.mk可以通過Soong提供的androidmk轉換成Android.bp,但僅限簡單配置。 目前Oreo的編譯流程中,仍然是使用kati來做的轉換。

現存的Android.mk、既有的Android.bp,都會分別被轉換成Ninja。 從Android.mk與其它Makefile,會生成out/build-<product_name>.ninja文件。 而從Android.bp,則會生成out/soong/build.ninja。 此外,還會生成一個較小的out/combined-<product_name>.ninja文件,負責把二者組合起來,作為執行入口。

最終,Ninja文件才是真正直接控制源碼編譯的工具。


 

Android 8.0編譯過程初步分析
https://blog.csdn.net/wear_/article/details/88543353

概述
要想知道編譯的過程,其實看編譯的腳本,以及編譯時產生的log是比較快的方法。

編譯相關的核心文件位於build/core下,而生成的文件在out/soong下,里面有編譯過程中產生的編譯相關文件。

在編譯過程中,首先將所有的android.bp文件收集成out/soong/build.ninja.d,然后以此為基礎生成out/soong/build.ninja規則。而Android.mk收集后生成的是build-aosp_arm.jinja文件。

soong處理后的bp文件生成build.ninja的同時還包含out/soong/Android-aosp_arm.mk,這個文件是編譯完成后模塊的安裝腳本,負責將模塊安裝到對應位置。

在out/soong目錄下有兩個文件.minibootstrap/build.ninja 和.bootstrap/build.ninja兩個目錄。.minibootstrap/build.ninja 主要是用來編譯blueprint和生成.bootstrap/build.ninja。而.bootstrap/build.ninja主要是生成 soong相關工具和out/soong/build.ninja文件。
---------------------

Android8.0.0-r4的編譯系統
https://blog.csdn.net/nwpushuai/article/details/79372837

一、 概述
1.1 編譯系統變化

從Android 7.0開始,android的編譯系統發生了變化,之前依賴Makefile組織編譯系統,從7.0開始逐步引入了kati soong(optional未正式使用,需要USE_SOONG=true開啟),將Android.mk文件轉化成ninja文件,使用ninja文件對編譯系統進行管理。

從8.0開始,android 引入了Android.bp文件來替代之前的Android.mk文件,不同於Android.mk,Android.bp只是純粹的配置文件,不包括分支、循環等流程控制。在android項目上如何進行選擇編譯、解析配置、轉換成ninja等,Soong就被創造出來,將Android.bp轉換為ninja文件進行管理。

同時,Soong還會編譯長生一個androidmk命令可以手動將Android.mk轉換成Android.bp文件。

1.2 代碼位置

Kati的位置是在build/kati/中,平台也自帶編譯好的ckati

Soong的位置在build/soong,它和build/blueprint同時期作用,他們之間的系統關系如下:

Android.bp --> Blueprint --> Soong --> Ninja

Makefile or Android.mk --> kati --> Ninja

Blueprint是生成、解析Android.bp 的工具,是Soong的一部分。Soong是專門為Android的編譯而設計的工具,blueprint只是解析文件的形式,而soong則解釋內容的含義。

Blueprint和Soong都是有Go語言寫的項目,從7.0開始在prebuilts/go/目錄下新增了go語言的運行環境,在編譯是使用。

1.3 Android ninja組織

在編譯過程中,將所有的android.bp文件搜集成out\soong\build.ninja.d , 並以此為基礎生成out\soong\build.ninja規則。

由所有的Android.mk生成build-aosp_arm.ninja文件。通過combined-aosp_arm.ninja將兩個文件組織起來。

builddir = out

include out/build-aosp_arm.ninja

include out/soong/build.ninja

build out/combined-aosp_arm.ninja: phony out/soong/build.ninja

通過編譯的LOG,首先搜集所有的bp文件生成build.ninja,然后搜集所有的mk文件生成build-aosp-arm.ninja文件。

out/soong/.bootstrap/bin/soong_build out/soong/build.ninja

out/build-aosp_arm-cleanspec.ninja is missing, regenerating...

out/build-aosp_arm.ninja is missing, regenerating...

[1/894] including out/soong/Android-aosp_arm.mk ...

經過試驗表明,soong處理后的bp文件生成build.ninja的同時還包含out/soong/Android-aosp_arm.mk,這個文件是編譯完成后模塊的安裝腳本,負責將模塊安裝到對應位置。比如我們現在處理的vndk相關vendor處理就是在這個目錄下進行的。

在out/soong目錄下有兩個文件.minibootstrap/build.ninja 和.bootstrap/build.ninja兩個目錄。.minibootstrap/build.ninja 主要是用來編譯blueprint和生成.bootstrap/build.ninja。而.bootstrap/build.ninja主要是生成 soong相關工具和out/soong/build.ninja文件。

 

二 、編譯流程
編譯步驟如下:

   1、 source build/envsetup.sh:加載命令

   2、 lunch:選擇平台編譯選項

   3、 make:執行編譯
---------------------


Android編譯系統分析
https://blog.csdn.net/zirconsdu/article/details/8005415

 

2.2 LOCAL_XXX的列表
Include $(CLEAR_VARS)后,可以做為局部宏定義使用.

說明:
    必須定義, 在app或package的Android.mk中必須給定值。
    可選定義,在app或package的Android.mk中可以也可以不給定值。
    不用定義,在app或package的Android.mk中不要給定值,腳本自動指定值。

LOCAL_PATH,            當前路徑,必須定義。
LOCAL_PACKAGE_NAME,    必須定義,package的名字,這個名字在腳本中將標識app或package。
LOCAL_MODULE_SUFFIX,    不用定義,module的后綴,=.apk。
LOCAL_MODULE,            不用定義,=$(LOCAL_PACKAGE_NAME)。
LOCAL_JAVA_RESOURCE_DIRS,    不用定義。
LOCAL_JAVA_RESOURCE_FILES,    不用定義。
LOCAL_MODULE_CLASS,    APPS/ETC(for firmware)/EXECUTABLES/STATIC_LIBRARYS/SHARED_LIBRARYS/JAVA_LIBRARYS
LOCAL_MODULE_TAGS,        可選定義。默認optional。取值范圍user debug eng tests optional samples shell_ash shell_mksh。
LOCAL_ASSET_DIR,    可選定義,推薦不定義。默認$(LOCAL_PATH)/assets
LOCAL_RESOURCE_DIR,    可選定義,推薦不定義。默認product package和device package相應的res路徑和$(LOCAL_PATH)/res。

LOCAL_EXPORT_PACKAGE_RESOURCES,    可選定義,默認null。如果允許app的資源被其它模塊使用,則設置true。
LOCAL_PROGUARD_ENABLED,    可選定義,默認為full,如果是user或userdebug。取值full, disabled, custom。

LOCAL_MANIFEST_FILE    AndroidManifest.xml
full_android_manifest,        不用定義,=$(LOCAL_PATH)/AndroidManifest.xml。

LOCAL_CERTIFICATE,    可選定義,默認為testkey。最終
        private_key := $(LOCAL_CERTIFICATE).pk8
        certificate := $(LOCAL_CERTIFICATE).x509.pem

 


免責聲明!

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



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