Android系统固件定制方式

一般情况下,一款基于Android的设备,会根据需求定制系统APP,定制的规格往往需要依据设备的具体应用场景。比如,面向通信的设备,那么需要预装phone、tablets、browser、TeleCom等APP或者服务;而面向可穿戴的设备,那么一般需要bluetooth等APP;
那么,如何根据系统的要求对于系统APP或者系统服务进行定制呢?其实,Android的构建系统已经对相关的需求进行了相应的配置。其对于不同需求的设备提供了相应的基础配置文件,厂商可以自行定制这些基础配置文件,然后,通过这些配置文件,构建系统就可以生成适应于该设备的Android固件了。

产品构建框架

Android系统构建框架基于特定的make构建系统,该系统的配置文件一般后缀为.mk。Android系统扩展了Makefile的功能,增加很多构建过程中使用的函数、变量等。所以,如果想要增加新的产品,那么就需要提供一些.mk文件,用于控制具体的产品构建过程。下面具体了解一下几个比较重要的配置文件。

target_product.mk

Android系统在构建关于某种产品的固件时,一般会根据特定于该产品的具体target_product.mk来配置生成整个Android系统。
/target_product.mk配置文件位于:/path_to_android/device/vendor/目录下,其中path_to_android表示Android系统的根目录;vendor为具体的厂商名称,例如,htc、moto、softwinner等。

target_product.mk的基本结构如下:

  • 基本配置信息:

      Android系统基本产品配置信息特定厂商平台公共的配置信息
    
  • 特定产品配置信息:

      包括特定于某一个产品的配置信息
    

target_product.mk提供的能力

target_product.mk通过一系列的函数、变量来控制系统的构建过程,主要的变量和函数如下:

  • PRODUCT_PACKAGES:产品中包括的系统级APP,比如Launcher。

  • PRODUCT_COPY_FILES:需要拷贝到产品中的文件,格式:src_file:dst_file,其中,src_file、dst_file都为相对路径,例如:

    device/softwinner/t3-p1/etc/apns-conf.xml:system/etc/apns-conf.xml,表示将apns-conf.xml拷贝到目标系统system/etc目录下。

  • PRODUCT_PROPERTY_OVERRIDES:覆盖build.prop中的系统属性信息。例如:

    persist.sys.timezone=Asia/Shanghai配置系统的时区信息。

  • inherit-product:用于调用上级.mk配置信息,例如:

    $(call inherit-product, build/target/product/full_base.mk),通过inherit-product,解析full_base.mk中的配置信息。

vendorsetup.sh

特定于某款具体的产品,一般会编写一个target_product.mk文件用于控制Android系统的具体构成,然后,编写vendorsetup.sh用于定义产品的型号。 一般会编写两条型号信息:eng、user。eng用于编译出debug版本的系统,user用于编译release版本的系统。例如:

add_lunch_combo t3_p1-eng
add_lunch_combo t3_p1-user

系统构建过程

Android系统的构建过程一般分为以下几个:
(1)配置环境变量->(2)选定产品型号->(3)编译->(4)打包。

  • 配置环境变量: 通过如下命令:source build/envsetup.sh设置Android编译时所需要的环境信息。其中,该脚本会扫描device目录下的所有文件,并执行执行所有的vendorsetup.sh脚本。这样,第2步,就可以看到所有的产品型号信息了。

  • 选定产品型号:选定符合需求的产品型号,一般产品型号都是自定义的。

  • 编译:Android系统编译:包括,BootLoader、kernel、rootfs、system.img等。

  • 打包:将编译阶段生成的各个编译产物打包成一个镜像文件,以备系统烧录。

产品定制

对于具体的产品,我们可以进行哪些定制工作?具体定制该如何开展呢?下面以基于全志T3平台的Android 6.0固件定制操作为例。
T3平台使用的Android6.0系统,该平台相关的产品配置信息位于:device/sofewinner/下:

common  t3-common  t3-p1  t3-p1_v1

其中,common包括了全志平台下一些通用的工具,例如pack、extract-bsp等;t3-common包括了t3处理器平台下的一些通用配置。
t3-p1、t3-p1_v1表示两种产品型号。

下面举一个替换系统默认输入法的示例。

Android系统提供的默认输入法不是很好用,所以需要将系统默认输入法替换为Sogou输入法。替换步骤如下:

  1. 找到系统输入法对应的安装位置:系统输入法属于Android系统级服务,其安装位置一般位于:build/target/product中,系统输入法的APP名称为:LatinIME。通过grep -nr LatinIME,可以找到关于LatinIME相关的配置信息,把这些配置信息注释掉。

  2. 将Sogou.apk放到t3-p1的apk目录下,然后再t3-p1.mk中增加一条配置信息:

    PRODUCT_COPY_FILES +=
    device/softwinner/t3-p1/apk/sogou.apk:system/preinstall/sogou.apk

  3. 配置硬件键盘、Settings中关于输入法的配置信息:

    settings put secure show_ime_with_hard_keyboard 1
    settings put secure enabled_input_methods com.sohu.inputmethod.sogou/.SogouIME

