开发自己的产品,所需要创建的makefile,以及 他们的作用
来源:互联网 发布:淘宝网太极夏服 编辑:程序博客网 时间:2024/05/04 16:06
则需要重新定义一个产品项目,过程如下:
首先我们定义产品的规格,举例如下:
公司名称 ardent
产品名称 MTP
主板名称 merlin
然后安装下面的步骤新建产品项目:
mkdir vendor
(2)在用户目录下创建一个公司目录
mkdir vendor/ardent
(3)在公司目录下创建一个products目录
mkdir vendor/ardent/products
(4)在上面创建的products下创建一个产品makefile文件MTP.mk,这个文件至少要包含如下代码:
# Overrides
PRODUCT_NAME := MTP
PRODUCT_DEVICE := merlin
产品makefile文件的编写有一套规则,详细情况请上网查询。
(5)在vendor/ardent/products目录下创建一个AndroidProducts.mk文件,定义Android产品配置文件mk的路径,也就是MTP.mk 文件的路径,具体如下:
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/MTP.mk
(6)在公司目录下创建一个 主板目录,此目录名 必须与(4)中特定产品的makefile 中PRODUCT_DEVICE 变量值相同。这个目录下将包括一个makefile文件BoardConfig.mk,它会被用到此板的产品使用。
mkdir vendor/ardent/merlin
(7)在 主板目录 下新建一个主板配置文件BoardConfig.mk,内容如下:
TARGET_NO_BOOTLOADER := true
TARGET_NO_KERNEL := true
TARGET_CPU_ABI := armeabi
BOARD_USES_GENERIC_AUDIO := true
USE_CAMERA_STUB := true
(8)如果你希望 修改系统属性,则可以在 主板目录下 新建一个system.prop文件,该文件中可以修改系统属性,举例如下:
# system.prop for
# This overrides settings in the products/generic/system.prop file
#
# rild.libpath=/system/lib/libreference-ril.so
# rild.libargs=-d /dev/ttyS0
(9)在 主板目录下 新建一个Android的主板配置文件AndroidBoard.mk,此文件是编译系统接口文件,内容如下:
# make file for new hardware from
#
LOCAL_PATH := $(call my-dir)
#
# this is here to use the pre-built kernel
ifeq ($(TARGET_PREBUILT_KERNEL),)
TARGET_PREBUILT_KERNEL := $(LOCAL_PATH)/kernel
endif
file := $(INSTALLED_KERNEL_TARGET)
ALL_PREBUILT += $(file)
$(file): $(TARGET_PREBUILT_KERNEL) | $(ACP)
$(transform-prebuilt-to-target)
#
# no boot loader, so we don't need any of that stuff..
#
LOCAL_PATH := vendor/ardent/merlin
include $(CLEAR_VARS)
#
# include more board specific stuff here? Such as Audio parameters.
#
(10)编译新的项目
. build/envsetup.sh
lunch 产品号
make
---------------------------------------------------------
New Product File Tree
<company_name>
<board_name>
Android.mk
product_config.mk
system.prop
products
AndroidProducts.mk
<first_product_name>.mk
<second_product_name>.mk
Product Definition Files
产品特定的变量被定义在产品说明文件(definition files)中。产品说明文件可以继承自其它的产品说明文件。这样将便于管理。
产品说明文件中可以包含如下变量:
en_GB de_DE es_ES fr_CA
PRODUCT_PACKAGESLists the APKs to install.Calendar Contacts
PRODUCT_DEVICEName of the industrial designdream
PRODUCT_MANUFACTURERName of the manufactureracme
PRODUCT_BRANDThe brand (e.g., carrier) the software is customized for, if any PRODUCT_PROPERTY_OVERRIDESList of property assignments in the format "key=value" PRODUCT_COPY_FILESList 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_KEYSList of OTA public keys for the product PRODUCT_POLICYIndicate which policy this product should use PRODUCT_PACKAGE_OVERLAYSIndicate whether to use default resources or add any product specific overlaysvendor/acme/overlay
PRODUCT_CONTRIBUTORS_FILEHTML file containing the contributors to the project. PRODUCT_TAGSlist of space-separated words for a given product 典型产品说明文件如下:
#Overrides
PRODUCT_NAME := MyDevice
PRODUCT_MANUFACTUER := acme
PRODUCT_BRAND := acme_us
PRODUCT_LOCALES := en_GB es_ES fr_FR
PRODUCT_PACKAGE_OVERLAYS := vendor/acme/overlay
========== 解释 ============
当我们在 源码的 顶层目录下, 执行 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文件。- 开发自己的产品,所需要创建的makefile,以及 他们的作用
- 开发自己的产品,所需要创建的makefile,以及 他们的作用
- 自己创建CoreData所需要的相应类
- 产品经理所需要知道的专业术语
- 产品经理所需要知道的专业术语
- 实习时 自己项目组的项目所需要了解的以及如何提高自己
- 国内知名产品和他们的开发语言v0.0.1
- 国内知名产品和他们的开发语言v0.0.1
- 国内知名产品和他们的开发语言v0.0.1
- 国内知名产品和他们的开发语言
- 与用户一起开发他们想要的产品?(1)
- 与用户一起开发他们想要的产品?(2)
- struts 2.1+Spring3.0 +hibernate 3.3整合所需要的JAR库 以及 作用说明
- 自己实现顺序表和单链表以及他们的对比
- 创建进程所需要的最少环境变量
- 动态创建的按钮 以及 他们的事件
- C++创建类必备的三个函数以及使用new所需要做的事
- 产品新增功能所需要考虑的问题
- java并发1.4-线程无处不在
- Unrecognized Windows Sockets error: 0: JVM_Bind
- gitHub好的资源链接
- Makefile中常用的函数
- FILTER_SANITIZE_EMAIL与FILTER_VALIDATE_EMAIL错误使用
- 开发自己的产品,所需要创建的makefile,以及 他们的作用
- MyEclipse快捷键
- Android 如何获取经纬度
- Android Matrix
- 利用Telnet直接查看对方宽带拨号密漏洞
- 后台运行GPS
- UITableView1125
- java:几种基本排序算法的温习
- sqoop向关系数据库导入数据