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进来:

[email protected]:~/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设备” -> 选中你的手机对应的设备名就可以了。

[email protected]:~/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

结语

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

时间: 2024-10-05 05:58:40

Android系统源码下载与编译、刷机--Nexus6实测的相关文章

Android系统源码下载及编译

Android 系统源码下载及编译 1 首先你的JDK和Git是已经安装成功了.(百度) 2 如果使用的是Ubuntu64的系统,则需要安装的软件包:(其他的ubuntu系统有不同的下载包,具体查看官网文档https://source.android.com/source/initializing.html) sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc

AOSP ON MAKO(在NEXUS 4上刷ANDROID 4.4 源码包-下载/配置/编译/刷机)

特别感谢google官方文档及AOSP源码开放 参考链接: https://source.android.com/source/building-devices.html (官方源码刷device) https://developers.google.com/android/nexus/drivers#makokrt16s (硬件驱动包, 如只是运行模拟器则直接安装即可) https://developers.google.com/android/nexus/images (官方刷机包-下载im

编译Android系统源码和内核源码

好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现最近的脑子不够用了,今天写点什么呢?就把我之前编译Android系统源码和内核源码的过程记录一下,因为这个过程真的是受益匪浅,看重的不是结果,主要是过程,在这个过程中,我感觉最大的收获就是学习的耐心和毅力,因为在这个过程中那个问题就像是雨点似的天天打在你的脸上,虽然现在网上有很多文章介绍怎么去操作,但是我说句真心话,那些只能提供参考,因为你的工作环境毕竟和他不一样,所以等你按照他的步骤去操作的时候还是会遇到很多问题,当然我写这篇文章

第2章 Android源码下载及编译

在分析Android源码前,首先要学会如何下载和编译系统.本章将向读者完整的呈现Android的源码的下载流程.常见问题以及处理方法,并从开发者的角度来理解如何正确地编译出Android系统(包括原生态系统和定制设备).后面,我们将在此基础上深入到编译脚本的分析中.以"庖丁解牛"的精神来还原一个庞大而严谨的Android编译系统. 2.1 Android源码下载指南 2.1.1 基于Repo和git的版本管理 Git是一种分布式的版本管理系统,最初被设计用于linux内核的版本控制.本

FW 编译Android系统源码和内核源码

编译Android系统源码和内核源码 分类: Android2014-07-21 20:58 7287人阅读 评论(28) 收藏 举报 好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现最近的脑子不够用了,今天写点什么呢?就把我之前编译Android系统源码和内核源码的过程记录一下,因为这个过程真的是受益匪浅,看重的不是结果,主要是过程,在这个过程中,我感觉最大的收获就是学习的耐心和毅力,因为在这个过程中那个问题就像是雨点似的天天打在你的脸上,虽然现在网上有很多文章介绍怎么去操作,

【转】编译Android系统源码和内核源码

原文网址:http://blog.csdn.net/jiangwei0910410003/article/details/37988637 好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现最近的脑子不够用了,今天写点什么呢?就把我之前编译Android系统源码和内核源码的过程记录一下,因为这个过程真的是受益匪浅,看重的不是结果,主要是过程,在这个过程中,我感觉最大的收获就是学习的耐心和毅力,因为在这个过程中那个问题就像是雨点似的天天打在你的脸上,虽然现在网上有很多文章介绍怎么去操

android源码下载以及编译自己的ROM

android源码下载以及编译自己的ROM 最近发现kernel.org被墙了,为什么这种网站也能被墙了? 要想下载源码的话,只能绕过去了.下面是我从网上搜索到的一些下载方法: ============================================================================================== 原文链接是:http://cache.baidu.com/c?m=9d78d513d98316ed05fa950e1a67a3716

完整版linux下android源码下载、编译、模拟器启动运行

一.环境说明: 1.VMware版本:8.0.3 build-703057 2.liunx系统:Ubuntu10.10 3.jdk:sun-java6-jdk 二.Ubuntu 10.10更新源列表 由于??Ubuntu 10.10版本的源已经过期了,所以,需要对其进行更新,Ubuntu 10.10 已经发布了,下面提供更新源方法与更新源列表地址: 1.sudo gedit /etc/apt/sources.list     编辑你的源列表,将原来的内容全部删除,添加下面的源,复制到你的列表中,

Android源码下载和编译过程

这是我在编译android源码时整理记录的编译步骤和错误解决方法,期间参考了一些网上的博客和教程. 第一步: 安装ubuntu12.04,分配一盘空间50G,2G内存.如果分配1G内存编译时将报错.(我是在虚拟机中安装ubuntu,分配了50G空间,编译源码需要空间较大,建议分配50G或更多,使用wubi安装最大只能分配30G). 第二步: 安装JDK,此处选用JDK版本为JDK6-6u29 32位,下载链接http://www.oracle.com/technetwork/java/javas