android源碼編譯及rom制作_第1頁
android源碼編譯及rom制作_第2頁
android源碼編譯及rom制作_第3頁
android源碼編譯及rom制作_第4頁
android源碼編譯及rom制作_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

LOGOAndroid源碼編譯

及ROM制作Presentation邵光棟CyanogenMod源碼編譯ContentsAndroid

CodeTreeAndroid源碼編譯個性化修改1234ROM制作5GoogleAndroid源代碼位置:/source/downloading.htmlAndroid

CodeTree系統(tǒng)架構Android系統(tǒng)是按層次、分模塊來設計的。整個系統(tǒng):內(nèi)核空間和用戶空間內(nèi)核空間包含了進程管理、內(nèi)存管理以及設備驅動程序模塊等,其中Android專用驅動Binder、Logger和Ashmem就是在內(nèi)核空間實現(xiàn)的用戶空間包含了硬件抽象層(HAL)、外部庫和運行時庫層(ExternalLibraries&AndroidRuntime)、應用程序框架層(ApplicationFramework)和應用程序層(Applications)四個層次。|--Makefile|--bionic

(bionicC庫)|--bootable

(啟動引導相關代碼)|--build

(存放系統(tǒng)編譯規(guī)則及generic等基礎開發(fā)包配置)|--cts

(Android兼容性測試套件標準)|--dalvik

(dalvikJAVA虛擬機)|--development

(應用程序開發(fā)相關)|--external

(android使用的一些開源的模組)|--frameworks

(核心框架——java及C++語言)|--hardware

(主要保護硬解適配層HAL代碼)|--out

(編譯完成后的代碼輸出與此目錄)|--packages

(應用程序包)|--prebuilt

(x86和arm架構下預編譯的一些資源)|--sdk

(sdk及模擬器)|--system

(文件系統(tǒng)庫、應用及組件——C語言)|--vendor

(廠商定制代碼)代碼樹

Android源碼編譯初始化編譯環(huán)境下載代碼樹編譯編譯內(nèi)核

初始化編譯環(huán)境設置Linux編譯環(huán)境安裝必需包配置USB訪問設置高速緩存

初始化編譯環(huán)境系統(tǒng):Linux或者MacOS,不支持Windows大?。?.5GB(實際2-3GB)預留空間:一次編譯至少30GB

一整套編譯100GB選擇編譯分支建議:不要使用虛擬機安裝ubuntu編譯1、編譯花費時間長,需要內(nèi)存大2、如果配置低,可能會卡住不動3、虛擬機連接手機有問題,很可能不識別,編譯前需要從手機拉

配置數(shù)據(jù);不能使用fastboot模式刷機

設置Linux編譯環(huán)境內(nèi)部測試版本:Ubuntu10.04Gingerbread(2.3.x)ornewer:64bit系統(tǒng)工具:Python2.5-2.7

GNUmake3.81-3.82

JDK6(生成

Gingerbread或更高版本)

JDK5(Froyo或舊版本)

Git1.7或更高版本gcc/g++4.4(其他版本編譯出錯)

設置Linux編譯環(huán)境安裝JDK:Java6:$sudoadd-apt-repository"deb/lucidpartner"$sudoapt-getupdate$sudoapt-getinstallsun-java6-jdkJava5:$sudoadd-apt-repository"deb/ubuntuhardymainmultiverse“$sudoadd-apt-repository"deb/ubuntuhardy-updatesmainmultiverse“$sudoapt-getupdate$sudoapt-getinstallsun-java5-jdk

