当前位置:网站首页>为android系统添加产品的过程

为android系统添加产品的过程

2022-08-02 14:08:00 nginux

当我们要新增一款产品的时候,首先要在Build系统中添加产品定义,产品定义文件通常位于device目录下面(vendor目录是历史遗留目录,google已经不建议在该目录中进行定义)。

通常对于一个产品的定义通常至少包含四个文件:

  1. AndroidProducts.mk
  2. 产品版本定义文件
  3. BoardConfig.mk
  4. vendorsetup.sh
    下面我们来详细介绍这四个文件:

AndroidProducts.mk文件:
该文件内容很简单,其中只需要定义一个变量,名称为PRODUCT_MAKEFILES,变量的值为产品版本定义文件名的列表,例如:

 PRODUCT_MAKEFILES := \ 
 $(LOCAL_DIR)/full_stingray.mk \ 
 $(LOCAL_DIR)/stingray_emu.mk \ 
 $(LOCAL_DIR)/generic_stingray.mk

产品定义文件:
该文件包含了对于特定产品版本的定义,该文件可能有不止一个,因为同一个产品可能有多个版本(例如面向美国一个版本,面向中国一个版本),文件中可以定义的变量如下表:

PRODUCT_NAME    最终用户将看到的完整产品名,会出现在“关于手机”信息中。
PRODUCT_MODEL   产品的型号,这也是最终用户将看到的。
PRODUCT_LOCALES 该产品支持的地区,以空格分格,例如:en_GB de_DE es_ES fr_CA。
PRODUCT_PACKAGES    该产品版本中包含的 APK 应用程序,以空格分格,例如:Calendar Contacts。
PRODUCT_DEVICE  该产品的工业设计的名称。
PRODUCT_MANUFACTURER    制造商的名称。
PRODUCT_BRAND   该产品专门定义的商标(如果有的话)。
PRODUCT_PROPERTY_OVERRIDES  对于商品属性的定义。
PRODUCT_COPY_FILES  编译该产品时需要拷贝的文件,以“源路径 : 目标路径”的形式。
PRODUCT_OTA_PUBLIC_KEYS 对于该产品的 OTA 公开 key 的列表。
PRODUCT_POLICY  产品使用的策略。
PRODUCT_PACKAGE_OVERLAYS    指出是否要使用默认的资源或添加产品特定定义来覆盖。
PRODUCT_CONTRIBUTORS_FILE   HTML 文件,其中包含项目的贡献者。
PRODUCT_TAGS    该产品的标签,以空格分格。

BoardConfig.mk文件:
该文件用来配置硬件主板,它其中定义的都是设备底层的硬件特性,如设备主板相关信息,wifi相关信息等。

vendorsetup.sh:该文件的作用是通过add_lunch_combo函数在lunch中添加一个菜单项。

在配置好以上文件以后,我们就可以编译出我们新添加的设备的系统镜像了。
调用:source build/envsetup.sh,该脚本会扫描device和vendor目录下面所有的vendorsetup.sh。

那其他三个文件是什么时候调用到的呢?其实就是在lunch命令执行以后这三个文件就实现了它们的使命,lunch命令执行过程中会加载/build/core/config.mk,这个文件又会加载/build/core/envsetup.mk和Board_config_mk,前者会加载product_config.mk,后者会加载BoardConfig.mk,而product_config.mk会在device/vendor搜索所有的AndroidProducts.mk,然后根据TAEGET_PRODUCT的值找到其对应的AndroidProducts.mk,由这个文件就会找到产品定义文件。需要注意的一点是产品定义文件有个product_device变量,这个变量最终设置了TARGET_DEVICE变量的值。
使用一张图来描述上述过程:
这里写图片描述

后面还会写文章详细介绍安卓系统的初始化过程,并将重温上述过程

原网站

版权声明
本文为[nginux]所创,转载请带上原文链接,感谢
https://blog.csdn.net/GetNextWindow/article/details/48158873