然后安装下面的步骤新建产品项目:
lunch 产品号
make
---------------------------------------------------------
<company_name>
<board_name>
Android.mk
product_config.mk
system.prop
products
AndroidProducts.mk
<first_product_name>.mk
<second_product_name>.mk
产品特定的变量被定义在产品说明文件(definition files)中。产品说明文件可以继承自其它的产品说明文件。这样将便于管理。
产品说明文件中可以包含如下变量:
Parameter | Description | Example |
---|---|---|
PRODUCT_NAME | End-user-visible name for the overall product. Appears in the "About the phone" info. | |
PRODUCT_MODEL | End-user-visible name for the end product | |
PRODUCT_LOCALES | A space-separated list of two-letter language code, two-letter country code pairs that describe several settings for the user, such as the UI language and time, date and currency formatting. The first locale listed in PRODUCT_LOCALES is is used if the locale has never been set before. | en_GB de_DE es_ES fr_CA |
PRODUCT_PACKAGES | Lists the APKs to install. | Calendar Contacts |
PRODUCT_DEVICE | Name of the industrial design | dream |
PRODUCT_MANUFACTURER | Name of the manufacturer | acme |
PRODUCT_BRAND | The brand (e.g., carrier) the software is customized for, if any | |
PRODUCT_PROPERTY_OVERRIDES | List of property assignments in the format "key=value" | |
PRODUCT_COPY_FILES | List of words like source_path:destination_path . The file at the source path should be copied to the destination path when building this product. The rules for the copy steps are defined in config/Makefile |
|
PRODUCT_OTA_PUBLIC_KEYS | List of OTA public keys for the product | |
PRODUCT_POLICY | Indicate which policy this product should use | |
PRODUCT_PACKAGE_OVERLAYS | Indicate whether to use default resources or add any product specific overlays | vendor/acme/overlay |
PRODUCT_CONTRIBUTORS_FILE | HTML file containing the contributors to the project. | |
PRODUCT_TAGS | list of space-separated words for a given product |
典型产品说明文件如下:
========== 解释 ============
当我们在 源码的 顶层目录下, 执行 make 编译 rootfs时:
一、首先 调用 顶层 目录 下的 Makefile,而 这个 Makefile 指向 build/core/main.mk。
二、在 build/core/main.mk 里,
1.会 调用 BUILD_SYSTEM/config.mk 文件,
2. 通过build/tools/findleaves.py,把subdirs目录下的Android.mk存在subdirs_makefiles。并包含这些文件。如果使用mm命令,只包含当前目录下的Android.mk
三、在BUILD_SYSTEM/config.mk里,
1. 包含 envsetup.mk。
2. 包含$(board_config_mk)。$(board_config_mk)是位于build/target/board /$(TARGET_DEVICE)/,device/*/$(TARGET_DEVICE)/,或vendor/*/$(TARGET_DEVICE) /目录下的BoardConfig.mk文件
四、在 envsetup.mk 里,
1. 包含:include$(BUILD_SYSTEM)/version_defaults.mk ,设置那些我们需要设置的变量的缺省值。这个文件我们不因该改动,改动应该在build_id.mk里。
2.设置在文件buildspec.mk里或通过envsetup.sh设置的变量的缺省值。
3.包含:include$(BUILD_SYSTEM)/product_config.mk。定义了两种MAKECMDGOALS参数形式,根据product和device目录下的mk文件生成相应的PRODUCTS_xxx_xxx和DEVICES_xxx_xxx变量。中间的是文件的路径,后面的是文件里定义的变量。
五. 在 product_config.mk 里,
1.调用import-products函数,判断TARGET_BUILD_APPS是否为空,若为空,只导入
$(SRC_TARGET_DIR)/product/AndroidProducts.mk里的mk文件。否则调用get-all-product-makefiles,导入全部mk文件。再调用check-all-products检查变量设置的正确性。
六. Makefile
1.生成一些记录文件
生成$(TARGET_ROOT_OUT)/default.prop文件,将ADDITIONAL_DEFAULT_PROPERTIES的值写入文件。生成$(TARGET_OUT)/build.prop文
件,主要存放的是build.properties,
主要来自于三个方面:
1,通过执行build/tools/buildinfo.sh根据PRODUCT_NAME变量值...获得
2.文件$(TARGET_DEVICE_DIR)/system.prop
3.ADDITIONAL_BUILD_PROPERTIES变量值
2.定义一些make target
3.包含$(BUILD_SYSTEM)/tasks目录下的所有.mk文件。