安裝必需包64位Ubuntu,推薦使用10.04安裝編譯所需要的包$sudoapt-getinstallgit-coregnupgflexbisongperfbuild-essentialzipcurlzlib1g-devlibc6-devlib32ncurses5-devia32-libsx11proto-core-devlibx11-devlib32readline5-devlib32z-devlibgl1-mesa-devg++-multilibmingw32tofrodospython-markdownlibxml2-utilsxsltprocOnUbuntu10.10:$sudoln-s/usr/lib32/mesa/libGL.so.1/usr/lib32/mesa/libGL.soOnUbuntu11.10:$sudoapt-getinstalllibx11-dev:i386OnUbuntu12.04:$sudoapt-getinstallgit-coregnupgflexbisongperfbuild-essentialzipcurllibc6-devlibncurses5-dev:i386x11proto-core-devlibx11-dev:i386libreadline6-dev:i386libgl1-mesa-glx:i386libgl1-mesa-devg++-multilibmingw32openjdk-6-jdktofrodospython-markdownlibxml2-utilsxsltproczlib1g-dev:i386$sudoln-s/usr/lib/i386-linux-gnu/mesa/libGL.so.1/usr/lib/i386-linux-gnu/libGL.so

配置USB訪問在GNU/Linux系統(tǒng)下(特別是Ubuntu系統(tǒng)下),默認配置下普通用戶不能直接訪問USB設備,需要對系統(tǒng)進行一些配置。方法:1、查看你手機的ID號。將手機連接上電,腦在terminal下運行l(wèi)susb命令

Bus002Device007:ID

18d1:4e212、創(chuàng)建文件/etc/udev/rules.d/51-android.rules(作為root用戶),

<username>必須更換的實際的授權訪問usb手機的用戶的用戶名#adbprotocolonpassion(NexusOne)SUBSYSTEM=="usb",ATTR{idVendor}=="18d1",ATTR{idProduct}=="4e21",MODE="0600",OWNER="<username>“

sudochmoda+rx/etc/udev/rules.d/51-android.rules

sudo/etc/init.d/udevrestart3.重啟adb服務(必須為sudo已配置android環(huán)境變量)

進入sdk的platform-tools目錄

sudo./adbkill-server

sudo./adbdevices

#adbprotocolonpassion(NexusOne)SUBSYSTEM=="usb",ATTR{idVendor}=="18d1",ATTR{idProduct}=="4e12",MODE="0600",OWNER="<username>“#adbprotocoloncrespo/crespo4g(NexusS)SUBSYSTEM=="usb",ATTR{idVendor}=="18d1",ATTR{idProduct}=="4e22",MODE="0600",OWNER="<username>“#adbprotocolonstingray/wingray(Xoom)SUBSYSTEM=="usb",ATTR{idVendor}=="22b8",ATTR{idProduct}=="70a9",MODE="0600",OWNER="<username>“#adbprotocolonmaguro/toro(GalaxyNexus)SUBSYSTEM=="usb",ATTR{idVendor}=="04e8",ATTR{idProduct}=="6860",MODE="0600",OWNER="<username#adbprotocolonpanda(PandaBoard)SUBSYSTEM=="usb",ATTR{idVendor}=="0451",ATTR{idProduct}=="d101",MODE="0600",OWNER="<username>“#adbprotocolongrouper(Nexus7)SUBSYSTEM=="usb",ATTR{idVendor}=="18d1",ATTR{idProduct}=="4e42",MODE="0600",OWNER="<username>“

設置高速緩存高速緩存編譯生成的信息,并在編譯的特定部分使用高速緩存的信息(如頭文件),這樣就節(jié)省了通常使用cpp解析這些信息所需要的時間??蛇x的,建議配置,以節(jié)省編譯時間方法:在.bashrc中添加

exportUSE_CCACHE=1

默認情況下,高速緩存保存在~/.ccache,建議設置緩存大小為50-100G

如果主目錄位于NFS或其他非本地文件系統(tǒng)上,要將下面語句添加到.bashrc中,之后保存并退出:

exportCCACHE_DIR=<path-to-your-cache-directory>

<path-to-your-cache-directory>修改為cache目錄的位置

下載完代碼后運行

prebuilt/linux-x86/ccache/ccache-M50G

