1. 程式人生 > >Android 7.1.1系統原始碼下載、編譯、刷機-Nexus 6實戰

Android 7.1.1系統原始碼下載、編譯、刷機-Nexus 6實戰

基本概念

  • AOSP : 就是Android Open Source Project也就是谷歌開放原始碼專案。 通過Google官方下載的原始碼也就是AOSP的程式碼,是不包含Google開發的全家桶的應用。 ps: 這個作為一個Android程式設計師肯定要知道的一個專業詞,不然顯得你很Low,很不專業。
  • Repo : Repo 是一款工具,可讓您在 Android 環境中更輕鬆地使用 Git,換句話來說Repo是用來管理Git管理的每個倉庫。詳情定義請點選here.

準備

  • 編譯系統:UbuntuKylin 16.04 LTS。
  • 手機:Nexus 6。
  • 驅動:Nexus 6驅動。
  • Android系統:Android 7.1.1。

注:從Android官網上是否有支援該手機的系統原始碼和驅動程式。

搭建編譯環境

1.安裝 JDK

如果 Ubuntu >= 15.04,則可以執行以下命令進行安裝OpenJDK,這裡使用的是OpenJDK. 之前準備使用Ubuntu LTS 14.04版本編譯,但是安裝OpenJDK有點麻煩所以放棄使用Ubuntu LTS 14.04。

sudo apt-get update
sudo apt-get install openjdk-8-jdk

如果你不是編譯Android 7.1.1系統原始碼,那麼可以參考圖中的Android版本所對應的JDK版本進行安裝。 Android系統版本對應的JDK

2.主要軟體包

  • Python : Python 2.6 - 2.7.
  • Git : Git 1.7 或更高版本.

下載原始碼

我這裡下載的Google官方的AOSP, 下載官方的需要科學上網並且保證你的網路穩定。具體在清華大學開源軟體映象站的AOSP,可以參考這裡的設定here

  • 安裝 Repo

1 . 確保主目錄下有一個 bin/ 目錄,並且該目錄包含在路徑中:

$ mkdir ~/bin
$ PATH=~/bin:$PATH

2 . 下載 Repo 工具,並確保它可執行:

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
  • 初始化 Repo 客戶端

安裝 Repo 後,設定您的客戶端以訪問 Android 原始碼程式碼庫: 1 . 建立一個空目錄來存放您的工作檔案。

$ mkdir AndroidSource // AndroidSource這個是我自己命名存放原始碼的目錄名稱
$ cd AndroidSource
  1. 使用您的真實姓名和電子郵件地址配置 Git。如果你設定了Git的配置則跳過這一步。
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
  1. 執行 repo init進行初始化。以下-b進行檢出相對應的分支,要檢視分支列表,請參閱原始碼標記和編譯版本
repo init -u https://android.googlesource.com/platform/manifest -b android-7.1.1_r57

初始化成功後,客戶端目錄中現在應包含一個 .repo 目錄,清單等檔案將儲存在該目錄下。

下載 Android 原始碼樹

然後將 Android 原始碼樹從預設清單中指定的程式碼庫下載到工作目錄,執行以下命令:

$ repo sync

在下載的時候保證網路的穩定性,保證電腦設定了不休眠,可以晚上放著讓它下載。下載完大概30G左右。 下載原始碼出現的問題不會太多,有問題的話大多數為網路的問題,真正出問題最多的是原始碼的編譯,那簡直就是惡夢。

準備編譯

下載專有二進位制檔案

我需要將編譯的原始碼刷到Nexus6,所以需要下載Nexus6的相對應的驅動。 具體找到系統版本對應手機型號相對應的驅動二進位制檔案可以在這裡找到here。 二進位制驅動檔案

然後將這三個壓縮包下載後,解壓縮得到三個sh檔案。 將這三個sh檔案copy到Android編譯目錄下。

$ ./extract-broadcom-shamu.sh
$ ./extract-moto-shamu.sh
$ ./extract-qcom-shamu.sh

執行以上命令後會顯示宣告資訊,一直按回車,當你看到以下資訊就輸入:I ACCEPT就可以了。不要按得太快,很容易跳了輸入接受。。。。 圖片.png

Jack配置

Jack 是一種 Android 工具鏈,用於將 Java 原始碼編譯成 Android dex 位元組碼。要使用 Jack,您只需使用標準的 Makefile 命令來編譯原始碼樹或您的專案即可,無需進行任何其他操作。Android 8.1 是使用 Jack 的最後一個版本。

