当前位置: 首页 > news >正文

Android 增加宏开关控制android.bp

android 全局定义的宏开关控制不同的feature。android 包含c++ 和 java,

java只能通过全局属性作为判断,

c++,在android.bp中需要通过go语言定义协助,可以参考

Android.bp正确姿势添加宏控制编译指南_android.bp如何实现控制逻辑-CSDN博客

下面的例子是工程中在surfaceflinger里面用到的

 1.   Java    使用属性控制

static final boolean mIsMMxxx = SystemProperties.getBoolean("ro.vendor.xxx.sharing", false);

2.  在和android.bp同级目录下定义surface.go ,并且在同一级android.bp中引入xxx.go,这样当前文件夹下的cpp文件就可以识别到MULTIMEDIA_XXX_SUPPORT宏定义了

 services/surfaceflinger/Android.bp

bootstrap_go_package {

    name: "soong-xxxparser",

    pkgPath: "android/soong/xxxparser",

    deps: [

    "blueprint",

    "blueprint-pathtools",

    "soong",

    "soong-android",

    "soong-cc",

    "soong-genrule",

    ],

    srcs: [

        "surfaceflinger.go",

    ],

    pluginFor: ["soong_build"],

}

xxxparser_defaults {

    name: "xxxparser_defaults"

}

cc_defaults {

    name: "libsurfaceflinger_production_defaults",

    defaults: ["libsurfaceflinger_defaults",

               "xxxparser_defaults",

    ],

Surfaceflinger.go

package xxxparser

import (

        "android/soong/android"

        "android/soong/cc"

        "fmt"

)

func init() {

    android.RegisterModuleType("xxxparser_defaults", xxxParserDefaultsFactory)

}

func xxxParserDefaultsFactory() (android.Module) {

    module := cc.DefaultsFactory()

    android.AddLoadHook(module, xxxParserDefaults)

    return module

}

func xxxParserDefaults(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 []string

    fmt.Println("MULTIMEDIA_XXX_SUPPORT:", ctx.DeviceConfig().multimedia_xxx_support())

    if ctx.DeviceConfig().multimedia_xxx_support() == "yes" {

          cppflags = append(cppflags,"-DMULTIMEDIA_XXX_SUPPORT")

    }

    return cppflags

}

3. 全局定义开关

ProjectConfig.mk

MULTIMEDIA_XXX_SUPPORT=yes

device/xxx/device.mk

宏定义通过系统属性prop管理java文件,具体宏定义需要通过go语言定义去管理c++

ifeq ($(strip $(MULTIMEDIA_XXX_SUPPORT)),yes)

PRODUCT_PROPERTY_OVERRIDES += \

    ro.vendor.multimedia.xxx=true

endif

4. 变量的值作为字符串添加到 JSON 对象中,键名为 multimedia_xxx_support

$(call add_json_str,  multimedia_xxx_support, $(MULTIMEDIA_XXX_SUPPORT))

5. 在go配置中增加multimedia_xxx_support方法,通过该方法获取deviceConfig类型的variale变量值multimedia_xxx_support

build/soong/android/config.go

func (c *deviceConfig) multimedia_xxx_support() string {

return String(c.config.productVariables.multimedia_xxx_support)

}

Build/soong/android/variable.go

multimedia_xxx_support  *string `json:",omitempty"`


http://www.mrgr.cn/news/31016.html

相关文章:

  • 推荐五种msvcr71.dll丢失的解决方法,msvcr71.dll为什么会丢失?
  • 使用canal.deployer-1.1.7和canal.adapter-1.1.7实现mysql数据同步
  • 数据库的char 和 varchar 有什么不同
  • java(2)方法的使用
  • ubuntu下使用qt编译QOCI(libqsqloci.so)驱动详解及测试
  • 三维手势 handpose 3D RGB 手势3D建模 三维建模-手势舞 >> DataBall
  • VSCode开发ros程序无法智能提示的解决方法(一)
  • 苹果M4 MacBook Air被曝2025Q1发布 屏幕面板10月出货
  • 实例讲解电动汽车钥匙Start上下电控制策略及Simulink建模方法
  • 程序员如何提升核心竞争力并应对技术变革》
  • 希亦超声波清洗机值得购买吗?百元清洁技术之王,大揭秘!
  • java基础概念23-接口
  • webpack4 target:“electron-renderer“ 打包加速配置
  • XHTML学习
  • 组题能力研判:基于教师上传试卷的深度分析
  • 使用systemctl实现开机自启动jar包
  • 【医学半监督】对比互补掩蔽的自监督预训练半监督心脏图像分割
  • gRPC介绍
  • 10分钟搞清楚为什么Transformer中使用LayerNorm而不是BatchNorm
  • 掌握Spring Boot数据库集成:用JPA和Hibernate构建高效数据交互与版本控制