Android系统源码下载与编译、刷机--Nexus6实测
前言
此博文记录一下Android从系统源码下载到刷机的全过程。
(https://source.android.com/source/build-numbers.html 页面中列表信息找到自己设备对应的Android版本进行选择,博文中选择MOB301)
硬件:Google 亲儿子 Nexus6("shamu")
Android系统:选择了Android官网上的MOB301对应的android-6.0.1_r42
驱动:自然就是MOB301_Nexus6对应的驱动了
编译系统:Ubuntu14.0.4
PS: 小小啰嗦一下~
我们知道仅仅看代码,提高是比较有限的,而且理解起来也比较肤浅,往往过目就忘. 而自己写过的代码,往往会印象比较深刻,在写的时候也会比较容易理解流程. 所以我们在看代码的同时, 如果能修改代码, 在手机上跑起来并看到修改的效果,这无疑会加快看代码的效率和积极性. 所以这篇文章,就讲解一下如何自己编译Android M的源码,并且在Nexus 6上跑起来. 至于为何需要自己编译固件,而不是直接安装Google给出的工厂固件?原因是Google给出的工厂固件是User版本,是没法随心所欲Push东西进去的. 所以我们需要编译自己的Userdebug版本.
另外你需要知道AOSP,AOSP即Android Open Source Project 汉语意思是:谷歌开放源代码项目.我们通过Google官方下载的源代码,就是AOSP的代码, 其中是不包含Google开发的那些个应用的,各个厂商拿到的也是这个版本,在这个版本的基础上进行修改. 而Google发布的工厂固件则是包含全套Google服务的. 厂商如果想安装Google服务,就需要过Google的那一套认证,比较麻烦,而且价格不菲,鉴于Google在国内的尴尬地位,国内很多厂商都没有过这个认证.
因此有人会说刷出来的ROM和Google发布的user版本的ROM看起来界面不一致的原因就在于此。
正文
一开始请先清楚几个点:
1.手上的手机型号是什么?
2.Android官网上是否有支持该手机的系统源代码和驱动程序?
本文以Nexus 6为例,后面的内容不再重复。
Ubuntu编译环境配置
本文以Android系统编译为主,因此不写关于VirtualBox装Ubuntu14.04的相关内容(网上搜索下,一堆的资料)
装完了Ubuntu系统后,咱们在命令窗口下执行:
1.执行如下命令,下载编译相关的组件:
sudo apt-get install flex bison gperf build-essential curl zlib1g-dev g+±multilib g+±4.4-multilib libc6-dev-i386 lib32ncurses5-dev lib32z1 lib32ncurses5 lib32bz2-1.0 x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z1-dev mingw32 libxml2-utils gnupg zip xsltproc python-markdown wine tofrodos
2.java环境配置(1.7)
将Ubuntu切换到163的源下,下载安装openjdk-7相关的jre和jdk
sudo apt-get install 对应的openjdk组件名
Android系统源代码下载和驱动sh脚本下载
1.Android系统源代码下载(接下来这些操作最好都是基于翻墙的情况下进行)
这部分内容也可以参照Andorid官方网站的介绍说明(http://source.android.com/source/downloading.html)
(1).安装命令行方式下工作的文件传输工具curl.
sudo apt-get install curl
(2).开源的分布式版本控制系统git(Android项目使用git管理).
sudo apt-get install git
(3).安装Repo命令行工具(Repo是Google开发的基于git更好管理Android项目的工具)
mkdir ~/bin
PATH=~/bin:$PATH
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
(4).初始化Repo客户端
mkdir Android
cd Android
repo init -u https://android.googlesource.com/platform/manifest -b 你所要选择的android系统对应的Branch (MOB301对应android-6.0.1_r42)
则为:repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r42
Branch的列表在:http://source.android.com/source/build-numbers.html#source-code-tags-and-builds 网站中可以看到相关列表信息
(5).下载Android源代码
repo sync
执行完后进入漫长的等待,系统大概有20多个G要下载,所以可以晚上的时候放着下载(记得一定要处于翻墙可访问外网状态哟~)
完成后,如图所示就可以了
(PS:这个时候Android目录下是有个文件夹的.repo,这个文件夹大概占用了30G的空间,假设你后面不需要再更新系统,那么这个文件夹可以删除掉了)
在设备驱动页中找到相应的驱动程序sh脚本,并下载
Nexus对应驱动页:https://developers.google.com/android/nexus/drivers
将这三个压缩包下载后,解压缩得到三个sh文件。
将这三个sh文件copy到Android编译目录下。
执行这3个sh文件,会下载相关驱动文件到 vendor 目录
./extract-broadcom-shamu.sh
./extract-moto-shamu.sh
./extract-qcom-shamu.sh
过程中会让我们看一些声明信息,看完后输入I ACCEPT即可:
编译Android系统
(1).环境初始化
source build/envsetup.sh
执行完后,会将一些文件include进来:
panghu@panghu:~/Android$ source ./build/envsetup.sh
including device/asus/deb/vendorsetup.sh
including device/asus/flo/vendorsetup.sh
including device/asus/fugu/vendorsetup.sh
including device/generic/mini-emulator-arm64/vendorsetup.sh
including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
including device/generic/mini-emulator-mips/vendorsetup.sh
including device/generic/mini-emulator-x86_64/vendorsetup.sh
including device/generic/mini-emulator-x86/vendorsetup.sh
including device/htc/flounder/vendorsetup.sh
including device/huawei/angler/vendorsetup.sh
including device/lge/bullhead/vendorsetup.sh
including device/lge/hammerhead/vendorsetup.sh
including device/moto/shamu/vendorsetup.sh
including sdk/bash_completion/adb.bash
(2)lunch选择要build的类型
lunch
执行该命令后,会列出当前可供选择的build type,对应选择自己需要的即可
panghu@panghu:~/Android$ lunchYou're building on LinuxLunch menu... pick a combo:1. aosp_arm-eng2. aosp_arm64-eng3. aosp_mips-eng4. aosp_mips64-eng5. aosp_x86-eng6. aosp_x86_64-eng7. aosp_deb-userdebug8. aosp_flo-userdebug9. full_fugu-userdebug10. aosp_fugu-userdebug11. mini_emulator_arm64-userdebug12. m_e_arm-userdebug13. mini_emulator_mips-userdebug14. mini_emulator_x86_64-userdebug15. mini_emulator_x86-userdebug16. aosp_flounder-userdebug17. aosp_angler-userdebug18. aosp_bullhead-userdebug19. aosp_hammerhead-userdebug20. aosp_hammerhead_fp-userdebug21. aosp_shamu-userdebugWhich would you like? [aosp_arm-eng] 21
机型对照表
(3)开始编译
make -j8
等待编译结束…灰常灰常漫长.机器比较好的大概1-2小时,机器不好的,那个酸爽…!!!
编译结束后提示如下即可:
####make completed successfully ####
刷机
Nexus6关机状态下,长按音量下+电源,进入recovery模式
然后在源码根目录下(Android根目录下)执行下面命令:
fastboot -w flashall
如果这时候提示:< waiting for device > 的话,证明你的虚拟机VirtualBox没有识别到你的手机,可以在VirtualBox上菜单中 “设备” -> “分配USB设备” -> 选中你的手机对应的设备名就可以了。
panghu@panghu:~/Android$ fastboot -w flashall
< waiting for device >target reported max download size of 536870912 bytes
Creating filesystem with parameters:Size: 28474998784Block size: 4096Blocks per group: 32768Inodes per group: 8160Inode size: 256Journal blocks: 32768Label: Blocks: 6951904Block groups: 213Reserved block group size: 1024
Created filesystem with 11/1738080 inodes and 153124/6951904 blocks
Creating filesystem with parameters:Size: 268435456Block size: 4096Blocks per group: 32768Inodes per group: 8192Inode size: 256Journal blocks: 1024Label: Blocks: 65536Block groups: 2Reserved block group size: 15
Created filesystem with 11/16384 inodes and 2089/65536 blocks
--------------------------------------------
Bootloader Version...: moto-apq8084-71.18
Baseband Version.....: D4.01-9625-05.34+FSG-9625-02.111
Serial Number........: ZY222WQN82
--------------------------------------------
checking product...
OKAY [ 0.004s]
sending 'boot' (8201 KB)...
OKAY [ 1.291s]
writing 'boot'...
OKAY [ 0.153s]
sending 'recovery' (8917 KB)...
OKAY [ 1.403s]
writing 'recovery'...
OKAY [ 0.126s]
sending sparse 'system' (516549 KB)...
OKAY [ 84.029s]
writing 'system'...
OKAY [ 7.818s]
sending sparse 'system' (137398 KB)...
OKAY [ 23.156s]
writing 'system'...
OKAY [ 2.137s]
erasing 'userdata'...
OKAY [ 2.898s]
sending 'userdata' (139061 KB)...
OKAY [ 21.777s]
writing 'userdata'...
OKAY [ 2.672s]
erasing 'cache'...
OKAY [ 0.045s]
sending 'cache' (6248 KB)...
OKAY [ 0.983s]
writing 'cache'...
OKAY [ 0.107s]
rebooting...finished. total time: 149.323s
或者也可以一个个img刷入:
0、重启进入刷机模式
adb reboot bootloader1、依次刷入其他镜像文件:
fastboot flash recovery recovery.img
fastboot flash boot boot.img
fastboot flash system system.img2、强烈建议双清(注意备份数据):
fastboot flash cache cache.img
fastboot flash userdata userdata.img3、再次重启:
fastboot reboot
结语
OK,到此为止,Android系统下载,编译,刷机都结束了,大家可以开始自己的Android系统定制之旅了。(PS:原生的弄完后,建议可以去试试弄CM的系统,CM做了一些优化,感觉比较不错!)
Android系统源码下载与编译、刷机--Nexus6实测相关推荐
- android 例子源码_AOSP系列文章(一)-Android系统源码下载和编译
前期准备 从这里开始,我们就去做android系统的修改,相信会有更多的同学有更多的玩法. android是开源的,在源代码里没有秘密. 同学们可以去修改系统,做成自己喜欢的样子.做汽车的车机,到家里 ...
- 从2.3.3到4.1.1:最全的android系统源码下载大集合
115网盘下载,android源码大集合,包括2.3.3. 2.3.4(新增) . 2.3.5 .2.3.7. 4.0.1(重新上传,无CRC错误) .4.0.3 . 4.0.4(新增) 七个版本的a ...
- Android系统源码下载及使用(Android 14到19源码)
在创建了Android项目之后,会根据向导中Compile With的版本: 在随后创建成功的项目中显示该版本,在项目的结构显示如下: 展开android.jar,会得到系统的框架如下: 这些类和函数 ...
- 【Android】系统源码下载及编译
源码及编译 步骤 1:创建一个空目录来存放源码: mkdir aosp cd aosp 步骤 2:获取最新版本的 repo 并签出 android-8.1.0_r1 分支: repo init -u ...
- android内核源码下载和编译
1.下载编译 新建kernel目录 ~/srcAndroid/src4.4.4_r1/kernel目录下,输入命令: seven@ThinkPad:~/srcAndroid/src4.4.4_r1/k ...
- Android kernel源码下载与编译
构建内核 本页详细介绍了为 Android 设备构建自定义内核的流程.以下说明会逐步指导您如何选择正确的源代码,编译内核,以及将结果嵌入到根据 Android 开源项目 (AOSP) 编译的系统映像中 ...
- android系统源码7.1.2_r8下载,编译,运行到nexus5X上,修改源码并编译SDK进行测试
一,学习android系统源码下载,编译的作用 1,可以自己 DIY 自己的rom系统,从系统层面,宏观的加深理解 android系统 2,编译自己的 userdebug(原生root权限) rom, ...
- ubuntu-18.04.4 Android系统源码TP1A(Android 13)下载及编译
继上一篇博客介绍了VMware Workstation15 配置ubuntu-18.04.4,这篇主要介绍安装后环境搭建,Android源码的下载与编译.小编当前下载的是当前最新的代码,是主干分支代码 ...
- Android系统源码在线阅读(Android4.4~Android13.0)
原文链接 Android系统源码在线阅读(Android4~Android13) Android系统源码下载.编译.刷机 玩转Android10(二)刷机操作 Android系统镜像刷机方法(一) ...
最新文章
- [转载 整理]C语言链表实例
- C语言学习之求1+2+3+···+100的值
- 利用Python实现数据偏移
- unity 草 可以一棵棵种吗?_俗语“门前一棵柳,金银财宝往家走”啥意思?房前可以种柳树吗?...
- 竞赛发布|100万奖金寻DT时代“最强大脑”!
- (原創) 开启Notebook时,建议从天版中间开启 (日記)
- 两个栈实现队列 以及两个队列实现栈
- 游戏设计阻力探秘之扩展空间
- 【黑苹果】戴尔DELL Vostro 14 5490+i5-10210U和i7-10510U+OpenCore+macos 10.15.4 efi文件下载
- vmware eth0网卡无ip
- Unicast与Multicast
- Haar-like特征计算和积分图详解
- 自媒体必做的一个平台
- 卸载系统的dhcp服务器,dhcp服务器释放ip地址
- uniapp打开地图选择位置(查看位置)详解
- 以太网交换机可以家用吗_工业交换机的作用是什么?工业交换机可以家用吗?...
- c语言中算法的有穷性是指,在C语言中,算法的有穷性是指什么?
- 跨设备/跨架构 Tizen系统四大优势解读
- mysql触发器任务
- 2.文本预处理(分词,命名实体识别和词性标注,one-hot,word2vec,word embedding,文本数据分析,文本特征处理,文本数据增强)