Android編譯系統中的Android.bp


https://www.cnblogs.com/bluestorm/p/10895005.html

 

Android.bp,是用來替換Android.mk的配置文件。 它使用Blueprint框架來解析,最終轉換成Ninja文件。

與Android.mk不同的是,Android.bp是純粹的配置文件,不包含分支、循環等流程控制,也不能做算數、邏輯運算。 與此同時,Ninja文件也是如此。 這就產生了一些新的問題與需求——在Android項目上進行選擇編譯、解析配置、轉換成Ninja等——Soong應運而生。 Soong其實就相當於Makefile編譯系統的核心,即build/make/core/下面的內容。 它負責提供Android.bp的含義定義與解析,並將之轉換為Ninja文件。。

 

BlueprintSoong都是由Golang寫的項目。 從Android Nougat開始,prebuilts/go/目錄下新增了Golang所需的運行環境,在編譯時使用。

Android.bp以及相關支持,從Android Nougat開始加入,從Android Oreo(8.0)開始默認開啟。 如果需要在Android Nougat的版本使用,需要在執行編譯時添加變量。

 

Android.mk轉換Android.bp實例

下面,以一個AOSP上的簡單模塊,system/core/sdcard/Android.mk,來做為案例。

  1.  
    LOCAL_PATH := $(call my-dir)
  2.  
     
  3.  
    include $(CLEAR_VARS)
  4.  
     
  5.  
    LOCAL_SRC_FILES := sdcard.cpp fuse.cpp
  6.  
    LOCAL_MODULE := sdcard
  7.  
    LOCAL_CFLAGS := -Wall -Wno-unused-parameter -Werror
  8.  
    LOCAL_SHARED_LIBRARIES := libbase libcutils libminijail libpackagelistparser
  9.  
     
  10.  
    LOCAL_SANITIZE := integer
  11.  
     
  12.  
    include $(BUILD_EXECUTABLE)

這是一個編譯二進制可執行文件的小模塊,內容非常簡單。 通過執行androidmk Android.mk > Android.bp,可以轉換成Android.bp。

  1.  
    cc_binary {
  2.  
    srcs: [
  3.  
    "sdcard.cpp",
  4.  
    "fuse.cpp",
  5.  
    ],
  6.  
    name: "sdcard",
  7.  
    cflags: [
  8.  
    "-Wall",
  9.  
    "-Wno-unused-parameter",
  10.  
    "-Werror",
  11.  
    ],
  12.  
    shared_libs: [
  13.  
    "libbase",
  14.  
    "libcutils",
  15.  
    "libminijail",
  16.  
    "libpackagelistparser",
  17.  
    ],
  18.  
    sanitize: {
  19.  
    misc_undefined: [ "integer"],
  20.  
    },
  21.  
    }

可以看出,雖然行數變多,但其實含義更明確了


免責聲明!

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



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