[Android]Android 8.1源碼下載、編譯以及導(dǎo)入AndroidStudio

什么是aosp:

"Android Open-Source Project"的縮寫。中文意為"Android 開(kāi)放源代碼項(xiàng)目"。

下載

下載前的準(zhǔn)備工作:

1.ubuntu 操作系統(tǒng)
雖然Google官方證實(shí)在mac os 上也可以成功編譯,但是目前我用macbook編譯從來(lái)沒(méi)有成功過(guò),總是報(bào)一些莫名奇妙的錯(cuò)誤也找不到原因,無(wú)奈將一臺(tái)舊Windows筆記本改裝ubuntu18.04后成功編譯。Google官方推薦的源碼編譯環(huán)境也是ubuntu,所以選擇ubuntu編譯Android源碼是最保險(xiǎn)的策略,考慮到Android源碼占用空間極大,磁盤最好預(yù)留250G以上空間。
ubuntu就的安裝不再贅述了,安裝成功打開(kāi)終端,開(kāi)始接下來(lái)的操作吧。

2.下載repo工具

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

這里的訪問(wèn)可能會(huì)被墻,使用清華鏡像代替之:

mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo

參考 repo清華鏡像

執(zhí)行curl時(shí)可能會(huì)提示curl沒(méi)有,下載之:

sudo apt-get install curl

3.找個(gè)合適的位置新建文件夾:

mkdir aosp
cd aosp

4.環(huán)境準(zhǔn)備

// 1.安裝python
sudo apt-get install python
// 2.安裝git:
sudo apt-get install git
// 3.配置git郵箱和賬戶
git config --global user.email “you@example.com”
git config --global user.name “Your Name”
// 4.安裝jdk8:
sudo apt-get install openjdk-8-jdk
// 5.然后執(zhí)行Java -version判斷版本是否為8,如果不是需要配置,命令如下
sudo update-alternatives --config java
sudo update-alternatives --config javac

5.初始化倉(cāng)庫(kù)
因?yàn)锳ndroid源碼工程巨大無(wú)比,而且因?yàn)閴Φ拇嬖冢苯渔溄覩oogle的資源鏈接可能不穩(wěn)定,因此在這里使用國(guó)內(nèi)清華aosp鏡像
參考清華AOSP鏡像使用幫助

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

此時(shí)可能會(huì)提示無(wú)法連接到 gerrit.googlesource.com,這是因?yàn)閞epo的運(yùn)行過(guò)程中會(huì)嘗試訪問(wèn)官方的git源更新自己,如果想使用清華的鏡像源進(jìn)行更新,可以將如下內(nèi)容復(fù)制到你的~/.bashrc里,并重啟終端模擬器

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

參考 repo清華鏡像

如果需要某個(gè)特定的 Android 版本,

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r75

Android版本列表

同步源碼樹(shù):

repo sync

接下來(lái)就是漫長(zhǎng)的源碼下載過(guò)程....,在源碼下載過(guò)程中會(huì)遇到各種各樣的問(wèn)題,然后終端進(jìn)程就中止在那里不動(dòng)了,解決這個(gè)問(wèn)題,可以使用自動(dòng)化腳本去同步,當(dāng)進(jìn)程中止后重新開(kāi)始sync,步驟如下:
1.在aosp文件夾下創(chuàng)建一個(gè)腳本:

#!/bin/bash
repo sync 
while [ $? = 1 ]; do  
        echo “======sync failed, re-sync again======”  
        sleep 3  
        repo sync 
done 

在shell中執(zhí)行如下命令:

chmod a+x down.sh
./down.sh

接下來(lái)就是漫長(zhǎng)的源碼下載過(guò)程,整個(gè)8.1的源碼大概70多個(gè)G,耐心等待吧。

編譯

1.源碼編譯
安裝編譯所需要的軟件:

sudo apt-get install git gnupg flex bison gperf build-essential

sudo apt-get install zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386

sudo apt-get install libgl1-mesa-dev g++-multilib mingw32 tofrodos

// 這里會(huì)提示不能夠下載mingw32,則需要在source.list文件中增加

deb http://us.archive.ubuntu.com/ubuntu trusty main universe

sudo apt-get install python-markdown libxml2-utils xsltproc zlib1g-dev:i386

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

// 在本用戶的.bashrc文件中增加

export LC_ALL=C

