Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android源代碼的下載和編譯

Android源代碼的下載和編譯

編輯:關於Android編程

本文是對《Android深度探索-HAL與驅動開發》中關於此章節的總結,記錄自己學習的點點滴滴。


Android源代碼包含了很多東西,如內嵌在Android系統中的應用程序
(拍照、計算器、日歷、撥號器等)源碼、Android SDK帶的各種工具
源碼、Android NDK源碼、HAL源碼等等,所以Android源碼包非常大。

---源碼下載

/*配置下載環境*/
創建一個用於存放下載腳本文件repo的目錄(該腳本文件可以存放
到任意目錄中,一般使用~/bin)
1)
#mkdir ~/bin
#PATH=~/BIN:PATH
2)下載repo腳本
#curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
#chmod a+x ~/bin/repo
repo文件實際上是用Python腳本對git的封裝,主要是為了簡化下載
Android源代碼的操作。
3)創建存放Android源碼目錄
#mkdir android
#cd android
4)執行初始化
#repo init -u https://android.googlesource.com/platform/mainfest
上面的代碼要求repo下載最新的源碼,也就是master分支。如果想下
載其他分支,可以使用如下命令。
#repo init -u https://android.googlesource.com/platform/mainfest -b xxxxx(其他)
5)開始執行下載
#repo sync
根據網速和機器配置的不同這個過程會持續不同的時間起碼幾個小時吧
PS:Android源碼repo下載方式不是必須的,只要有可用的源碼包,何必下載呢?
解壓之後直接用也是不錯的方式。

---Android源代碼目錄結構分析

目錄名 源碼目錄含義

abi | 應用程序二進制接口 application binary interface

bionic | C/C++運行時庫,在NDK程序中很大一部分調用的就是此處程序

bootable | 用於Android裝載和啟動程序,其中包含著名的bootloader和recovery。
bootloader在Linux內核啟動之前啟動,用來初始化硬件、建立映射等等
recovery可以講一個壓縮包中文件覆蓋到手機內存中系統目錄的程序
(刷機程序)

build | 用於編譯Android源碼以及建立system.img、ramdisk.img等文件的工具。

cts | 用於兼容性測試的工具

dalvik | Dalivk虛擬機的源代碼

development 高層的開發和調試工具

device | 與設備相關的代碼。其中包含了motto、三星的設備相關代碼

docs | Android源代碼項目的文檔和工具

external | 擴展工具的源代碼

frameworks Android框架層代碼。也就是Android SDK的源代碼

hardware | 硬件接口層和庫。HAL的源代碼就在此處

libcore | Java核心庫

ndk | NDK的相關代碼

packages | 與Android系統一同發布的應用程序源代碼

prebuilts | Android在各種平台下編譯之前要使用的工具

sdk | 在開發環境中使用的工具,如DDMS、draw9patch、sdkmanager等

system Android的基本系統

/*在prebuilts文件夾下邊果然有部分編譯工具~~*/

---編譯Android源碼

/*初始化編譯環境*/
在Linux終端下執行
#source build/envsetup.sh envsetup.sh腳本主要來初始化一些編譯命令如mm.
mmm等。
envsetup.sh中定義了一些shell函數,當使用source命令之後,就可以在Linux終端
下執行這些命令函數。mm和mmm都可以編譯Android源代碼中指定的工程,他們
的區別是mm命令必須進入指定工程的目錄進行編譯,而mmm可以在Android可以
在源碼樹下任何一級目錄編譯任意指定的工程,只要指定路徑即可。
例如:
1)#cd ~/android/android2.3.4_src
#source build/envsetup.sh
#cd packages/apps/calculator
#mm
2)#cd ~/android/android2.3.4_src
#source build/envsetup.sh
#mmm packages/apps/calculator

/*選擇編譯目標*/
使用lunch命令編譯制定目標
full-eng | 針對所有移動設備,Android模擬器有效,打開所有調試選項
當不能確定或者忘記具體目標的時候可以在命令行上只輸入lunch進行運行
會提示處多種目標選項,從其中選擇合適的目標進行編譯即可。
3)#make 如果擁有多核、多線程、超線程的PC那麼可以附帶-jn參數,這樣可以加快
編譯速度。例如#make -j4 編譯的過程也是一個漫長的等待。~~

---out目錄結構分析

out目錄是存放編譯Android源代碼生成的目標文件的默認目錄。

|--host/ 編譯過程中需要的一些庫和工具
out--|
|--target/ ~/common主要包含Android系統Java庫。~/generic包含目標文件system.img等

---將apk內置發布

將apk嵌入system.img中,這樣apk就和原生系統的app一樣內置,非root無法卸載。
1)將apk嵌入/out/target/product/generic/的system/app文件中,然後重新打包生成system.img
2)因為系統自帶的app不管有apk文件而且還有對應的odex文件,我們也可以將app源碼
放到Android源碼包中重新編譯app,這樣就會在system/app目錄底下生成app的apk和odex
然後重新打包system.img。
重新打包system.img,可以使用out/host/linux-x86/bin目錄下的mkyaffs2image命令行工具,或者
執行make snod打包

---下載和編譯Linux內核源代碼

從剛才的Android源碼樹也可以看到確實沒有和Linux相關的文件夾,OK,原來內核是單獨添
加進去的,而且這個Linux內核是經過Google修改後的,不是linux.kernel.org的原生內核
從Google下載Linux內核、解壓後,配置內核,然後進行編譯。

---總結:

Android移植主要是Linux內核的移植。而Linux內核移植主要是Linux驅動的移植,所以本文概述
了Android源碼的編譯和Android內Linux內核的編譯。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved