添加新设备

2024-10-03

  

添加新设备

  每个新的 Android 模块都必须具有配置文件,以使用模块元数据、编译时依赖项和打包指令来指引构建系统。Android 使用Soong 构建系统。如需详细了解 Android 构建系统,请参阅构建 Android。

  构建层次结构包括与设备的物理结构对应的抽象层。下表中介绍了这些层。每一层都与上一层存在一对多的关系。例如,一个架构可以有多个主板,一个主板可以有多个产品。您可以将指定层中的某个元素定义为同一层中某个元素的特化元素,这样可以免去复制操作并简化维护工作。

  myProduct、myProduct_eu、myProduct_eu_fr、j2 和 sdk

  产品层用于定义所开发产品的功能规范,例如要构建的模块、支持的语言区域,以及针对各语言区域的配置。也就是说,这是总体产品的名称。

  产品特定变量在产品定义 Makefile 中进行定义。一个产品可以沿用其他产品的定义,这有助于简化维护工作。一种常用的方法是:先创建一个基础产品,其中包含会应用到所有产品的功能,然后再基于这个基础产品创建产品变体。例如,如果有两个产品只是使用的无线技术不同(分别使用 CDMA 和 GSM),那么它们可以沿用未定义无线技术的同一个基础产品的定义。

  主板/设备层表示设备上由可塑材料组成的物理层(即,设备的工业设计)。此层还表示产品的基本架构图。这些架构图包括板上的外围设备及其配置。所使用的名称只不过是代表不同主板/设备配置的代码。

  在针对特定产品进行构建时,如果能在最终发布 build 的基础上有细微的变化,会非常有用。在模块定义中,模块可以通过LOCAL_MODULE_TAGS指定标记,这些标记可以是以下一个或多个值:optional(默认值)、debug和eng。

  如果某个模块没有通过LOCAL_MODULE_TAGS指定标记,则其标记默认设置为optional。仅当PRODUCT_PACKAGES的产品配置需要可选模块时,系统才会安装可选模块。

  在测试中运行 userdebug build 有助于设备开发者了解开发中版本的性能和功耗。为了让 user build 和 userdebug build 保持一致,并在用于调试的 build 中获得可靠的指标,设备开发者应遵循以下准则:

  userdebug 定义为已启用 root 权限的 user build,但以下情况除外:

  不要添加根据 build 类型默认启用/停用的功能。建议开发者不要使用任何影响电池续航时间的日志记录形式(例如调试日志记录或堆转储)。

  在 userdebug build 中默认启用的任何调试功能都应明确定义,并告知处理相关项目的所有开发者。您应该只在限定的时间内启用调试功能,直到您尝试调试的问题得到解决。

  Android 编译系统会在编译时利用资源叠加层定制产品。资源叠加层用于指定在默认文件之上应用的资源文件。如需使用资源叠加层,请修改项目构建文件,将PRODUCT_PACKAGE_OVERLAYS设为相对于顶级目录的路径。当构建系统搜索资源时,该路径会变为影子根目录,系统除了在当前根目录中进行搜索外,还会一并在该路径中进行搜索。

  如需在此文件上设置资源叠加层,请使用以下某个命令将叠加层目录添加到项目构建文件:

  在叠加层config.xml文件中找到的所有字符串或字符串数组都会替换在原始文件中找到的对应字符串或字符串数组。

  您可以通过多种不同的方式来组织设备的源文件。下面简要说明了 Pixel 实现的一种组织方式。

  为 Pixel 实现名为marlin的主设备配置。根据此设备配置,为产品创建产品定义 Makefile,用于声明关于设备的产品特定信息,例如名称和型号。您可以查看device/google/marlin目录,了解所有相关配置的具体设置方式。

  以下步骤介绍了如何采用与设置 Pixel 产品线类似的方式设置产品 Makefile:

  如需了解可添加到 Makefile 的其他产品特定变量,请参阅设置产品定义变量。

  产品特定变量在产品的 Makefile 中进行定义。下表显示了在产品定义文件中维护的部分变量。

  使用此信息配置默认语言和系统语言区域过滤器,然后为新的设备类型启用语言区域过滤器。

  通过在出厂校准期间使用oem/oem.prop设置过滤器属性值和默认语言,您无需将过滤器烘焙 (bake) 到系统映像中即可配置限制。通过将这些属性添加到PRODUCT_OEM_PROPERTIES变量中(如下所示),就可以确保从 OEM 分区中获取这些属性:

  然后,在生产环境中,实际值会被写入oem/oem.prop以反映目标要求。借助这种方法,就能在恢复出厂设置期间保留默认值,让初始设置在用户看来与首次设置完全一样。

  借助ADB_VENDOR_KEYS环境变量,设备制造商无需手动授权,即可通过 adb 访问可调试的 build(userdebug build 和 eng build,但不能访问 user build)。通常,adb 会为每台客户端计算机生成一个唯一的 RSA 身份验证密钥,并将其发送到所有已连接的设备。这就是 adb 授权对话框中显示的 RSA 密钥。或者,您也可以将已知密钥构建到系统映像中,并将其分享给相应的 adb 客户端。这对于操作系统开发来说很有用,对测试来说尤其有用,因为此做法无需与 adb 授权对话框手动进行交互。

  以下是 Google 在该目录(我们将各版本的已签入密钥对存储在此处)中使用的 Makefile:

  如需使用这些供应商密钥,工程师只需将ADB_VENDOR_KEYS环境变量设为指向存储相应密钥对的目录。这会告知adb先尝试这些规范密钥,然后回退到需要手动授权的已生成主机密钥。当adb无法连接到未获授权的设备时,系统会显示错误消息,提示您设置ADB_VENDOR_KEYS(如果尚未设置)。

  本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。