下載代碼樹1、下載repo(實際是用python寫的一個操作Git的腳本)$mkdir~/bin$exportPATH=~/bin:$PATH$curl/dl/googlesource/git-repo/repo>~/bin/repo$chmoda+x~/bin/repo2、初始化repo客戶端設置客戶端訪問android倉庫創(chuàng)建工作目錄$mkdirWORKING_DIRECTORY$cdWORKING_DIRECTORY初始化repo下載源碼版本主分支$repoinit–u/platform/manifest其他分支

$repoinit-u/platform/manifest-bandroid-4.0.1_r1將服務器數(shù)據(jù)同步到本地$reposync-jN

下載代碼樹3、驗證git標簽將以下公共密鑰加載到本地GnuPG密鑰數(shù)據(jù)庫$gpg–import復制粘貼以下內(nèi)容,鍵入(Ctrl-D)結束-----BEGINPGPPUBLICKEYBLOCK-----Version:GnuPGv(GNU/Linux)mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSVlFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw78tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMDu4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0ZwNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq……

編譯1、初始化使用envsetup.sh初始化安裝環(huán)境:$sourcebuild/envsetup.sh加載device目錄下的環(huán)境信息

編譯選擇編譯目標:$lunchfull-eng

編譯2、編譯$make–jN3、運行刷機

進入fastboot模式,可以使用adbshell或者組合鍵$adbrebootbootloader$fastbootflashall–w-w選項是清除/data數(shù)據(jù)$fastbootflashbootboot.img$fastbootflashsystemsystem.img模擬$emulator

編譯

編譯4、編譯輸出在編譯完整個項目后,終端會出現(xiàn)如下提示:Targetsystemfsimage:out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img

Installsystemfsimage:out/target/product/generic/system.img

Targetramdisk:out/target/product/generic/ramdisk.img

Targetuserdatafsimage:out/target/product/generic/userdata.img

Installedfilelist:out/target/product/generic/installed-files.txt

out文件夾下是編譯結果

編譯內(nèi)核(可選)1、可以直接使用已經(jīng)編譯好的內(nèi)核,從其他刷機包提取2、自己編譯選擇并下載編譯版本$gitclone/device/ti/panda$cdpanda$gitlogkernel下載資源$gitclone/kernel/common.git$gitclone/kernel/exynos.git$gitclone/kernel/goldfish.git$gitclone/kernel/msm.git$gitclone/kernel/omap.git$gitclone/kernel/samsung.git$gitclone/kernel/tegra.gitGoldfish包含內(nèi)核平臺的仿真。Mam有ADP1、ADP2、NexusOne的資源,并可工作在高通MSM芯片組。Samsung用于NexusS,并可工作在三星

Hummingbird芯片組。Tegra用于Xoom和Nexus7,并可工作在NVIDIATegra芯片組。Exynos可工作在三星Exynos芯片組

編譯內(nèi)核3、下載預編譯工具$gitclone/platform/prebuilt$exportPATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH4、編譯$exportARCH=arm$exportSUBARCH=arm$exportCROSS_COMPILE=arm-eabi-$cdomap$gitbranch–a(查看可選版本)$gitcheckout<commit_from_first_step>$makepanda_defconfig$make如果要編譯tunakernel,只需要將panda替換為tunamagurokernel是device/samsung/tuna/kernel

crespoandcrespo4gkernel是device/samsung/crespo/kernel

stingrayandwingraykernel是device/moto/wingray/kernel

結果分析out/target/product/generic:鏡像ramdisk.img,system.img,userdata.img

目錄root,system,dataramdisk.img:根文件系統(tǒng)system.img:包括了主要的包、庫等文件userdata.img:包括了一些用戶數(shù)據(jù)android加載這3個映像文件后,會把system和userdata分別加載到ramdisk文件系統(tǒng)中的system和data目錄下

幾個命令sourcesource命令會把對應腳本中的內(nèi)容讀取到當前的bash解釋器中,在當前的執(zhí)行環(huán)境中執(zhí)行;其中定義的function以及通過export聲明的變量等在source執(zhí)行結束之后依然存在于當前的bash環(huán)境中。Source后會多出幾個可用的命令:croot:

Changesdirectorytothetopofthetree.

-m:

