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);

  1. 在和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

}

  1. 全局定义开关

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

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

(call add_json_str, multimedia_xxx_support, (MULTIMEDIA_XXX_SUPPORT))

  1. 在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"`

相关推荐
蒸鱼Yuzheng6 小时前
设备端性能工件可靠导出:断点续传、哈希、manifest 与失败恢复
android·自动化测试·python·adb·数据完整性
美狐美颜sdk8 小时前
直播APP接入美颜SDK后出现卡顿怎么办?从性能瓶颈寻找解决方案
android·人工智能·音视频·美颜sdk·直播美颜sdk
美狐美颜SDK开放平台8 小时前
直播APP开发实战:从摄像头调用到视频美颜sdk集成
android·人工智能·计算机视觉·音视频·直播美颜sdk
alexhilton9 小时前
生命周期感知的多模块启动模式
android·kotlin·android jetpack
三少爷的鞋10 小时前
Android 架构指南:suspend 如何响应取消?别再给 Repository 加 `cancel()`
android
迪飞特科技10 小时前
【无标题】
android·人工智能·本地化大模型
FlightYe11 小时前
视界原理之2D视频(二):视频文件里有什么
android·linux·网络·c++·ffmpeg·音视频·aac
传奇开心果编程11 小时前
【Flutter入门练中学】第8课:动画与过渡
android·学习·flutter·ui·ios
传奇开心果编程13 小时前
【Flutter入门练中学】第11课:状态管理进阶与声明式路由
android·学习·flutter·ui·ios
JasonSJX13 小时前
四端自建播放器怎么落地:Android、iOS、tvOS、Tizen 的 DRM 播放 SDK 技术盘点
android·ios·音视频·视频防录屏·加密保护课程·直播安全