Android系统固件定制方式
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系统基本产品配置信息
特定厂商平台公共的配置信息
1
2
特定产品配置信息:
包括特定于某一个产品的配置信息
1
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
1
2
系统构建过程
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
1
其中,common包括了全志平台下一些通用的工具,例如pack、extract-bsp等;t3-common包括了t3处理器平台下的一些通用配置。
t3-p1、t3-p1_v1表示两种产品型号。
下面举一个替换系统默认输入法的示例。
Android系统提供的默认输入法不是很好用,所以需要将系统默认输入法替换为Sogou输入法。替换步骤如下:
找到系统输入法对应的安装位置:系统输入法属于Android系统级服务,其安装位置一般位于:build/target/product中,系统输入法的APP名称为:LatinIME。通过grep -nr LatinIME,可以找到关于LatinIME相关的配置信息,把这些配置信息注释掉。
将Sogou.apk放到t3-p1的apk目录下,然后再t3-p1.mk中增加一条配置信息:
PRODUCT_COPY_FILES +=
device/softwinner/t3-p1/apk/sogou.apk:system/preinstall/sogou.apk
配置硬件键盘、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系统固件定制方式的更多相关文章
- 深入浅出 - Android系统移植与平台开发(十一)- Android系统的定制(瘋耔修改篇一)
首先非常感谢原文作者为我们提供的知识库,因为有你们的贡献,我们的开发难度更显简单 原文 : http://blog.csdn.net/mr_raptor/article/details/30113 ...
- android x86 固件定制
测试提了几个bug 1.系统语言默认设置成中文,否则时间控件显示的内容有问题 2.关闭10分钟不操作自动休眠功能 3.默认关闭虚拟键盘,目的在文本控件点击后,虚拟键盘就会在右下角显示出来,导致物理键盘 ...
- 深入浅出 - Android系统移植与平台开发(六)- 为Android启动加速
作者:唐老师,华清远见嵌入式学院讲师. Android的启动速度一直以来是他的诟病,虽然现在Android设备的硬件速度越来越快,但是随着新 版本的出现,其启动速度一直都比较慢,当然,作为程序员,我们 ...
- Android系统定制——Download Android System 及加载system镜像文件
定制android系统(配置及相关系统的镜像文件),具体可参考:Driver_All_in_One_V1.0——MT6735_6753.pdf文档,特别需要理解的是Download部分. 与之对应的软 ...
- 深入浅出 - Android系统移植与平台开发(五)- 定制手机模拟器ROM
一. 修改化定制Android4.0系统 Android系统启动时,先加载Linux内核,在Linux的framebuffer驱动里可以定制开 机界面,Linux内核启动成功后,挂载根文件系统,启动A ...
- 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)
第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...
- Android系统JNI的实现方式
Android系统JNI的实现方式 All rights reserved JNI(Java Native Interface)定义了一种Java代码调用C或者C++代码等其它代码的方式. 在A ...
- Android系统关机或几种方式重启
---------------------------------------------------------------------------------------------------- ...
- Android系统定制和源码开发以及源码编译(附视频)
Android系统定制配套视频: 为了把Android系统源码定制和编译的课程讲完,从准备到录制完所有的视频,一共花去了近半年的时间,前前后后各种下载源码,编译源码,系统不兼容,版本适配,虚拟机配置困 ...
随机推荐
- SPOJ:Collecting Candies(不错的DP)
Jonathan Irvin Gunawan is a very handsome living person. You have to admit it to live in this world. ...
- POJ2443 Set Operation (基础bitset应用,求交集)
You are given N sets, the i-th set (represent by S(i)) have C(i) element (Here "set" isn't ...
- AutoIt: send 命令 VS ControlClick的使用
2008年的时候第一次接触AutoIt,当时觉得局限性太多了,就不想学,觉得把Watir,Ruby搞好就行了. 最近一段时间比较闲,发现自己对GUI的自动化操完全是短板,就把AutoIt重新拾起来了. ...
- python-----windows下安装face_recognition库
如果直接在cmd命令界面 输入:pip install face_recognition 如下图所示: 如果第一次就会出现一系列的问题,解决此问题就安装如下步骤: 一.如果你本机没有安装vistual ...
- codeforces round 422 div2 补题 CF 822 A-F
A I'm bored with life 水题 #include<bits/stdc++.h> using namespace std; typedef long long int LL ...
- JAVA 布局控制
在Java里该方法是安一个组件到一个窗体中去,它不同我们使用过的其它GUI系统.首先,它是全代码的:没有控制安放组件的“资源”.其次,该方法的组件被安放到一个被“布局管理器”控制的窗体中,由“布局管理 ...
- 【旧文章搬运】CsrssWalker学习笔记
原文发表于百度空间及看雪论坛,2009-05-13 看雪论坛地址:https://bbs.pediy.com/thread-89708.htm============================= ...
- IT行业怎么了?程序员按时上下班也被开除
转自:https://blog.csdn.net/keymo_/article/details/7783389 近日看了一条新闻是京东员工按时上下班遭“被离职”.话说一员工入职一个多月以来,每天保质保 ...
- LXC安装
#安装lxcsudo apt-get install lxc#创建一个容器,会出现下图选择的界面 lxc-create -t download -n my-container #开启lxc-start ...
- 用grep在子目录中指定的文件类型中查找(转载)
转自:http://www.ai7.org/wp/html/653.html grep -r abcd *.py 这样的命令得不到你期待的结果,而 grep -r abcd * 这样得到的结果又太多, ...