// 修改prebuilts/sdk/tools/jack-admin文件,找到文件中的這一行:
JACK_SERVER_COMMAND="java -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"
// 然后在該行添加-Xmx4096m,如:
JACK_SERVER_COMMAND="java -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"

重啟終端

進(jìn)入aosp文件夾,創(chuàng)建環(huán)境變量

source build/envsetup.sh

執(zhí)行l(wèi)unch命令,會(huì)列出所有可編譯的Android架構(gòu)版本
選擇要編譯的room,比如要編譯arm架構(gòu)lunch命令就是

lunch aosp_arm-eng

接下來(lái)執(zhí)行編譯命令:

make

可以視電腦配置狀況適當(dāng)增加線程數(shù),增加編譯速度,如:

make -j4

接下來(lái)又是漫長(zhǎng)的等待,我自己大概是20小時(shí)后編譯完成,繼續(xù)耐心等待。

導(dǎo)入AndroidStudio

以下操作來(lái)自大神gityuan的博客,我只是文字的搬運(yùn)工

1.終端進(jìn)入aosp文件夾,依次執(zhí)行如下命令:

soruce build/envsetup.sh  
mmm development/tools/idegen/  
./development/tools/idegen/idegen.sh

2.打開(kāi)Android Studio, 點(diǎn)擊File -> Open,選中前面生成的android.ipr文件即可, 該過(guò)程較耗時(shí)

加載后提速:

如果已經(jīng)把全部項(xiàng)目導(dǎo)入到Android Studio,又想刪除怎么辦,其實(shí)有一個(gè)簡(jiǎn)單的方法就是進(jìn)入目錄Project Structure -> Modules, 可快速去除某些模塊, 其中紅色代碼Exclueded選項(xiàng)(即代表已刪除的目錄), 如下圖:

exclude.png

  1. 配置源碼正確跳轉(zhuǎn)

這里的配置JDK/SDK,是用于解決在分析和調(diào)試源碼的過(guò)程,能正確地跳轉(zhuǎn)到目標(biāo)源碼,而非SDK中的代碼。 點(diǎn)擊File菜單下的Project Structure.

Step 1 新建JDK

Project Structure -> SDKs, 新建 JDK(None), 其中JDK目錄可選擇跟原本JDK一致即可, 然后刪除其classpath和SourcePath的內(nèi)容,確保使用Android系統(tǒng)源碼文件

step1.png

Step 2 配置SDK

Project Structure -> SDKs, 選中Android API 25 Platform, 然后選擇其Java SDK為前面新建的JDK(None)

step2.png

Step 3 選擇SDK
Project Structure -> Project -> 選中Project SDK, 選擇前面的Android API 25 Platform

step3.png

Step 4 建立依賴
Project Structure -> Modules -> android -> Dependencies: 先刪除Android API 28 Platform之外的所有依賴, 然后點(diǎn)擊下圖綠色的+號(hào)來(lái)選擇Jars or directories,將frameworks添加進(jìn)來(lái), 也可添加其他所關(guān)注的源碼;

step4.png

下圖便是添加后的結(jié)果圖:


step5.png

自此,Android源碼的下載、編譯、導(dǎo)入AS的操作全部完成,我們可以愉快地在AS中閱讀代碼了

Android 內(nèi)核工程下載

在下載編譯完成后便開(kāi)心的閱讀起了源碼,但是讀著讀著發(fā)現(xiàn)有些不對(duì)勁,怎么Android 內(nèi)核文件夾是空的?
網(wǎng)上搜索了一下,原來(lái)aosp工程是不包含kernel代碼的,aosp編譯時(shí)使用的是prebuilts里面預(yù)先編譯好的Linux文件,
如果需要閱讀kernel代碼需要另行下載,好在這方面的資料也很多,找起來(lái)也不費(fèi)勁
Android Kernel工程下載引導(dǎo)
這個(gè)網(wǎng)站詳細(xì)說(shuō)明了如何下載Kernel工程,有不同的Cpu架構(gòu)對(duì)應(yīng)的kernel工程可選
· common
· exynos
· goldfish
· lk
· samsung
· tegra
· msm
· omap
比如想下載common架構(gòu)的kernel工程,git地址為:

git clone https://android.googlesource.com/kernel/common.git

因?yàn)閴Φ拇嬖?,這個(gè)地址是很難訪問(wèn)到的,使用清華鏡像地址代替:

git clone https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/kernel/common.git

下載完成后切換到aosp工程Android版本對(duì)應(yīng)的分支即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容