Ubuntu下Android原始碼以及核心下載與編譯
本教程是基於Ubuntu下Android6.0.1原始碼以及核心的下載和編譯,記錄一下,以後也就不用自己去找資料,一遍一遍的嘗試了。可以翻牆的,英語好的,直接去AndroidSource.
- 系統環境:Ubuntu14.04LTS
- Android版本:6.0.1
- 重要網址
清華大學映象
AndroidSource
下載前的準備
安裝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
組建 | 功能 | 介紹網址 |
---|---|---|
gnupg | 加密工具 | GPG入門教程 |
flex | The Fast Lexical Analyzer | 快速的語法分析工具 |
bison | 用於自動生成語法分析器程式 | 自動生成語法分析器程式 |
gperf | 完美的雜湊函式生成器 | 使用 gperf 實現高效的 C/C++ 命令列處理 |
build-essential | 編譯核心中make menuconfig進圖形編譯 | build-essential |
zip | Linux 下zip包的壓縮與解壓 | Linux 下zip包的壓縮與解壓 |
curl | 網路請求和提取工具 | curl網站開發指南 |
zlib1g-dev | 用於發現gzip和PKZIP的工具 | Binary package “zlib1g-dev” in ubuntu trusty |
gcc-multilib | 允許在64位機器中執行32位應用 | multilib |
g++-multilib | 同上(g++編譯工具) | 多平臺支援 |
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 | 待完善 | 待完善 |
下載
因為網路以及牆的原因,我們使用清華大學映象,步驟如下:
下載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 工程目錄 # 這時 ls 的話什麼也看不到,因為只有一個隱藏的 .repo 目錄 repo sync # 正常同步一遍即可得到完整目錄 # 或 repo sync -l 僅checkout程式碼
ps:總共25G,慢慢下吧!
編譯
進入AOSP根目錄
初始化編譯環境
. build/envsetup.sh
選擇編譯目標,選擇1,所有選項的意思,後面更新
lunch
開始編譯,這裡使用了4個併發數:
make -j4
使用打包工具mmm,完成命令後會在根目錄下生成android.irp,用android studio開啟一個現有專案,開啟android.irp即可
mmm development/tools/idegen/
執行當前版本的模擬器
將emulator原始碼目錄加入PATH中
export PATH=&PATH:~/bin/AOSP/out/host/linux-x86/bin
設定原始碼編譯輸出目錄
export ANDROID_PRODUCT_OUT=~/bin/AOSP/out/target/product/generic
執行emulator
emulator
下載Android核心原始碼
進入kernel目錄,下載核心
git clone https://aosp.tuna.tsinghua.edu.cn/android/kernel/goldfish.git
進入goldfish目錄,選擇分支
cd goldfish git branch -a git checkout remotes/origin/android-goldfish-2.6.29
編譯Android核心原始碼
將交叉編譯工具目錄新增到PATH環境變數中
export PATH=$PATH:~/bin/AOSP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin
開啟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:一定要設為絕對路徑。
生成配置檔案以及編譯
make goldfish_defconfig make
執行當前核心版本的模擬器
執行當前模擬器
emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage
檢視核心版本
adb shell cd proc cat version
BUG
JDK記憶體溢位
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] 錯誤 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
相關文章
- Android 11 原始碼下載+編譯教程Android原始碼編譯
- Ubuntu 18.04(虛擬機器)環境下編譯Android 原始碼Ubuntu虛擬機編譯Android原始碼
- Ubuntu 16.04下 Mysql5.7.17原始碼編譯與安裝UbuntuMySql原始碼編譯
- 《深入理解Android核心設計思想(第2版)(上下冊)》之Android原始碼下載及編譯Android原始碼編譯
- Ubuntu14.04下編譯Android8.1.0原始碼並刷入到裝置Ubuntu編譯Android原始碼
- Kubernetes原始碼學習之一:下載和編譯原始碼原始碼編譯
- Ubuntu 15.04編譯Android 6.0.1原始碼-Nexus5真機編譯Ubuntu編譯Android原始碼
- 手把手教你在Mac OS下載、編譯及匯入Android原始碼Mac編譯Android原始碼
- Elasticsearch6.1.2原始碼下載和編譯構建Elasticsearch原始碼編譯
- 2018年後 OpenWrt原始碼下載及韌體編譯原始碼編譯
- Mac下載Android原始碼的方法MacAndroid原始碼
- Harmony OS 開發避坑指南——原始碼下載和編譯原始碼編譯
- Ubuntu環境下載OpenJDK11原始碼UbuntuJDK原始碼
- VLC在ubuntu環境下編譯編譯
- 記錄一下 MacOS 下原始碼編譯 Qt 5.15.2Mac原始碼編譯QT
- linux下基於官方原始碼編譯ipoptLinux原始碼編譯
- Thinkphp核心自動下載原始碼系統PHP原始碼
- MacOS X 編譯Android原始碼Mac編譯Android原始碼
- Android FrameWork 之原始碼編譯AndroidFramework原始碼編譯
- Kaldi在ubuntu 18.04下編譯小結Ubuntu編譯
- 在Ubuntu環境下用gcc命令執行c程式以及Makefile編譯UbuntuGCC程式編譯
- Ubuntu 不同版本的下載 以及 換源Ubuntu
- Ubuntu 下設定中文編碼Ubuntu
- Centos7下原始碼編譯安裝apacheCentOS原始碼編譯Apache
- android 反編譯APK取原始碼。Android編譯APK原始碼
- 下載Android程式碼Android
- Ubuntu環境編譯OpenJDK11原始碼Ubuntu編譯JDK原始碼
- Vue 原始碼解讀(8)—— 編譯器 之 解析(下)Vue原始碼編譯
- repo下載Android原始碼時報 python windowserror 5Android原始碼PythonWindowsError
- webRTC原始碼下載 Windows Mac(iOS) Linux(Android)全Web原始碼WindowsMaciOSLinuxAndroid
- 下載Android單個專案原始碼的方法Android原始碼
- Linux編譯核心 Ubuntu18.04 -2020.11.04Linux編譯Ubuntu
- AOSP 原始碼下載原始碼
- Ubuntu 16.04原始碼編譯安裝Apache 2.4.25教程Ubuntu原始碼編譯Apache
- CentOS 7.4 環境下原始碼編譯安裝 postgreSQL 11.4CentOS原始碼編譯SQL
- Mac Android8.0原始碼編譯筆記MacAndroid原始碼編譯筆記
- 04_Linux下把驅動編譯進核心Linux編譯
- 編譯Android下可執行命令的FFmpeg編譯Android
- C2000 編譯器下載地址編譯