可以将上述信息编写成一个脚本,保证系统启动时,执行就可以了。至此,系统的默认输入法就替换为了Sogou输入法。

类似的,可以将系统中不需要的APP,例如Music、Camera、Browser、Recorder进行裁剪。

Android系统固件定制方式相关推荐

  1. Android系统的定制

    深入浅出 - Android系统移植与平台开发(1)- Android系统的定制 http://blog.csdn.net/mr_raptor/article/details/30113417?utm ...

  2. 国内定制android系统吗,同样都是基于Android系统 国产定制系统差异有多大?

    目前国产手机的操作系统都是基于谷歌的Android系统深度定制的,每个厂商在进行定制时便产生了差异,也有了自家的特色功能.现在笔者手上就有荣耀V10和vivo Z3两款手机,所以今天就给大家带来这两款 ...

  3. android系统时间获取方式

    1.获取系统时间 [java] view plaincopy SimpleDateFormat timeFormat = new SimpleDateFormat("HH-mm-ss&quo ...

  4. android x86 uc,android x86 固件定制

    测试提了几个bug 1.系统语言默认设置成中文,否则时间控件显示的内容有问题 2.关闭10分钟不操作自动休眠功能 3.默认关闭虚拟键盘,目的在文本控件点击后,虚拟键盘就会在右下角显示出来,导致物理键盘 ...

  5. Android系统快速编译方式ninja

    随着Android版本的更迭,尤其是Androd10和Android11源码的编译,单编模块的时间也特别慢,每次都需要半个小时甚至更长,因为每次单编都会重新加载所有mk文件,再生成ninja编译,此过 ...

  6. 重温1 Android系统架构及版本

    1.Linux内核层(Linux Kernel) 为Android设备的各种硬件提供了底层驱动,Display Driver/Camera Driver/Bluetooth Driver/Flash ...

  7. 云版 Android 系统来了?

    [CSDN 编者按]MicroDroid 本质上还是一个 Android 系统,换句话说,甚至不能将 MicroDroid 作为一个单独的系统来使用,谷歌如今为现有的Android 系统开发基于虚拟机 ...

  8. 深入浅出 - Android系统移植与平台开发(六)- 为Android启动加速【转】

    本文转载自:http://blog.csdn.net/mr_raptor/article/details/8006721 Android的启动速度一直以来是他的诟病,虽然现在Android设备的硬件速 ...

  9. 行车记录仪android,车叮咚:一款搭载 Android 系统的行车记录仪是怎样的?

    市面上关于行车记录仪.OBD 盒子以及车机系统的产品有很多品类,但是大多功能单一,可是如果将以上三种功能进行整合并且以后视镜形态出现的话,会有人感兴趣吗? 这款产品叫做车叮咚,创始人张昊告诉雷锋网(公 ...

最新文章

  1. 从0设计一个基于Redis的锁服务
  2. 波士顿咨询:2018最具创新力企业50强
  3. python测试开发自学教程-【光荣之路】Python全栈测试开发课程
  4. Java中变量、类初始化顺序
  5. 微软官方工具MediaCreationTool制作U盘Windows10启动盘教程
  6. 集群、分布式、微服务的概念及异同
  7. CSS Grid 网格布局教程
  8. loj#2542. 「PKUWC2018」随机游走(MinMax容斥 期望dp)
  9. 理解Monad,一份monad的解惑指南
  10. LLRP 提供程序概述
  11. Android Realm数据库
  12. c++课程设计(水)
  13. MAC表和ARP表的老化时间:
  14. bat实现黑客流星雨BAT_bat黑客帝国
  15. iOS 中使用 webSocket
  16. Temami防辐射服为爱起航
  17. 2021-07-06 游戏日报
  18. Word中序号后面有空格怎么删除?
  19. 直播 | 骞云科技DevOps实践
  20. 老司机带你快速实现Python下载与安装

热门文章

  1. 2022最新汉化camtasia studio电脑录制屏幕工具
  2. NJR日清纺微理光R5445系列 单节锂电池保护芯片,内置驱动器高位Nch FET开关温度保护
  3. 前端代码编辑器VS Code 必装插件有哪些?
  4. 三、软考·系统架构师——计算机网络基础
  5. 【已解决】No module named “win32com“ win32com 无法导入
  6. 微信公众号定时推送消息
  7. (四)MySQL学习笔记——多表设计、多表查询、多表查询练习题
  8. volatile禁止重排序详解
  9. OSChina 万圣节乱弹 ——重口味请谨慎点开
  10. 数字在排序数组中出现的次数