Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android系統源碼下載與編譯、刷機--Nexus6實測

Android系統源碼下載與編譯、刷機--Nexus6實測

編輯:關於Android編程

前言

此博文記錄一下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 網站中可以看到相關列表信息
這裡寫圖片描述

(5).下載Android源代碼

repo sync

執行完後進入漫長的等待,系統大概有20多個G要下載,所以可以晚上的時候放著下載(記得一定要處於翻牆可訪問外網狀態喲~)

完成後,如圖所示就可以了
這裡寫圖片描述

(PS:這個時候Android目錄下是有個文件夾的.repo,這個文件夾大概占用了30G的空間,假設你後面不需要再更新系統,那麼這個文件夾可以刪除掉了)<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4NCjxwPjxpbWcgYWx0PQ=="這裡寫圖片描述" src="/uploadfile/Collfiles/20160528/20160528090434233.png" title="\" />


在設備驅動頁中找到相應的驅動程序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

結語

OK,到此為止,Android系統下載,編譯,刷機都結束了,大家可以開始自己的Android系統定制之旅了。(PS:原生的弄完後,建議可以去試試弄CM的系統,CM做了一些優化,感覺比較不錯!)

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved