博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
开发自己的产品,所需要创建的makefile,以及 他们的作用
阅读量:4043 次
发布时间:2019-05-24

本文共 5087 字,大约阅读时间需要 16 分钟。

创建一个新的Android产品项目,从google网站上下载的android源代码编译时,默认是编译google设定的产品,如果要开发自己的产品,
则需要重新定义一个产品项目,过程如下:
首先我们定义产品的规格,举例如下:
公司名称 ardent
产品名称 MTP
主板名称 merlin

然后安装下面的步骤新建产品项目:

(1)在源代码目录下创建一个用户目录
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)中。产品说明文件可以继承自其它的产品说明文件。这样将便于管理。

 产品说明文件中可以包含如下变量:

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  

典型产品说明文件如下:

$(call inherit
-
product, build
/
target
/
product
/
generic.mk)
#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.会 调用 文件,

      2. 通过build/tools/findleaves.py,把subdirs目录下的Android.mk存在subdirs_makefiles。并包含这些文件。如果使用mm命令,只包含当前目录下的Android.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.包含:。定义了两种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文件。

转载地址:http://xjpdi.baihongyu.com/

你可能感兴趣的文章
VUE-Vue.js之$refs,父组件访问、修改子组件中 的数据
查看>>
Vue-子组件改变父级组件的信息
查看>>
Python自动化之pytest常用插件
查看>>
Python自动化之pytest框架使用详解
查看>>
【正则表达式】以个人的理解帮助大家认识正则表达式
查看>>
性能调优之iostat命令详解
查看>>
性能调优之iftop命令详解
查看>>
非关系型数据库(nosql)介绍
查看>>
移动端自动化测试-Windows-Android-Appium环境搭建
查看>>
Xpath使用方法
查看>>
移动端自动化测试-Mac-IOS-Appium环境搭建
查看>>
Selenium之前世今生
查看>>
Selenium-WebDriverApi接口详解
查看>>
Selenium-ActionChains Api接口详解
查看>>
Selenium-Switch与SelectApi接口详解
查看>>
Selenium-Css Selector使用方法
查看>>
Linux常用统计命令之wc
查看>>
测试必会之 Linux 三剑客之 sed
查看>>
Socket请求XML客户端程序
查看>>
Java中数字转大写货币(支持到千亿)
查看>>