在 2017 年 3 月 14 日公告釋出之後,Jack 工具鏈已被棄用。Jack 是 Android 6.0–8.1 的預設 Android 編譯工具鏈

如果你編譯AOSP的master分支,以及Android O及以後版本,Android提供了禁用的支援。具體可以參考 here

在編譯7.1.1原始碼的時候,我並沒有查怎麼關閉Jack編譯。所以,需要檢查一下Jack-Server是否已經安裝以及啟動。

  • 根據機器的RAM設定Jack-Server的VM大小,我機器是16G記憶體,所以設定8G左右VM。 修改prebuilts/sdk/tools/jack-admin 檔案,找到變數JACK_SERVER_VM_ARGUMENTS位置在後面新增,新增引數 -Xmx8000M

  • 進入prebuilts/sdk/tools 執行以下命令:

$ ./jack-admin start-server 
  • 如果提示沒有安裝的話,則執行以下命令,然後再次執行上面啟動jack-server的命令。
$ ./jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar 

保證Jack-Server服務啟動。不然在編譯的時候會遇到Jack-Server很多坑的。。。

設定環境

使用 envsetup.sh 指令碼進行初始化環境。

$ source build/envsetup.sh

使用 lunch 選擇要編譯的目標。

$ lunch

執行以上命令後,會列出當前所有的Build Type,然後輸入23。這裡我選擇23. aosp_shamu-userdebug,這個Build Type是可以除錯,所以建議你選擇userdebug。具體可以參考這裡的解析 here

編譯程式碼

make -j8 //-j8是並行的任務數,根據機器CPU的核心執行緒數來設定。

編譯過程遇到的問題

  • 編譯百分比之0就報出來的錯誤,m4沒有安裝。
FAILED: /bin/bash -c "prebuilts/misc/linux-x86/flex/flex-2.5.39 -o/home/chris/rom7.0/out/host/linux-x86/obj/STATIC_LIBRARIES/libaidl-common_intermediates/aidl_language_l.cpp system/tools/aidl/aidl_language_l.ll"
flex-2.5.39:嚴重內部錯誤,exec of /usr/bin/m4 failed
[  0% 8/49773] Yacc: aidl <= system/tools/aidl/aidl_language_y.yy
FAILED: /bin/bash -c "prebuilts/misc/linux-x86/bison/bison -d  --defines=/home/chris/rom7.0/out/host/linux-x86/obj/STATIC_LIBRARIES/libaidl-common_intermediates/aidl_language_y.h -o /home/chris/rom7.0/out/host/linux-x86/obj/STATIC_LIBRARIES/libaidl-common_intermediates/aidl_language_y.cpp system/tools/aidl/aidl_language_y.yy"
[  0% 8/49773] host C++: ijar <= build/tools/ijar/classfile.cc
ninja: build stopped: subcommand failed.
build/core/ninja.mk:151: recipe for target 'ninja_wrapper' failed
make: *** [ninja_wrapper] Error 1

解決方法:

sudo apt-get install m4
  • 編譯百分之一的時候報的錯誤,bison 沒有安裝。

編譯錯誤1

解決方法:

1. sudo apt-get install bison
2. sudo apt-get install  g++-multilib gcc-multilib lib32ncurses5-dev lib32readline6-dev lib32z1-dev
  • 其中編譯過程有Jack-Server也報的問題,有沒有安裝,沒有啟動的問題,那時候急著解決問題,所以沒有相對應的截圖。所以我在上面也寫保證Jack-Server先安裝啟動,不然在後面的編譯7.1.1原始碼會報錯。在編譯的過程中,我的機器暫時沒有報Jack-Server記憶體不足的錯誤。如果你使用虛擬機器進行編譯時,記憶體至少要8G,不然會報記憶體不足的編譯錯誤。

Jack-Server錯誤.png

圖片.png

編譯的時候遇到的坑遠遠不止以上的問題,有些沒有記錄下來。。。

編譯失敗後,我都是重新手動刪掉out目錄,以避免出現更多的問題,然後重新執行上面的>設定環境步驟。

  • 經過幾天的努力與堅持,終於編譯成功了,激動~~ 編譯成功後的提示.png

使用 fastboot 刷機

