編譯Android原始碼與核心總結
這些天花了些時間自己下載了android原始碼來編譯,其中走了一些彎路導致耗了些時間,現在重新梳理總結下,讓有相同想法的人自己編譯的時候能少走些彎路,官方指導文件在http://source.android.com/source/initializing.html。
1、安裝linux環境
我是windows系統,安裝了Vmware虛擬機器,在虛擬機器上裝了ubuntu-12.04,我的這個版本是32位的,這個還蠻重要的,安裝32位或者64位的將決定你能編譯的android版本,官方文件裡For Gingerbread
(2.3.x) and newer versions, including the master branch, a 64-bit environment is required. Older versions can be compiled on 32-bit systems.
如果你編譯的是2.3以上的版本,就要安裝64位的ubuntu系統,否則裝32位版本即可,我這裡編譯的是2.3.5版本,因此選擇32位版本的Ubuntu 12.04.5 LTS。記憶體3g,硬碟40g(官網建議是30G以上)。
2、安裝jdk
很多網上的資料都講到http://www.oracle.com官網下載,然後我也去傻傻地下載了,下載了最新版本1.8以上了,結果後來執行的時候發現andorid使用的是jdk1.6的,因此得安裝jdk1.6。
編譯的提示如下:
Your version is: java version "1.6.0_24". The correct version is: Java SE 1.6
下載jdk-6u33-linux-i586.bin,然後把它移動到linux目錄下,我移動到/usr/lib下。
2.1分配許可權 chmod +x jdk-6u33-linux-i586.bin
2.2解壓 ./jdk-6u33-linux-i586.bin
一路確認下來,最後解壓出jdk1.6.0_33資料夾
2.3配置
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jdk1.6.0_33/bin/java"
1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/libjdk1.6.0_33
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jdk1.6.0_33/bin/javaws" 1
sudo update-alternatives --install "/usr/bin/jar" "jar" "/usr/lib/jdk1.6.0_33/bin/jar" 1
sudo update-alternatives --config java
如果你的機器本來就裝有其他版本的java,這個時候會讓你選擇要生效的java版本,記住選擇當前這個1.6的版本
2.4 修改環境變數:
sudo gedit /etc/environment
export JAVA_HOME=/usr/lib/jdk1.6.0_33
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${JAVA_HOME}/bin:${JRE_HOME}/bin"
sudo gedit /etc/profile
export JAVA_HOME=/usr/lib/jdk1.6.0_33export JRE_HOME=${JAVA_HOME}/jre
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${PATH}
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
2.5.source /etc/profile
source /etc/environment
2.6.check java version
java -version
得到
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b04)
Java HotSpot(TM) Client VM (build 20.8-b03, mixed mode, sharing)
3、下載android 原始碼
網上很多教程都是聯網下載,但由於眾所周知的原因,這個方法可能被牆或者很慢,我在網上搜了個網址原始碼下載 ,我下載了2.3.5的原始碼Android2.3.5_Kernel.7z,解壓後得到.tar,繼續解壓後得到mydroid資料夾,這個就是原始碼程式碼,將原始碼同樣移動到/usr/lib下
進入原始碼目錄,輸入make,就會有很多輸出。
其中我遇到的一個問題:
frameworks/base/libs/utils/RefBase.cpp: 在成員函式‘void android::RefBase::weakref_type::trackMe(bool, bool)’中:
frameworks/base/libs/utils/RefBase.cpp:483:67: 錯誤: 將‘const android::RefBase::weakref_impl’作為‘void android::RefBase::weakref_impl::trackMe(bool, bool)’的‘this’實參時丟棄了型別限定 [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] 錯誤 1
這個問題是因為本機裝的gcc版本太高,需要換到合適的可以編譯android的版本
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
sudo rm -rf /usr/bin/gcc /usr/bin/g++
sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++
第一次編譯會比較久,我是放一晚上讓它跑,第二天早上起來看到輸出
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img Install system fs image: out/target/product/generic/system.img Target ram disk: out/target/product/generic/ramdisk.img Target userdata fs image: out/target/product/generic/userdata.img Installed file list: out/target/product/generic/installed-files.txt代表成功make編譯了原始碼。
4、編譯linux核心
然後我們還需要編譯android的linux核心,雖然是linux原始碼,但不能隨便從網上下個linux原始碼,因為Android在Linux核心的基礎上添加了自己所特有的驅動程式,因此要編譯android的linux核心必須使用android專門的linux核心,網上很多方法都是提供git clonehttp://android.googlesource.com/kernel/goldfish.git的方法去下載,但由於有牆因此不好用,我搜了半天了搜到了一個http://pan.baidu.com/s/1qW0TkkO這裡就可以下載了,大概300多M,比原始碼小多了。
下載完後解壓在android原始碼目錄下新建一個目錄kernel,並將解壓後的核心原始碼放在該目錄下
還需要對Makefile檔案的有些地方做些改動,將
ARCH ?= (SUBARCH) CROSS_COMPILE?= 改為 ARCH ?= arm #體系結構為arm CROSS_COMPILE ?= arm-eabi- 同時修改path,新增交叉編譯環境,我的如圖(紅色部分為編譯android核心需要的交叉編譯環境)然後在核心原始碼目錄系執行[email protected]:/usr/lib/mydroid2.3.5/kernel/common$ make goldfish_defconfig [email protected]:/usr/lib/mydroid2.3.5/kernel/common$ make
最後得到Kernel: arch/arm/boot/zImage is ready這個輸出證明核心原始碼也編譯出來了。 5、執行模擬器檢視 有了前面的步驟後,這一步就方便多了,先新增環境變數(紅線部分,大家根據自己的放置路徑做相應改動)
命令列輸入[email protected]:/usr/lib/mydroid2.3.5$ emulator -kernel ./kernel/common/arch/arm/boot/zImage &
隨後模擬器將啟動,此時輸入adb shell進入android系統,繼續輸入
cd /proc
cat version,將看到自己編譯出來的版本,比如我的如下
好了,大功告成了!
相關推薦
編譯Android原始碼與核心總結
這些天花了些時間自己下載了android原始碼來編譯,其中走了一些彎路導致耗了些時間,現在重新梳理總結下,讓有相同想法的人自己編譯的時候能少走些彎路,官方指導文件在http://source.android.com/source/initializing.html。 1、安
編譯Android原始碼和核心原始碼的歸納總結
經過一個多星期的努力,終於在零基礎的情況下在ubuntu-12.04-desktop-amd64(64位Ubuntu系統)成功編譯了android-4.0.3的原始碼和Linux version 2.6.29的linux核心原始碼。期間遇到很多困難,好幾次想放棄
Android系統移植與平臺開發(五)- 編譯Android原始碼
2.3編譯Android原始碼 Android原始碼體積非常龐大,由Dalvik虛擬機器、Linux核心、編譯系統、框架程式碼、Android定製C庫、測試套件、系統應用程式等部分組成,在編譯Android原始碼之前,必須要先掌握Android原始碼的組成。 2.3.1An
編譯Spark原始碼與子專案GraphX中踩過的坑
編譯Spark原始碼與子專案GraphX中踩過的坑 原始目標:在三臺虛擬機器上真實分散式安裝spark平臺,並通過修改graphx對應的原始碼,觀察graphx的分散式效能,為進一步做圖劃分做準備。 官網文件:http://spark.apachecn.org/do
編譯Spark原始碼與單個子專案GraphX
編譯Spark原始碼與單個子專案GraphX 文章目錄 編譯Spark原始碼與單個子專案GraphX Spark原始碼獲取 需要安裝的支援環境 配置環境 編譯spark原始碼 編譯前配置 使用
MacOS X 編譯Android原始碼
MacOS X 編譯Android原始碼 本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家釋出 由於在工作中遇到了很多關於android內部實現的問題,雖然後面都解決了,有些是看了原始碼實現,有些原始碼看不了只能去google,百度。這就導致了對於很多的問題其實是知其然不知其
編譯android原始碼7---android 原始碼目錄結構
Android |-- Makefile (全域性的Makefile) |-- bionic (Android 標準C執行支援庫) |-- bootable (Android核心載入器
Mac編譯android原始碼的坑
Mac編譯android原始碼 因為專案需要在程式碼線上編譯app,想在mac上直接編譯,省時省力。不過,配置環境過程中遇到不少坑,現在逐一記錄下來。 主要有以下幾點: andr
編譯Android原始碼過程中遇到的錯誤
編譯環境:(1)ubuntu15.04(2)jdk1.6 JDK環境設定: export JAVA_HOME=/home/zr/jdk1.6.0_45 export JRE_HOME=${JAVA_HOME}/jre export CL
Linux下編譯Android原始碼問題彙總
前言 本人最近在研究Android原始碼編譯,現將編譯過程中遇到問題彙總於此。 環境 系統:CentOS 7 x86_64 源 :中科大映象源(詳見這裡) 問題彙總 (1)Increase Java heap s
Mac 10.12 編譯 Android 原始碼
Android 原始碼系列文章: 環境準備 這裡只講 Mac 10.12 的環境配置, 其他的我沒有嘗試過, 不好描述 我們需要的編譯的是 Android6.0, 所以我們需要 Xcode , Command L
在Mac OS 10.12 編譯Android原始碼:錯誤小結
在Mac OS 10.12 編譯Android原始碼 錯誤小結 記錄自己遇到的一些問題 1、在Terminal跳轉到映象目錄的命令是 cd /Volumes/映象名稱 即建立的磁碟映象是在根目錄下的Volumes資料夾 2、在通過ma
下載並編譯Android模擬器Linux核心goldfish教程
1. 下載goldfish原始碼 在Android原始碼根目錄下新建kernel資料夾: $ mkdir kernel $ cd kernel 下載原始碼: $ git clone http://android.googles
Mac上下載及編譯android原始碼
參考: https://blog.csdn.net/u010963246/article/details/71480684 https://blog.csdn.net/qq_25333681/article/details/79838325 https
ubuntu16.04 編譯android 原始碼出現的錯誤
1、openjdk 版本不對 解決:2、/bin/bash: prebuilts/misc/linux-x86/bison/bison: 沒有那個檔案或目錄 build/core/binary.mk:609: recipe for target 'out/host/linu
如何單獨編譯Android原始碼中的模組
第一次下載好Android原始碼工程後,我們通常是在Android原始碼工程目錄下執行make命令,經過漫長的等待之後,就可以得到Android系統映象system.img了。以後如果我們修改了Android原始碼中的某個模組或者在Android原始碼工程新增一個
Mac下編譯Android以及goldfish核心
虛擬機器掛了,Android原始碼都沒了。。不準備再在虛擬機器中下載Android原始碼了,於是就直接在Mac下編譯Android。 在Mac下編譯Android比想象的簡單多了。我的Mac系統是10.10Yousemite。安裝的Xcode也是最新的7.1beta版本。
多使用者同時在一臺伺服器編譯Android原始碼錯誤——Communication error with Jack server (77)
錯誤: FAILED: /bin/bash -c "(prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar prebuilts/sdk/tools/jack-s
單獨編譯Android原始碼中的模組
第一次下載好Android原始碼工程後,我們通常是在Android原始碼工程目錄下執行make命令,經過漫長的等待之後,就可以得到Android系統映象system.img了。以後如果我們修改了Android原始碼中的某個模組或者在Android原始碼工程新增一個自己的模組
ubuntu12.04 64bit 編譯android原始碼時遇到的問題"make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates"
ubuntu12.04 64bit 編譯android原始碼時出現如下錯誤: host Executable: cmu2nuance (out/host/linux-x86/obj/EXECUTABLES/cmu2nuance_intermediates/