18

Android系统源码下载与编译、刷机--Nexus6实测

 3 years ago
source link: https://renyugang.blog.csdn.net/article/details/51512263
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Android系统源码下载与编译、刷机--Nexus6实测

胖虎 2016-05-28 00:41:41 19327

此博文记录一下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$ lunch

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_deb-userdebug
     8. aosp_flo-userdebug
     9. full_fugu-userdebug
     10. aosp_fugu-userdebug
     11. mini_emulator_arm64-userdebug
     12. m_e_arm-userdebug
     13. mini_emulator_mips-userdebug
     14. mini_emulator_x86_64-userdebug
     15. mini_emulator_x86-userdebug
     16. aosp_flounder-userdebug
     17. aosp_angler-userdebug
     18. aosp_bullhead-userdebug
     19. aosp_hammerhead-userdebug
     20. aosp_hammerhead_fp-userdebug
     21. aosp_shamu-userdebug

Which 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: 28474998784
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8160
    Inode size: 256
    Journal blocks: 32768
    Label: 
    Blocks: 6951904
    Block groups: 213
    Reserved block group size: 1024
Created filesystem with 11/1738080 inodes and 153124/6951904 blocks
Creating filesystem with parameters:
    Size: 268435456
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8192
    Inode size: 256
    Journal blocks: 1024
    Label: 
    Blocks: 65536
    Block groups: 2
    Reserved 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 bootloader

1、依次刷入其他镜像文件:
fastboot flash recovery recovery.img
fastboot flash boot boot.img
fastboot flash system system.img

2、强烈建议双清(注意备份数据):
fastboot flash cache cache.img
fastboot flash userdata userdata.img

3、再次重启:
fastboot reboot

OK,到此为止,Android系统下载,编译,刷机都结束了,大家可以开始自己的Android系统定制之旅了。(PS:原生的弄完后,建议可以去试试弄CM的系统,CM做了一些优化,感觉比较不错!)

在这里插入图片描述


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK