google官方有给出android这么添加一个产品,可在google搜索“android add a new device”

接下来,说说我对android添加一个产品的想法和思路。

产品的目录结构:

在vendor目录创建公司目录,在公司目录下创建两个目录分别为common(公共配置)和对应产品目录(此产品相关的配置)

创建一个产品必要的一些配置文件(以产品K50为例):

AndroidProduct.mk   // 指定产品Makefile 文件

PRODUCT_MAKEFILES := \    $(LOCAL_DIR)/evideo_k50.mk

 

BoardConfig.mk   // 主板特定配置

include device/realtek/kylin/BoardConfig.mkinclude vendor/evideo/common/BoardConfig.mkTARGET_ARCH := armTARGET_ARCH_VARIANT := armv7-a-neonTARGET_CPU_ABI := armeabi-v7aTARGET_CPU_ABI2 := armeabiTARGET_CPU_VARIANT := cortex-a7TARGET_2ND_ARCH :=TARGET_2ND_ARCH_VARIANT :=TARGET_2ND_CPU_ABI :=TARGET_2ND_CPU_ABI2 :=TARGET_2ND_CPU_VARIANT :=# for system configurationPRODUCT_PACKAGE_OVERLAYS += \    vendor/evideo/K50/overlay# System: 2GBBOARD_SYSTEMIMAGE_PARTITION_SIZE := 2147483648# Cache: 222MBBOARD_CACHEIMAGE_PARTITION_SIZE := 232783872

vendorsetup.sh  //添加产品变体

add_lunch_combo evideo_k50-engadd_lunch_combo evideo_k50-userdebugadd_lunch_combo evideo_k50-user

evideo_k50.mk  // 指定产品Makefile文件

DEVICE_PACKAGE_OVERLAYS := \    device/realtek/kylin/overlay \    device/realtek/kylin/overlay_common$(call inherit-product, vendor/evideo/K50/device.mk)$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base.mk)$(call inherit-product, device/realtek/kylin/rtkbt/rtkbt.mk)PRODUCT_AAPT_CONFIG := normal large tvdpi mdpi hdpiPRODUCT_AAPT_PREF_CONFIG := mdpiPRODUCT_CHARACTERISTICS := tabletPRODUCT_DEVICE := K50PRODUCT_NAME   := evideo_k50PRODUCT_MODEL  := K50PRODUCT_BRAND  := eVideoPRODUCT_MANUFACTURER := StarNet eVideoPRODUCT_LOCALES := zh_CNPRODUCT_PROPERTY_OVERRIDES += ro.sf.lcd_density=240

device.mk  // 非必要

# For factory firmwareifeq ($(strip $(BUILD_FACTORY_FIRMWARE)), true)    PRODUCT_PACKAGES += \        DCLauncherelse    $(call inherit-product-if-exists, vendor/evideo/K50/jenkins.mk)endif# K50/K30应用包含工厂ifeq ($(strip $(BUILD_FACTORY_FIRMWARE)), false)    PRODUCT_PACKAGES += \        evfactory \        stressapptest2 \        evfactoryclient    PRODUCT_COPY_FILES += \        vendor/evideo/common/evfactory/memtester:/system/bin/memtesterendifPRODUCT_PACKAGES += \    Music \        libaudiorecordPRODUCT_COPY_FILES += \    vendor/evideo/K50/etc/install_apk.sh:system/vendor/bin/install_apk.sh$(call inherit-product, vendor/evideo/common/device.mk)

overlay资源叠加层技术(以产品K50为例):

BoardConfig.mk声明overlay路径:

PRODUCT_PACKAGE_OVERLAYS += \    vendor/evideo/K50/overlay

接下来举个默认壁纸定制的例子:

android默认壁纸图片路径 frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.jpg

利用android overlay资源叠加层技术我们可以定制K50的默认壁纸为我指定的图片而不影响系统原有的默认壁纸

在K50 overlay 目录添加文件 frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.jpg即可。

自定义平台签名:

对android系统进行签名,需要生成四种类型的key文件:releasekey、media、shared、platform

The following commands were used to generate the release key pairs:  development/tools/make_key testkey  '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'  development/tools/make_key platform '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'  development/tools/make_key shared   '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'  development/tools/make_key media    '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'

对于K50还有 verity_key 用于system.img签名

mm -B system/extras/verity/   编译生成  out/host/linux-x86/bin/generate_verity_key verity_key生成:  generate_verity_key -convert verity.x509.pem verity_key

common/BoardConfig.mk 指定releasekey

PRODUCT_DEFAULT_DEV_CERTIFICATE := \    vendor/evideo/$(PRODUCT_MODEL)/security/platform_keys/releasekey

build/core/Makefile 需修改的地方

# The "test-keys" tag marks builds signed with the old test keys,# which are available in the SDK.  "dev-keys" marks builds signed with# non-default dev keys (usually private keys from a vendor directory).# Both of these tags will be removed and replaced with "release-keys"# when the target-files is signed in a post-build step.ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),vendor/evideo/$(PRODUCT_MODEL)/security/platform_keys/releasekey)BUILD_KEYS := release-keyselseBUILD_KEYS := dev-keysendif

build/core/config.mk 对 DEFAULT_SYSTEM_DEV_CERTIFICATE设置

# The default key if not set as LOCAL_CERTIFICATEifdef PRODUCT_DEFAULT_DEV_CERTIFICATE  DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)else  DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkeyendif

 

更多相关文章

  1. android ftp 客户端编写(ftp4j)
  2. Android目录结构
  3. Android(安卓)Studio Error:前言中不允许有内容。
  4. Android的源代码结构
  5. 《Android学习指南》目录
  6. Android(安卓)的源代码结构
  7. android ftp 客户端编写(ftp4j)
  8. Android(安卓)中的微型云
  9. android反编译

随机推荐

  1. EditText使用属性详解
  2. 【Android】关于Android文档的翻译
  3. .Net 转战 Android(安卓)4.4 日常笔记目
  4. android 向webview传值
  5. Android中的六大布局
  6. Android(安卓)UI系列-----RelativeLayout
  7. Android(安卓)SDK安装时出错“android Fa
  8. Android中的drawable state的各种状态
  9. Android(安卓)资源文件中@、@android:typ
  10. android Theme启动APP闪屏处理