首先,保證已經unlock解鎖 可以正常刷機。具體怎麼解鎖Google一下。刷機前,請備份好個人重要的資料,刷機會將所有資料都會清空。 然後,連上電腦。 接著,在原始碼根目錄下(就是下載原始碼的目錄)執行下面命令:

$ adb reboot bootloader //進入bootloader模式
$ fastboot -w flashall  //使用fastboot進行刷機

開始刷機.png

刷機已完成.png

End

在這裡整一個過程就結束了,但是這只是閱讀原始碼的一個新開始!接然的還有如何將AOSP匯入到Android Studio進行閱讀以及除錯和如何閱讀。雖然這個過程辛苦,但是這是值得的,一起加油努力學習~~

http://www.lnluqu.cn/
http://www.025invest.cn/
http://www.wx-detian.cn/
http://www.xintravel.cn/
http://www.fenghuicaifu.cn/
http://www.chinaytbzw.cn/
http://www.sydire.cn/
http://www.jnymkj.cn/
http://www.metrel-china.cn/
http://www.hongheqiche.cn/
http://www.zazhiku.cn/
http://www.yz-hysl.cn/
http://www.gutiangelun.cn/
http://www.lnjjpm.cn/
http://www.touraround.cn/
http://www.sunmoon88.com.cn/
http://www.13142js.cn/
http://www.caixiantang.com.cn/
http://www.poponet.cn/
http://www.zglogistics.cn/
http://www.zgxwzk.cn/
http://www.bjltsc.cn/
http://www.shshunfeng.cn/
http://www.hzwssy.com.cn/
http://www.daoyitang.cn/
http://www.rossicount.cn/
http://www.bjchange.cn/
http://www.item.rossicount.cn/
http://www.item.bjchange.cn/
http://www.news.rossicount.cn/
http://www.news.bjchange.cn/

相關推薦

Android 7.1.1系統原始碼下載編譯-Nexus 6實戰

基本概念 AOSP : 就是Android Open Source Project也就是谷歌開放原始碼專案。 通過Google官方下載的原始碼也就是AOSP的程式碼,是不包含Google開發的全家桶的應用。 ps: 這個作為一個Android程式設計師肯定要知道的一個專業詞

Android系統原始碼下載編譯--Nexus6實測

