• Android 源码中添加一个产品


    在系统源码中新增一个产品,源码下载可参考 通过aosp-latest下载Android源码。本文基于 Adnroid 9.0 系统。

    步骤

    首先,在deivice目录下,创建目录twitter/m20。一般目录命名规则为:公司名/产品名。

    然后,在新目录下创建 m20.mkvendorsetup.shBoardConfig.mkAndroidProduct.mk

    • vendorsetup.sh

      添加产品启动名称。格式为:add_lunch_combo -,其中 build_variant 仅能为空、eng、user、userdebug。

      add_lunch_combo m20-eng
      add_lunch_combo m20-userdebug
      add_lunch_combo m20-user
      
      • 1
      • 2
      • 3
    • BoardConfig.mk

      主板配置。此处我直接拷贝了device/generic/x86_64下的该文件。

    • m20.mk

      该产品Makefile文件,里面包含了产品名称、设备名称、包含的厂商的App和Service等等。此处我直接拷贝了device/generic/x86_64下的产品文件做了修改。

      ......
      # 我们自定义的产品名字。需与vendorsetup.sh定义的名字一致。
      PRODUCT_NAME := m20
      # 需与文件夹名一致。
      PRODUCT_DEVICE := m20
      PRODUCT_BRAND := oppo
      PRODUCT_MODEL := m20
      ......
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • AndroidProduct.mk

      添加指定产品Makefile 文件。此处我直接拷贝了device/generic/x86_64下的该文件做了修改。

      # 将 m20.mk 加入到 PRODUCT_MAKEFILES 中
      PRODUCT_MAKEFILES := \
          $(LOCAL_DIR)/m20.mk
      
      • 1
      • 2
      • 3

    vendorsetup.shBoardConfig.mkAndroidProduct.mk 各文件加载:

    • 产品的vendorsetup.sh,当 source build/envsetup.sh时读取。

      ......
      # Execute the contents of any vendorsetup.sh files we can find.
      for f in `test -d device && find -L device -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort` \
               `test -d vendor && find -L vendor -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort` \
               `test -d product && find -L product -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort`
      do
          echo "including $f"
          . $f
      done
      ......
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

      build/envsetup.sh脚本中,可以看出,会读取devicevendorproduct三个目录4层以内的所有vendorsetup.sh。若你想加载其他位置,则需改动此处代码。

      lunch时,可看见已包含新产品:

      xxx@android:~/aosp9$ lunch 
      
      You're building on Linux
      
      Lunch menu... pick a combo:
           1. aosp_arm-eng
           2. aosp_arm64-eng
           ......
           55. m20-eng
           56. m20-userdebug
           57. m20-user
           ......
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    • 产品的BoardConfig.mk,在envsetup.mk中会加载

      ......
      board_config_mk := \
       	$(strip $(sort $(wildcard \
       		$(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk \
       		$(shell test -d device && find -L device -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \
       		$(shell test -d vendor && find -L vendor -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \
       	)))
      ......
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • 产品的AndroidProducts.mkproduct.mk中被加载

       ......
       define _find-android-products-files
       $(foreach d, device vendor product,$(call _search-android-products-files-in-dir,$(d))) \
         $(SRC_TARGET_DIR)/product/AndroidProducts.mk
       endef
       ......
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

    参考

    AndroidProducts.mk

  • 相关阅读:
    颈椎神经分布立体图高清,颈椎神经分布立体图片
    WebGL开发框架比较
    自然语言处理(一):RNN
    python+robotframework接口自动化测试
    一个依赖解决 Spring Boot 反爬虫,防止接口盗刷
    linux系统下,在vscode的命令行中调试python文件
    web开发理论测试题
    基于Web的美食分享平台的设计与实现——HTML+CSS+JavaScript水果介绍网页设计(橙子之家)
    Ubuntu 24.04安装zabbix7.0.0图形中文乱码
    Shell脚本语言用法详解(超详细~)
  • 原文地址:https://blog.csdn.net/liujunpen/article/details/127819555