【开发指南】如何为nexus 5编译固件
nexus 5是谷歌的亲儿子,而android的源码是开源的,那如果我有一个nexus 5手机,为何不自己为nexus 5编译软件呢?
开搞,本文假定已经有android 5.1的源码并已经配置好开发环境,如果没有则参考google官方文档下载源码并配置开发环境。参考https://source.android.com/source/initializing.html以及https://source.android.com/source/downloading.html。注意,这个过程可能需要访问外国网站,作为程序员的我们,访问外国网站不是小菜一碟。
另外你需要知道AOSP,AOSP即Android Open Source Project 汉语意思是:谷歌开放源代码项目。我们通过Google官方下载的源代码,就是AOSP的代码,其中是不包含Google开发的那些个应用的,各个厂商拿到的也是这个版本,在这个版本的基础上进行修改。而Google发布的工厂固件则是包含全套Google服务的。厂商如果想安装Google服务,就需要过Google的那一套认证,比较麻烦,而且价格不菲,鉴于Google在国内的尴尬地位,国内很多厂商都没有过这个认证。所以,我们自己编译的出来的软件和nexus 5官方放出来的刷机包还是有区别的。
1. 初始化编译环境
. build/envsetup.sh
2. 加载机型
lunch
3. 选择要编译的机器
You're building on Linux
Lunch menu... pick a combo:
1. aosp_arm-eng
2. aosp_arm64-eng
3. aosp_mips-eng
4. aosp_mips64-eng
5. aosp_x86-eng
6. aosp_x86_64-eng
7. aosp_shamu-userdebug
8. aosp_manta-userdebug
9. full_fugu-userdebug
10. aosp_fugu-userdebug
11. aosp_grouper-userdebug
12. aosp_tilapia-userdebug
13. aosp_deb-userdebug
14. aosp_flo-userdebug
15. aosp_mako-userdebug
16. aosp_hammerhead-userdebug
17. aosp_flounder-userdebug
18. mini_emulator_x86_64-userdebug
19. mini_emulator_arm-userdebug
20. mini_emulator_x86-userdebug
21. mini_emulator_mips-userdebug
22. mini_emulator_arm64-userdebug
3.1 机型对照表
Device |
Code name |
Build configuration |
---|---|---|
Nexus 6 |
shamu |
aosp_shamu-userdebug |
Nexus Player |
fugu |
aosp_fugu-userdebug |
Nexus 9 |
volantis (flounder) |
aosp_flounder-userdebug |
Nexus 5 (GSM/LTE) |
hammerhead |
aosp_hammerhead-userdebug |
Nexus 7 (Wi-Fi) |
razor (flo) |
aosp_flo-userdebug |
Nexus 7 (Mobile) |
razorg (deb) |
aosp_deb-userdebug |
Nexus 10 |
mantaray (manta) |
full_manta-userdebug |
Nexus 4 |
occam (mako) |
full_mako-userdebug |
Nexus 7 (Wi-Fi) |
nakasi (grouper) |
full_grouper-userdebug |
Nexus 7 (Mobile) |
nakasig (tilapia) |
full_tilapia-userdebug |
Galaxy Nexus (GSM/HSPA+) |
yakju (maguro) |
full_maguro-userdebug |
Galaxy Nexus (Verizon) |
mysid (toro) |
aosp_toro-userdebug |
Galaxy Nexus (Experimental) |
mysidspr (toroplus) |
aosp_toroplus-userdebug |
PandaBoard (Archived) |
panda |
aosp_panda-userdebug |
Motorola Xoom (U.S. Wi-Fi) |
wingray |
full_wingray-userdebug |
Nexus S |
soju (crespo) |
full_crespo-userdebug |
Nexus S 4G |
sojus (crespo4g) |
full_crespo4g-userdebug |
3.2 三个版本说明版本
user |
limited access; suited for production |
userdebug |
like “user” but with root access and debuggability; preferred for debugging |
eng |
development configuration with additional debugging tools |
选择aosp_hammerhead-userdebug之后,会有下面的确认信息:
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=5.0.50.50.50.50
TARGET_PRODUCT=aosp_hammerhead
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=krait
TARGET_2ND_ARCH=
TARGET_2ND_ARCH_VARIANT=
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.13.0-37-generic-x86_64-with-Ubuntu-14.10-utopic
HOST_BUILD_TYPE=release
BUILD_ID=AOSP
OUT_DIR=out
============================================
4.生成驱动目录
接下来需要在Android官网下载 Nexus5所需要的驱动:https://developers.google.com/android/nexus/drivers#hammerheadlrx22c
下载完成后,解压出来是三个.sh文件,放到Android源码目录下面,然后执行.会将相关驱动放到vender目录下面.
5. 执行编译命令
make -j8
如果没有出错的话,在经过漫长的时间之后,编译成功:
6. 刷机命令
Nexus5关机状态下,长按音量下+电源,即可进入recovery模式, 然后在源码根目录下执行下面命令:
fastboot -w flashall
刷机成功后会自动重启
~/ fastboot -w flashall
target reported max download size of 1073741824 bytes
Creating filesystem with parameters:
Size: 13725835264
Block size: 4096
Blocks per group: 32768
Inodes per group: 8144
Inode size: 256
Journal blocks: 32768
Label:
Blocks: 3351034
Block groups: 103
Reserved block group size: 823
Created filesystem with 11/838832 inodes and 93654/3351034 blocks
Creating filesystem with parameters:
Size: 734003200
Block size: 4096
Blocks per group: 32768
Inodes per group: 7472
Inode size: 256
Journal blocks: 2800
Label:
Blocks: 179200
Block groups: 6
Reserved block group size: 47
Created filesystem with 11/44832 inodes and 5813/179200 blocks
--------------------------------------------
Bootloader Version...: HHZ12d
Baseband Version.....: M8974A-2.0.50.2.22
Serial Number........: 08ade1a513dc087b
--------------------------------------------
checking product...
OKAY [ 0.100s]
sending 'boot' (8950 KB)...
OKAY [ 0.500s]
writing 'boot'...
OKAY [ 0.784s]
sending 'recovery' (9672 KB)...
OKAY [ 0.556s]
writing 'recovery'...
OKAY [ 0.814s]
erasing 'system'...
OKAY [ 1.166s]
sending 'system' (328187 KB)...
OKAY [ 10.501s]
writing 'system'...
OKAY [ 23.623s]
erasing 'userdata'...
OKAY [ 14.657s]
sending 'userdata' (137318 KB)...
OKAY [ 4.520s]
writing 'userdata'...
OKAY [ 9.776s]
erasing 'cache'...
OKAY [ 0.618s]
sending 'cache' (13348 KB)...
OKAY [ 0.630s]
writing 'cache'...
OKAY [ 1.070s]
rebooting...
finished. total time: 70.095s
- 1.Linux操作系统安装的5种方法以及心得
- 我(作为一名开发者)所犯过的错误
- Hadoop-2.7.4 集群快速搭建
- Scala-2.13.0 安装及配置
- HBase-1.3.1 集群搭建
- CentOs7.3 Hadoop 用户 ssh 免密登录
- 手把手教你用Mysql-Cluster-7.5搭建数据库集群
- 简单的java开源图床
- 调度器Quartz的简述与使用总结
- 使用 RecyclerView 实现 Gallery 画廊效果,并控制 Item 停留位置
- linux chmod,chown命令详解
- Quartz任务调度快速入门
- ElasticSearch 安装报错整理
- Docker Compose 1.16.1 安装
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 利用hexo和github或coding 搭免费个人博客
- window 指令之 tree
- Go语言入门(六)结构体后续&指针
- 一天一大 leet(二叉树的序列化与反序列化)难度:困难 DAY-16
- 一天一大 leet(三数之和)难度:中等 DAY-12
- MongoDB Docker版本:基础入门和复制集
- Django连接MySql使用models处理数据
- 一天一大 leet(爬楼梯)难度:简单 DAY-13
- 一天一大 leet(最长公共前缀)难度:简单 DAY-15
- Go语言入门(七)goroutine和channel
- 一天一大 leet(从先序遍历还原二叉树)难度:困难 DAY-18
- Go语言入门(八)线程安全&锁
- 一天一大 leet(最佳观光组合)难度:中等 DAY-17
- Django环境搭建
- javascript 中的位运算符