日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android.bp 添加宏开关【转】

發(fā)布時(shí)間:2024/4/15 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android.bp 添加宏开关【转】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文轉(zhuǎn)載自:https://github.com/zzb2760715357/document/blob/master/android_doc/Android.bp%E6%B7%BB%E5%8A%A0%E5%AE%8F%E5%BC%80%E5%85%B3.md#androidbp-%E6%B7%BB%E5%8A%A0%E5%AE%8F%E5%BC%80%E5%85%B3

Android.bp 添加宏開關(guān)

平臺(tái): android 8.1 + mt6739

作者: 李強(qiáng) 日期: 2018-04-18

以前在android系統(tǒng)控制編譯的Android.mk不是純文本形式,里面還有流控制,而Android.bp是類似JSON的純文本形式. 對(duì)于Android.mk里面流控制部分,在Android.bp里要借助使用go語言文件去進(jìn)行控制.

這里的添加宏開關(guān)兩種情況:

  • 無流控制的宏開關(guān)添加
  • 有流控制的宏開關(guān)添加

1.無流控制的宏開關(guān)添加Demo

1.1 在已有的Android.bp中添加宏

首先找要添加的Android.bp文件中是否有cppflags或者'cflags',基本上都是有的,例如:

cc_defaults {name: "fs_mgr_defaults",defaults: ["BBB"],// new addsanitize: {misc_undefined: ["integer"],},local_include_dirs: ["include/"],cppflags: ["-Werror", "-DMTK_FSTAB_FLAGS"], }

例如要添加的宏:

LOCAL_CFLAGS += -DTEST1 LOCAL_CFLAGS += -DTEST2=1

將上面的宏補(bǔ)在原有的'cc_defaults'里面的'cppflags'后面:

cc_defaults {name: "fs_mgr_defaults",sanitize: {misc_undefined: ["integer"],},local_include_dirs: ["include/"],cppflags: ["-Werror","-DMTK_FSTAB_FLAGS","-DTEST1","-DTEST2=1"], }

1.2 androidmk命令

如果要轉(zhuǎn)化的Android.mk內(nèi)容沒有流控制,可以使用Androidmk命令直接轉(zhuǎn)換. 該命令在:out/soong/host/linux-x86/bin/androidmk,使用方法:

androidmk Android.mk > Android.bp

如果要轉(zhuǎn)換的Android.mk里面沒有復(fù)雜結(jié)構(gòu),就可以轉(zhuǎn)換成功,如果報(bào)錯(cuò)就可能有復(fù)雜結(jié)構(gòu).需要手動(dòng)轉(zhuǎn)換.

2. 有流控制的宏開關(guān)添加Demo

在Android.mk中添加的宏開關(guān):

ifeq ($(ENABLE_USER2ENG),true) LOCAL_CFLAGS += -DALLOW_ADBD_DISABLE_VERITY=1 LOCAL_CFLAGS += -DENABLE_USER2ENG=1 endif

如果要將以上的宏開關(guān)添加到Android.bp中去要通過使用go語言書寫一個(gè)新文件:

比如我的修改是在system/core/fs_mgr/Android.bp,那么要在添加?system/core/fs_mgr/fs_mgr.go:

package fs_mgrimport ("android/soong/android""android/soong/cc""fmt" )func init() {// for DEBUGfmt.Println("init start")android.RegisterModuleType("AAA", fs_mgrDefaultsFactory) }func fs_mgrDefaultsFactory() (android.Module) {module := cc.DefaultsFactory()android.AddLoadHook(module, fs_mgrDefaults)return module }func fs_mgrDefaults(ctx android.LoadHookContext) {type props struct {Cflags []string}p := &props{}p.Cflags = globalDefaults(ctx)ctx.AppendProperties(p) }func globalDefaults(ctx android.BaseContext) ([]string) {var cppflags []stringfmt.Println("ENABLE_USER2ENG:",ctx.AConfig().IsEnvTrue("ENABLE_USER2ENG"))if ctx.AConfig().IsEnvTrue("ENABLE_USER2ENG") {cppflags = append(cppflags,"-DALLOW_ADBD_DISABLE_VERITY=1","-DENABLE_USER2ENG=1")}return cppflags }

Android.bp需要修改的地方:

/// add start bootstrap_go_package {// name and pkgPath need to according to your modulename: "soong-fs_mgr",pkgPath: "android/soong/fs_mgr",deps: ["blueprint","blueprint-pathtools","soong","soong-android","soong-cc","soong-genrule",],srcs: [// include new add .go file"fs_mgr.go",],pluginFor: ["soong_build"], }// AAA is a module AAA {name: "BBB", } /// add endcc_defaults {name: "fs_mgr_defaults",defaults: ["BBB"],// new addsanitize: {misc_undefined: ["integer"],},local_include_dirs: ["include/"],cppflags: ["-Werror", "-DMTK_FSTAB_FLAGS"], }

參照該例子修改時(shí)注意AAA,BBB的對(duì)應(yīng)關(guān)系即可.

3. 一些相關(guān)的經(jīng)驗(yàn)

3.1

在go文件中使用fmt.Println添加打印信息,可以調(diào)試go代碼有沒有按照正確的.使用方式參考上面的例子. 這些打印信息會(huì)在用mmm或者make命令編譯是打印在屏幕上.

3.2

如果添加了*.go文件,可以在使用到宏的地方加入編譯會(huì)報(bào)錯(cuò)的代碼,例如上面的例子:

#ifdef ALLOW_ADBD_DISABLE_VERITYif (verity.disabled) {retval = FS_MGR_SETUP_VERITY_DISABLED;LINFO << "Attempt to cleanly disable verity - only works in USERDEBUG";goto out;} #endif

改為:

#ifdef ALLOW_ADBD_DISABLE_VERITY 11111111111if (verity.disabled) {retval = FS_MGR_SETUP_VERITY_DISABLED;LINFO << "Attempt to cleanly disable verity - only works in USERDEBUG";goto out;} #endif

這樣就可以很快的驗(yàn)證自己添加的flag是否生效.

4. Android.bp的相關(guān)知識(shí)

該部分內(nèi)容結(jié)合上面的例子,主要參考android/build/soong/README.md

4.1 注釋

有兩種形式:單行注釋//和多行注釋/* */

4.2 module

在上文的例子中:

AAA {name: "BBB", }

AAA?必須要在go文件中注冊(cè),name的值必須要是在所有Android.bp文件中是唯一的(建議按照所在的模塊取名字). 每個(gè)module必須要有一個(gè)name.在module中的值都是用name: value的形式來,比如:

name: "libfstab",vendor_available: true,defaults: ["fs_mgr_defaults"],srcs: ["fs_mgr_fstab.cpp","fs_mgr_boot_config.cpp","fs_mgr_slotselect.cpp",],export_include_dirs: ["include_fstab"],header_libs: ["libbase_headers"],

參考:

  • Android編譯系統(tǒng)中的Android.bp、Blueprint與Soong
  • Android 編譯系統(tǒng)之Android.bp
  • 轉(zhuǎn)載于:https://www.cnblogs.com/zzb-Dream-90Time/p/10195062.html

    總結(jié)

    以上是生活随笔為你收集整理的Android.bp 添加宏开关【转】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。