Ubuntu Android源碼以及內(nèi)核下載與編譯
本教程是基于Ubuntu下Android6.0.1源碼以及內(nèi)核的下載和編譯,記錄一下,以后也就不用自己去找資料,一遍一遍的嘗試了。
系統(tǒng)環(huán)境:Ubuntu14.04LTS
Android版本:6.0.1
重要網(wǎng)址
清華大學(xué)鏡像
AndroidSource
下載前的準(zhǔn)備
安裝OpenJdk
sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update sudo apt-get install openjdk-8-jdk sudo update-alternatives --config java java -version
安裝git
sudo apt-get install git-core
安裝額外的組建
sudo apt-get install gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \ lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \ libgl1-mesa-dev libxml2-utils xsltproc unzip
| 組建 | 功能 | 介紹網(wǎng)址 |
|---|---|---|
| gnupg | 加密工具 | GPG入門教程 |
| flex | The Fast Lexical Analyzer | 快速的語(yǔ)法分析工具 |
| bison | 用于自動(dòng)生成語(yǔ)法分析器程序 | 自動(dòng)生成語(yǔ)法分析器程序 |
| gperf | 完美的散列函數(shù)生成器 | 使用 gperf 實(shí)現(xiàn)高效的 C/C++ 命令行處理 |
| build-essential | 編譯內(nèi)核中make menuconfig進(jìn)圖形編譯 | build-essential |
| zip | Linux 下zip包的壓縮與解壓 | Linux 下zip包的壓縮與解壓 |
| curl | 網(wǎng)絡(luò)請(qǐng)求和提取工具 | curl網(wǎng)站開(kāi)發(fā)指南 |
| zlib1g-dev | 用于發(fā)現(xiàn)gzip和PKZIP的工具 | Binary package “zlib1g-dev” in ubuntu trusty |
| gcc-multilib | 允許在64位機(jī)器中運(yùn)行32位應(yīng)用 | multilib |
| g++-multilib | 同上(g++編譯工具) | 多平臺(tái)支持 |
| libc6-dev-i386 | Embedded GNU C Library: 32-bit development libraries for AMD64 | libc6-dev-i386 |
| lib32ncurses5-dev | 待完善 | 待完善 |
| x11proto-core-dev | 待完善 | 待完善 |
| libx11-dev | 待完善 | 待完善 |
| lib32z-dev | 待完善 | 待完善 |
| ccache | 待完善 | 待完善 |
| libgl1-mesa-dev | 待完善 | 待完善 |
| libxml2-utils | 待完善 | 待完善 |
| xsltproc | 待完善 | 待完善 |
| unzip | 待完善 | 待完善 |
下載
因?yàn)榫W(wǎng)絡(luò)以及墻的原因,我們使用清華大學(xué)鏡像,步驟如下:
下載repo工具
mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo
下載源碼
wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下載初始化包
tar xf aosp-latest.tar
cd AOSP # 解壓得到的 AOSP 工程目錄
# 這時(shí) ls 的話什么也看不到,因?yàn)橹挥幸粋€(gè)隱藏的 .repo 目錄
repo sync # 正常同步一遍即可得到完整目錄
# 或 repo sync -l 僅checkout代碼
ps:總共25G,慢慢下吧!
編譯
進(jìn)入AOSP根目錄
初始化編譯環(huán)境
. build/envsetup.sh
選擇編譯目標(biāo),選擇1,所有選項(xiàng)的意思,后面更新
lunch
開(kāi)始編譯,這里使用了4個(gè)并發(fā)數(shù):
make -j4
使用打包工具mmm,完成命令后會(huì)在根目錄下生成android.irp,用android studio打開(kāi)一個(gè)現(xiàn)有項(xiàng)目,打開(kāi)android.irp即可
mmm development/tools/idegen/
運(yùn)行當(dāng)前版本的模擬器
將emulator源碼目錄加入PATH中
export PATH=&PATH:~/bin/AOSP/out/host/linux-x86/bin
設(shè)置源碼編譯輸出目錄
export ANDROID_PRODUCT_OUT=~/bin/AOSP/out/target/product/generic
運(yùn)行emulator
emulator
下載Android內(nèi)核源代碼
進(jìn)入kernel目錄,下載內(nèi)核
git clone https://aosp.tuna.tsinghua.edu.cn/android/kernel/goldfish.git
進(jìn)入goldfish目錄,選擇分支
cd goldfish
git branch -a
git checkout remotes/origin/android-goldfish-2.6.29
編譯Android內(nèi)核源代碼
將交叉編譯工具目錄添加到PATH環(huán)境變量中
export PATH=$PATH:~/bin/AOSP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin
打開(kāi)goldfish下Makefile修改配置文件,找到ARCH,CROSS_COMPILE,將其修改如下
ARCH ?=arm
CROSS_COMPILE ?=/home/user/bin/AOSP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/
arm-linux-androidkernel-
note:一定要設(shè)為絕對(duì)路徑。
生成配置文件以及編譯
make goldfish_defconfig
make
運(yùn)行當(dāng)前內(nèi)核版本的模擬器
運(yùn)行當(dāng)前模擬器
emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage
查看內(nèi)核版本
adb shell
cd proc
cat version
BUG
JDK內(nèi)存溢出
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/dex-dir/classes.dex.rsp
Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)).
GC overhead limit exceeded.
Try increasing heap size with java option '-Xmx<size>'.
Warning: This may have produced partial or corrupted output.
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] 錯(cuò)誤 1
A:
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
以上就是對(duì)Android源碼的下載,和編譯,后續(xù)繼續(xù)更新相關(guān)文章,謝謝大家對(duì)本站的支持!
- ubuntu16.04 升級(jí)內(nèi)核的方法步驟
- Ubuntu刪除多余內(nèi)核的方法
- Ubuntu中為Android增加硬件抽象層(HAL)模塊訪問(wèn)Linux內(nèi)核驅(qū)動(dòng)程序
- Ubuntu中為Android系統(tǒng)上實(shí)現(xiàn)內(nèi)置C可執(zhí)行程序測(cè)試Linux內(nèi)核驅(qū)動(dòng)程序
- Ubuntu中為Android系統(tǒng)上編寫(xiě)Linux內(nèi)核驅(qū)動(dòng)程序?qū)崿F(xiàn)方法
- Android內(nèi)核源碼 在Ubuntu上下載,編譯,安裝
- Ubuntu12.04建立內(nèi)核樹(shù)實(shí)現(xiàn)過(guò)程詳解
相關(guān)文章
Android 關(guān)閉多個(gè)Activity的實(shí)現(xiàn)方法
這篇文章主要介紹了Android 關(guān)閉多個(gè)Activity的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-09-09
Android Studio無(wú)法改變Button背景顏色解決辦法
今天我來(lái)和大家探討一個(gè)在Android開(kāi)發(fā)中常見(jiàn)但可能讓初學(xué)者感到困惑的問(wèn)題,如何在Android Studio中改變Button的背景顏色,這個(gè)問(wèn)題看似簡(jiǎn)單,但實(shí)際操作中可能會(huì)遇到一些意想不到的挑戰(zhàn),接下來(lái),我將從多個(gè)角度為大家提供解決方案,需要的朋友可以參考下2024-05-05
Android SQLite操作之大數(shù)據(jù)處理與同時(shí)讀寫(xiě)方法
這篇文章主要介紹了Android SQLite操作之大數(shù)據(jù)處理與同時(shí)讀寫(xiě)方法,實(shí)例分析了Android操作SQLite時(shí)基于事務(wù)的數(shù)據(jù)緩存與批量插入技巧,以及同時(shí)讀寫(xiě)的相關(guān)實(shí)現(xiàn)方法與注意事項(xiàng),需要的朋友可以參考下2016-07-07
Android中引用其他程序的文本資源超簡(jiǎn)單方法
這篇文章主要介紹了Android中引用其他程序的文本資源超簡(jiǎn)單方法,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-01-01
android導(dǎo)入第三方j(luò)ar包報(bào)錯(cuò) 如何正確導(dǎo)入jar包
怎樣在android平臺(tái)上使用第三方j(luò)ar包,為什么我在引入了,編譯時(shí)沒(méi)有錯(cuò)誤,運(yùn)行時(shí)就有錯(cuò)誤,報(bào)無(wú)法實(shí)例化錯(cuò)誤,請(qǐng)問(wèn)這是什么原因,本文給于解決方法,需要了解的朋友可以參考下2012-12-12
Android在自定義類中實(shí)現(xiàn)自定義監(jiān)聽(tīng)器方式
這篇文章主要介紹了Android在自定義類中實(shí)現(xiàn)自定義監(jiān)聽(tīng)器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
關(guān)于Gradle下載失敗問(wèn)題的快速解決方法
這篇文章主要給大家分享了關(guān)于Gradle下載失敗問(wèn)題的快速解決方法,文中介紹了兩種解決方法,分別是使用已存在的gradle版本和手動(dòng)下載gradle,文中介紹的非常詳細(xì),需要的朋友們下面來(lái)一起看看吧。2017-05-05
Android中Fragment相互切換間不被回收的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Android中Fragment相互切換間不被回收的實(shí)現(xiàn)方法,文中給出了詳細(xì)的示例代碼和注釋供大家參考學(xué)習(xí),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-08-08
React Native 實(shí)現(xiàn)熱更新并自動(dòng)簽名打包功能
這篇文章主要介紹了React Native 實(shí)現(xiàn)熱更新并自動(dòng)簽名打包,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04

