go语言控制android.bp选择性编译

本文探讨了在Android.mk向Android.bp过渡时如何实现选择性编译。通过编写Go脚本并结合Android.bp,针对不同SDK版本动态设置编译选项。详细解释了Go脚本中的init函数、RegisterModuleType、ModuleFactoryAdaptor和privateParserDefaultsFactory等关键部分,以实现特定版本的编译需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了降低工作量以及考虑到产品的可维护性,大部分手机厂商采用了同一套android代码对应多个产品,编译时根据配置参数选择性编译不同模块的代码。

1、 Android.mk时代选择性编译

最初android的编译脚本为 Android.mk,采用了Makefile的语言
为了控制编译,我们可以在不同产品的BoardConfig.mk中定义 MARCO
之后在Android.mk中,根据是否使用MARCO来确定编译选项以及编译代码块

ifeq ($(MARCO),true)
    xxxx
endif

2、Android.bp时代选择性编译

随着android逐渐将编译脚本从Android.mk转换成Android.bp,这种方法不再有效,
我们需要采用一种新的方式来选择性编译,此时使用到了go语言。
假如在vendor/privateParser/ 目录下有我们自己的解析器代码,多个版本多个平台均会使用。
在 android 9.0( SDK: 28) 及之后的平台,加载解析器的方式发生了改变,
MediaExtractorFactory会从 手机的 system/lib(64)/extractor/目录下加载.so,
需要将此.so编译到 system/lib/extractors/目录下
之前的平台编译到system/lib/ 目录下

参考google的MPEG4Extractor的代码,需要在 Android.bp中增加如下语句:

	relative_install_path: "extractors",

才能保证编译出的.so 位于system/lib(64)/extractor/目录下

由于我们的代码是共线的,需要保证9.0的平台有此编译选项,之前的平台没有此编译选项
由于不能通过android.bp来区分平台,我们需要增加 go 脚本,来保证此编译选项

2.1、增加go脚本

vendor/privateParser/ 目录下增加go脚本 privateparser.go, 如下:

package privateparser

import (
    "android/soong/android"
    "android/soong/cc"
    "fmt"
)

func privateParserDefaults(ctx andro
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值