Makesfromthetopofthetree.

-mm:

Buildsallofthemodulesinthecurrentdirectory.

-mmm:

Buildsallofthemodulesinthesupplieddirectories.

-cgrep:

GrepsonalllocalC/C++files.

-jgrep:

GrepsonalllocalJavafiles.

-resgrep:Grepsonalllocalres/*.xmlfiles.

-godir:

Gotothedirectorycontainingafile.

-printconfig:當前build的配置情況.

在修改了某一個模塊以后,可以使用$mmm<目錄>

來重新編譯所有在<目錄>中的所有模塊,使用$mm

編譯當前目錄中的所有模塊。

編完之后,即修改了Android系統(tǒng)以后,可以使用$makesnod重新生成system.img

CyanogenMod源碼編譯CyanogenMod(簡稱cm):Cyanogen團隊是目前全球最大的Android第三方編譯團隊,其發(fā)布的Android2.1內(nèi)核CM5系列ROM被廣泛使用,促進了用戶從Android1.6到Android2.1版本的第三方升級。這個小組曾經(jīng)先于google公司為很多手機率先定制出穩(wěn)定的1.6ROM。CyanogenMod目前系列有CM4(android1.6)、CM5(android2.1)、CM6(android2.2)、CM7(android2.3)、CM8(android3.*)、CM9(android4.0)、CM10(android4.1)CM與Android關系:谷歌共享的源代碼僅能用于Nexus系列手機上,并不適合所有機型。CM團隊通過Google共享的Android源代碼,經(jīng)過內(nèi)核部分的修改和GPL協(xié)議開發(fā)出來了CM系列固件。優(yōu)點:CM系列固件的表層UI界面使用的是ADWLauncher界面,

細節(jié)設置非常給力,而且有多種主題可用,

CM系列固件極速、精簡

CyanogenMod源碼編譯下載源碼$mkdirCyanogenMod

獲取gingerbread的分支源代碼$repoinit-ugit:///CyanogenMod/android.git-bgingerbread

同步服務器代碼到本地$reposync–jN下載匹配的device目錄:

/讀取手機上的配置文件:

在連接手機的情況下,運行下載目錄下的extract-files.sh主要作用:從手機上下載固件相關文件、lib、二進制文件,并生成vendor目錄

CyanogenMod源碼編譯生成編譯腳本文件$cd~/CyanogenMod/vendor/cyanogen$./get-rommanager$./extract-google-files//復制編譯腳本文件到CyanogenMod目錄下,后面編譯整個系統(tǒng)用的就是這個文件$cp~/CyanogenMod/vendor/cyanogen/products/cyanogen_lieberty.mk~/CyanogenMod/buildspec.mk編譯腳本

//初始化腳本,這個是后面的重要基礎步驟$sourcebuild/envsetup.sh//選擇編譯的產(chǎn)品$lunchcyanogen_liberty-eng//開始編譯$make-j4問題:可下載的device有限,具體device的制作過程尚不清楚?

個性化修改1、一般定制ROM其實就是對手機內(nèi)存里的system/app文件夾的內(nèi)容進行自定義,系統(tǒng)所有的程序都在這個文件夾里,比如瀏覽器、撥號器、聯(lián)系人等。自己安裝的軟件\data\文件夾中。定制包的結構:*.zip/system/app/my.apk(你想要放進系統(tǒng)中的程序)

/META-INF/com/google/update-script(定制包腳本)

/META-INF/CERT.SF(簽名文件)

/META-INF/CERT.RSA(簽名文件)

/META-INF/MANIFEST.MF(簽名文件)

個性化修改添加目錄的語句為copy_dirPACKAGE:定制包路徑手機內(nèi)存路徑

刪除程序的語句為delete手機內(nèi)存路徑

顯示進程語句為show_progress顯示在Recovery系統(tǒng)中進度:show_progress(frac,sec)

frac,進度完成數(shù)值;Sec,總秒數(shù)

deleteSYSTEM:app/DivXRegCode.odex

deleteSYSTEM:ap

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論