Android ----制作自己的Vendor
Android源代码使用一个可定制的编译系统来生成 特定的,针对自己硬件平台的Android系统,比方不使用缺省的out/target/prodect/generic文件夹,本文档简介了这个编译系统,并做一个针对自己硬件平台的Android,这部分工作主要是由Android源码中的Vendor目录来实现,假设该目录不成立,自己能够在Android源码的根目录下建立该目录,这个目录里面存放特定的文件,比方自己板子上的3G驱动,WIFI驱动,自己的应用程序,都能够放在这里。提取文件系统的时候,能够把这个目录里面的东东放到文件系统里面,这样用户能够清晰的看到你的板子特有的功能。
一、细节描写叙述
以下几步描写叙述了怎样配置makefile来为执行Android的设备编译系统。
1、在/vendor/文件夹下创建company文件夹
mkdir vendor/<company_name>
2、在company文件夹下创建一个 products文件夹
mkdir vendor/<company_name>/products/
3、创建一个设备相关的makefile:vendor/<company_name>/products/<first_product_name>.mk这个make文件里至少要包括以下代码:
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic.mk)
#
# Overrides
PRODUCT_NAME := <first_product_name>
PRODUCT_DEVICE := <board_name>
4、在产品定义文件里加入设备相关的变量。
5、在products文件夹下,创建一个AndroidProducts.mk文件,这个文件指向设备的make文件。
#
# This file should set PRODUCT_MAKEFILES to a list of product makefiles
# to expose to the build system. LOCAL_DIR will already be set to
# the directory containing this file.
#
# This file may not rely on the value of any variable other than
# LOCAL_DIR; do not use any conditionals, and do not look up the
# value of any variable that isn't set in this file or in a file that
# it includes.
# PRODUCT_MAKEFILES := /
$(LOCAL_DIR)/first_product_name.mk /
6、在company文件夹下创建一个包括特定board特征的文件夹,这个文件夹须要与PRODUCT_DEVICE这个变量中的<board_name>相匹配。这个文件夹下会包括一个make文件,这个make文件能够用以下的方式訪问到,比方:
mkdir vendor/<company_name>/<board_name>
7、在上步的文件夹(vendor/<company_name>/<board_name>)下,创建一个BoardConfig.mk文件
# These definitions override the defaults in config/config.make for <board_name>
#
# TARGET_NO_BOOTLOADER := false
#
TARGET_USE_GENERIC_AUDIO := true
8、假设你想改动系统属性,在文件夹vendor/<company_name>/<board_name>下创建一个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、在products/AndroidProducts.mk文件里加入一个指向<second_product_name>.mk的引用。
PRODUCT_MAKEFILES := /
$(LOCAL_DIR)/first_product_name.mk /
$(LOCAL_DIR)/second_product_name.mk
10、文件夹vendor/<company_name>/<board_name>下必须包括一个Android.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/<company_name>/<board_name>
#
include $(CLEAR_VARS)
#
# include more board specific stuff here? Such as Audio parameters.
#
11、想为同样的board创建第二个product时,创建一个名字为vendor/company_name/products/<second_product_name>.mk的make文件,这个文件里包括:
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic.mk)
#
# Overrides
PRODUCT_NAME := <second_product_name>
PRODUCT_DEVICE := <board_name>
眼下为止,你已经有了两个新product,<first_product_name>和<second_product_name>,都属于<company_name>。
验证一下一个product是否配置正确,执行
. build/envsetup.sh
make PRODUCT-<first_product_name>-user
在/out/target/product/<board_name>文件夹下,你能够看到生成的二进制文件。 二、产品文件树
没有翻译 三、product定义文件
不同的产品,在它的product定义文件里会对一些变量赋予不同的值,product定义文件能够从其他product定义文件里继承。
Product定义文件里包括的变量例如以下:
|
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. 地区标识 |
|
|
PRODUCT_PACKAGES |
Lists the APKs to install. 在这个product中要安装的APK列表。 |
|
|
PRODUCT_DEVICE |
Name of the industrial design 生产商的名字 |
|
|
PRODUCT_MANUFACTURER |
Name of the manufacturer 制造商的名字 |
|
|
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" 属性列表,以"key=value"形式列出。 |
|
|
PRODUCT_COPY_FILES |
List of words like 当编译时,源路径上的文件会被拷贝到目标路径上去,详细的复制规则在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 |
|
|
PRODUCT_CONTRIBUTORS_FILE |
HTML file containing the contributors to the project. 包括了项目贡献者名字列表的HTML文件。 |
|
|
PRODUCT_TAGS |
list of space-separated words for a given product |
以下给出了一个经典的product定义文件
$(call inherit-product, build/target/product/generic.mk) #Overrides
PRODUCT_NAME := MyDevice
PRODUCT_MANUFACTURER := acme
PRODUCT_BRAND := acme_us
PRODUCT_LOCALES := en_GB es_ES fr_FR
PRODUCT_PACKAGE_OVERLAYS := vendor/acme/overlay
本博客參考CSDN网友 http://blog.csdn.net/a345017062/archive/2010/12/24/6096807.aspx ,近期自己须要制作Vendor,很须要这种资料,在此感谢网友的博客。
Android ----制作自己的Vendor的更多相关文章
- 从零开始学Xamarin.Forms(三) Android 制作启动画面
原文:从零开始学Xamarin.Forms(三) Android 制作启动画面 Xamarin.Forms 在启动的时候相当慢,必须添加一个启动界面,步骤如下: 1.将启动画面的图片命名为:s ...
- 用ESP8266+android,制作自己的WIFI小车(Android 软件)
先说一下这篇文章里面的内容:TCP 客户端, 自定义对话框, 自定义按钮, ProgressBar竖直显示, 重力感应传感器,手机返回键新开启界面的问题(返回上次的界面),数据保存 软件的通信是配合 ...
- xamarin android制作圆角边框
xamarin android制作圆角边框 效果图如下: 关键代码: drawable文件夹新建shape_corner_down.xml <?xml version="1.0&quo ...
- android:制作 Nine-Patch 图片
它是一种被特殊处理过的 png 图片,能够指定哪些区域可以被拉伸而 哪些区域不可以. 那么 Nine-Patch 图片到底有什么实际作用呢?我们还是通过一个例子来看一下吧.比如 说项目中有一张气泡样式 ...
- $Android制作和使用Nine-Patch图片
Nine-Patch图片是一种经过特殊处理的png图片,能够指定图片的哪些区域可以被拉伸而哪些区域不可以. (一)普通图片被拉伸时的缺陷 有如下xml文件,其中子LinearLayout的背景图片设置 ...
- android 制作9.png图片
什么叫.9.PNG呢,这是安卓开发里面的一种特殊的图片 这种格式的图片在android 环境下具有自适应调节大小的能力. (1)允许开发人员定义可扩展区域,当需要延伸图片以填充比图片本身更大区 ...
- android 制作自定义标题栏
1.在AndroidManifest.xml设置主题 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 2.在l ...
- Android 制作一个网页源代码浏览器(HttpURLConnection)
package com.wuyou.htmlcodeviewer; import android.os.Bundle; import android.os.Handler; import androi ...
- 用ESP8266+android,制作自己的WIFI小车
整体思路ESP8266作为TCP服务器,,手机作为TCP客户端,自己使用Lua直接做到了芯片里面,省了单片机,,节约成本,其实本来就是个单片机(感觉Lua开发8266真的很好,甩AT指令好几条街,,而 ...
随机推荐
- Struts2运行机制(MVC)的分析:
C:(controller)控制器 M:(model)模型处理 V:(view)视图 Struts 2 的运行过程: 核心控制器是FilterDispatcher会过滤 ...
- Ubuntu下SVN命令行递归加入文件夹文件(免去一个一个的加入 --force)
因为在Linux下一直没有找到好的svn工具(类似于TortiseSVN的).当然eSVN这些也不错,但就是使用上认为还不是很习惯.终于还是选择了svn原始的命令行工具来进行版本号控制操作. 命令行的 ...
- GreenDAO数据库版本升级
GreenDAO是一款非要流行的android平台上的数据库框架,性能优秀,代码简洁. 初始化数据库模型代码的时候需要使用java项目生成代码,依赖的jar包已经上传到我的资源里了,下载地址如下:ht ...
- css3 动画运动路径
1.cubic-bezier贝塞尔曲线CSS3动画工具 http://www.xuanfengge.com/cubic-bezier-bezier-css3-animation-tools.html ...
- Qt Quick鼠标事件处理、键盘、计时器
在<Qt Quick 事件处理之信号与槽>中介绍了 QML 中怎样使用内建类型的信号以及怎样自己定义信号,这次我们来看看怎样处理鼠标.键盘.定时器等事件.这些时间在处理时,一般是通过信号来 ...
- hdu 4803 贪心/思维题
http://acm.hdu.edu.cn/showproblem.php?pid=4803 话说C++还卡精度么? G++ AC C++ WA 我自己的贪心策略错了 -- 就是尽量下键,然后上 ...
- Codeforces 484B Maximum Value(排序+二分)
题目链接: http://codeforces.com/problemset/problem/484/B 题意: 求a[i]%a[j] (a[i]>a[j])的余数的最大值 分析: 要求余数的最 ...
- 在Java中使用MD5和BASE64
MD5: 在上一篇<Servlet的学习之Session(5)>中,为了能使获取的所有随机数都能有相同的位数,我们采用MD5获取随机数的消息摘要(或称数据指纹.数据摘要等等). MD5可以 ...
- JavaScript的原型继承
JavaScript是一门面向对象的语言.在JavaScript中有一句很经典的话,万物皆对象.既然是面向对象的,那就有面向对象的三大特征:封装.继承.多态.这里讲的是JavaScript的继承,其他 ...
- C语言中 struct成员变量顺序对内存的占用
在C语言的结构体中,是会按照其变量类型来进行分配内存大小的.但是对于不同的编译器,结果是不同的,在VC++6.0中是怎么个分配情况呢?用一下C中的关键字sizeof()来测试下,注意sizeof()不 ...