前言 此博文記錄一下Android從系統原始碼下載到刷機的全過程。 (https://source.android.com/source/build-numbers.html 頁面中列表資訊找到自己裝置對應的Android版本進行選擇,博文中選擇MOB301) 硬體:Goog

Android 原始碼下載編譯過程

編譯環境: Win10 + VMware + ubuntu16.04 手機: Nexus 5 系統: Android 6.0 原生態原始碼 參考網頁:點選開啟連結 解決的問題 當 fastboot -w flashall  命令一直出現Waiting for dev

[Android編譯(二)] 從谷歌官網下載android 6.0原始碼編譯nexus 6p手機

1 前言 經過一週的奮戰,終於從谷歌官網上下載最新的android 6.0.1_r62原始碼,編譯成功,併成功的刷入nexus6p,接著root完畢,現寫下這篇部落格記錄一下實踐過程。 2 簡介 自己下載android系統原始碼,修改定製,然後編譯刷入

Android FrameWork學習(一)Android 7.0系統原始碼下載\編譯

最近計劃著研究下Android 7.0的系統原始碼,之前也沒做過什麼記錄,這次正好將學習的內容記錄下來,方便以後複習鞏固。 既然要學習我們的系統原始碼,那我們第一步要做的就是下載原始碼並進行編譯了。 硬體環境要求 1. 編譯環境 按照官方的說

100.1各種系統映象下載

Windows 7 (32位) 轉載網址:https://blog.csdn.net/learner198461/article/details/78315241 磁力鏈:ed2k://|file|cn_windows_7_ultimate_x86_dvd_x15-65907.iso|

面向模式的軟體體系結構-卷1-模式系統 pdf下載

POSA系列的開山之作,系統程式設計和中介軟體程式設計的一些架構模式,翻譯一般,架構師必讀 需要IT程式設計經典書籍資源大合集百度網盤連結的加qq 3083709327,另本人願意有償帶小白學python,幫助你答疑解惑,幫助你解決問題,指導你找工作,帶你入行。相信我有

android 原始碼下載同步編譯提交

本人android初學者,還請大家多多教導。 Android系統開發瞭解的東西:Eclipse、git、repo,環境:Ubuntu 10.04 64bit;JDK:1.6; 拉程式碼: 1.新建資料夾,在此資料夾內初始化 repo init -u XXX/manifes

Android 7.0系統原始碼中如何編譯android studio工程

eclipse工程放在系統原始碼裡編譯,直接把整個包丟到系統裡,然後加一個Android.mk,就完事了,可是eclipse被谷歌拋棄很久了,現在琢磨者如何將android studio工程放到系統原始碼裡編譯,在網上找了一大圈 都沒有找到,只好自己幹了了。 android

完整版linux下android原始碼下載編譯模擬器啟動執行

一、環境說明: 1、VMware版本:8.0.3 build-703057 2、liunx系統:Ubuntu10.10 3、jdk:sun-java6-jdk 二、Ubuntu 10.10更新源列表       由於Ubuntu 10.10版本的源已經過期了,所以,需要

Android各版本系統原始碼下載

Android原始碼是一個很好的學習Android的工具,礙於網上的資源比較少,今天給大家提供這個下載地址。知道的朋友可以路過,給需要的朋友。下面是Android原始碼的下載連結,點選即可下載,推薦右鍵迅雷下載。 下面是一個線上瀏覽andro

android系統原始碼下載--完美版新下載地址

9月10號左右下過一次android原始碼,下了6%之後就死活下不了,不是提示連線失敗就是提示沒有任何資料返回,最後網上人說android.git.kernel.org網站被黑了,git方式和http方式都下不了,折騰好些時間終於知道怎麼配置檔案,最後網站被黑卻下不了,灰常

高通平臺開發環境搭建編譯燒錄(android5.1以上系統

1. 安裝Ubuntu(12.04LTS以上穩定版本)     安裝過程中必須以根使用者登入或使用sudo獲取root許可權。     1.1按照http://releases.ubuntu.com中的說明,建立安裝光碟,將其安裝到計算機上。     1.2. 安裝完成後,通過下列選項之一來更新軟體:    

Android 7.0以上系統獲取以content開頭的檔案拿不到正確路徑,報錯column-data-does-not-exist

我們專案的使用場景,手機qq開啟檔案,選擇其他開啟方式,選擇我們自己的應用開啟,通過intent.getData()獲取檔案地址,後來發現在Android7.0之後的版本,獲取到的地址不正確,說檔案不存在。日誌報錯column-data-does-not-exist, 經過一天的折騰,終於在網上

解決 Android 26 無法檢視系統原始碼的問題

隨著 Android 8.0 的正式釋出,相信有些朋友已經升級 SDK 開始使用新特性了。然而需要注意的是,這一次 Google 並沒有及時釋出與之對應的 Android-26 原始碼。這帶來的問題是,當你按下 command 同時單擊某個系統 API 想瀏覽原始碼文件時,會

Android 7.0呼叫系統相機(檔案訪問crash android.os.FileUriExposedException)

最近專案中做圖片上傳的功能中遇到一個問題,就是7.0的手機上呼叫系統相機指定圖片路徑的情況下回crash,報錯android.os.FileUriExposedException uri暴露的錯誤。 Android7.0對應用共享檔案這塊做了一些強制性的要求。

Android 5.0 Camera系統原始碼分析(2):Camera開啟流程

1. 前言 本文將分析android系統原始碼,從frameworks層到hal層,暫不涉及app層和kernel層。由於某些函式比較複雜,在貼出程式碼時會適當對其進行簡化。本文屬於自己對原始碼的總結,僅僅是貫穿程式碼流程,不會深入分析各個細節。歡迎聯絡討論,QQ:1026

Libevent(1)— 簡介編譯配置

此文編寫的時候,使用到的 Libevent 為 2.0.21 Libevent 之跨平臺 在處理大量 SOCKET 連線時,使用 select 並不高效。各個系統都提供了處理大量 SOCKET 連線時的解決方案: Linux 下的 epoll()BSD 下的 kque

Android 7.0 Gallery相簿原始碼分析8

在Android 7.0 Gallery相簿原始碼分析3 - 資料載入及顯示流程一文最後講了AlbumSetSlidingWindow的onContentChanged方法,專輯縮圖和縮圖下面的label的載入就是在此方法中完成的 public

VLC for Android原始碼下載編譯 (包含其他開源專案,很全面!!!!)

Project Hosting on 點選開啟連結  from:http://dingran.iteye.com/blog/1717711 1.vlc for android  已經發布了,開源的地址是: http://wiki.videolan.or