01 Android系统之添加Product

举报
王建峰 发表于 2021/11/19 01:11:08 2021/11/19
【摘要】 理解概念 1、Product 在android源码正式编译之前选择Product,使用lunch product-xxx,这一步操作理解为预先对要编译的源码进行一系列的配置。在android-10的源码...

理解概念

1、Product
在android源码正式编译之前选择Product,使用lunch product-xxx,这一步操作理解为预先对要编译的源码进行一系列的配置。在android-10的源码中,将一个Product配置分成三个部分:

  • BoardConfig.mk: 芯片硬件相关配置,分区设置等
  • product.mk: 一个产品的软件相关的配置,比如内置哪些软件模块,由AndroidProducts.mk 中的PRODUCT_MAKEFILES指定
  • AndroidProducts.mk: 指定 product 配置,并把 product 添加到 lunch 选择项中

2、组织结构
Google为AOSP源码内置了Product配置,位于源码的build/target目录:

hinzer@ubuntu:target$ pwd
/home/hinzer/source/android-10/build/target
hinzer@ubuntu:target$ tree -L 1
.
├── board
├── OWNERS
└── product

2 directories, 1 file


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

同时也允许第三方定制Product配置,在源码device目录下。待会自定义Product在这个目录下:

hinzer@ubuntu:device$ tree mi 
mi     	# 公司名
└── pure 	# device名(我喜欢写为Product,与product区分),一个device可对应多个product
    ├── AndroidProducts.mk  # 指定product配置,添加lunch选项
    ├── BoardConfig.mk 		# 硬件配置 boardconfig
    └── product01.mk 		# 软件配置 product

1 directory, 3 files

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

自定义product

模仿aosp源码的Product配置,就引用了build/target/board/generic_x86_64/BoardConfig.mkbuild/target/board/generic_x86_64/BoardConfig.mk的配置。然后进行自定义

1、创建device/[company]/[device]目录

hinzer@ubuntu:android-10$ mkdir -p ./device/mi/pure

  
 
  • 1

2、分别添加AndroidProducts.mkproduct.mkBoardConfig.mk配置文件

hinzer@ubuntu:pure$ ls
AndroidProducts.mk  BoardConfig.mk  product01.mk

# 1.添加 AndroidProducts.mk
hinzer@ubuntu:pure$ cat AndroidProducts.mk 
PRODUCT_MAKEFILES := \
    $(LOCAL_DIR)/product01.mk   # 指定 product

COMMON_LUNCH_CHOICES := \
    product01-eng 				# 添加lunch选项

# 2.添加 BoardConfig.mk 
hinzer@ubuntu:pure$ cat BoardConfig.mk 
include $(SRC_TARGET_DIR)/board/generic_x86_64/BoardConfig.mk  # 这里直接饮用

# 3.添加 product01.mk 
hinzer@ubuntu:pure$ cat product01.mk 
$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_x86_64.mk)

PRODUCT_NAME   := product01 # product名(与文件保持一致)
PRODUCT_DEVICE := pure      # device名,BoardConfig.mk相关

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3、lunch刚才创建的product,编译

hinzer@ubuntu:android-10$ source ./build/envsetup.sh
hinzer@ubuntu:android-10$ lunch product01-eng
hinzer@ubuntu:android-10$ make -j4

  
 
  • 1
  • 2
  • 3

4、验证

# 运行虚拟机
hinzer@ubuntu:android-10$ emulator   # 查看手机version信息,编译时间、产品名是否对应

  
 
  • 1
  • 2

理论补充

1、build variants
aosp为build系统提供三种Product配置,文档里叫做build variants,分别是:

  • eng : 对应到工程版。编译打包所有模块。表示adbd处于ROOT状态,所有调试开关打开
  • userdebug : 对应到用户调试版。打开调试开关,但并没有放开ROOT权限
  • user : 对应到用户版。关闭调试开关,关闭ROOT权限。最终发布到用户手上的版本,通常都是user版。

参考资料

文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/feit2417/article/details/105189947

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。