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.

地区标识


en_GB de_DE es_ES fr_CA


PRODUCT_PACKAGES


Lists the APKs to install.

在这个product中要安装的APK列表。


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"

属性列表,以"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

当编译时,源路径上的文件会被拷贝到目标路径上去,详细的复制规则在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.

包括了项目贡献者名字列表的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,很须要这种资料,在此感谢网友的博客。
时间: 2024-10-07 10:07:16

Android ----制作自己的Vendor的相关文章

从零开始学Xamarin.Forms(三) Android 制作启动画面

Xamarin.Forms 在启动的时候相当慢,必须添加一个启动界面,步骤如下: 1.将启动画面的图片命名为:splash_screen.png,并拷贝到 Resources 文件夹下的相应 Drawable 文件夹中: 2.在其中的 Drawable 文件夹下创建 splashscreen.xml ,内容为: <?xml version="1.0" encoding="utf-8" ?> <bitmap xmlns:android="h

android:制作 Nine-Patch 图片

它是一种被特殊处理过的 png 图片,能够指定哪些区域可以被拉伸而 哪些区域不可以. 那么 Nine-Patch 图片到底有什么实际作用呢?我们还是通过一个例子来看一下吧.比如 说项目中有一张气泡样式的图片 message_left.png,如图 3.38 所示. 图   3.38 我们将这张图片设置为一个 LinearLayout 的背景图片,修改 activity_main.xml 中的代码, 如下所示: <RelativeLayout xmlns:android="http://sc

Android制作和使用Nine-Patch图片

Nine-Patch图片是一种经过特殊处理的png图片,能够指定图片的哪些区域可以被拉伸而哪些区域不可以. (一)普通图片被拉伸时的缺陷 有如下xml文件,其中子LinearLayout的背景图片设置成一个名为chat的png图片: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/r

Android 制作应用图标

Android的adt提供了android图标的制作工具:Android icon set. 通过这个可以新建launcher或notification图标. 1.首先,在Eclipse中某个android项目上右击打开 New - Other 视图 2. 找到Android,Android icon set,然后点击Launcher icon 3.接下来点击Image选择图片,其他参数条件可以自行研究. (建议采用透明背景的png图) 各个图的大小如下: ldip:36*36 mdip:48*

android 制作9.png图片

什么叫.9.PNG呢,这是安卓开发里面的一种特殊的图片 这种格式的图片在android 环境下具有自适应调节大小的能力. (1)允许开发人员定义可扩展区域,当需要延伸图片以填充比图片本身更大区域时,可扩展区的内容被延展. (2)允许开发人员定义内容显示区,用于显示文字或其他内容 如下图所示: 左侧和上方的黑线交叉的部分即可扩展区域 右侧和下方的黑线交叉的部分即内容显示区 用它可以实现部分拉伸,从而实现图片在安卓系统上的完美应用 拆过系统framework-res.apk包的机油们细心点看,里面有

Android 制作类似支付圆圈和打钩界面ProgressWheel

首先要说明的是,制作圆圈旋转的效果并不是博主做的,是参照了github上的一个代码,只是在上面添加了修改,对其优化并增加了一个打钩的动画. 先来看下效果,1+的手机获取root权限真是难,没法录屏,只能使用这种截屏生成git的笨办法,其实运行起来还是很流畅的. 这是代码github的地址: git clone https://github.com/LxxCaroline/ProgressWheelView.git 这是圆圈旋转代码的github地址: git clone https://gith

android制作闪动的红心

先上一张效果图吧: 说说这个东西的来源吧,今天突然想到笛卡尔心形图,想去看看能不能画个心出来,但是看到一篇不错的文章,那篇文章罗列了很多关于心形的函数方程,这可把我高兴坏了,于是我选取了一个比较好看的"桃心"做了今天的效果. 下面贴代码: import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint;

关于Android制作.9.png图片

第一个问题,.9格式的图片与我们之前的一般图片有什么问题呢? 这是安卓开发里面的一种特殊的图片. 这样的格式的图片在android 环境下具有自适应调节大小的能力. (1)同意开发者定义可扩展区域,当须要延伸图片以填充比图片本身更大区域时,可扩展区的内容被延展. (2)同意开发者定义内容显示区,用于显示文字或其它内容. 第二个问题,.9.png格式图片有什么用处呢? 这个用处就大了,打比方最简单的使用方法就是微信聊天的对画框文字背后包裹的背景图片就是使用了.9格式的图片,能够随文字的多少伸缩其大

Android制作曲线、柱状图、饼形等图表——使用AChartEngine

之前在java开发中实现图表使用JFreeChar组件,最近有个小项目要求在Android端进行数据分析,如何实现图表呢?查了一下google提供了一个开源组件Achartengine非常好用,可实现绘制各种图形,完全满足了开发的需要,下面就说说如何使用. 一.准备工作 下载jar包 官网地址:http://code.google.com/p/achartengine/ 网盘地址:http://pan.baidu.com/s/1EYhUe(含API文档,代码) 二.关键点说明——AchartEn