Android.bp 添加宏开关【转】
本文轉(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"],參考:
轉(zhuǎn)載于:https://www.cnblogs.com/zzb-Dream-90Time/p/10195062.html
總結(jié)
以上是生活随笔為你收集整理的Android.bp 添加宏开关【转】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SyncNavigator 注册机 使用
- 下一篇: 【Android】线程池