原文在這里
source buile/envsetup.sh
lunch sdk-eng
make sdk -j2
編譯完之后,sdk安裝在了下面的目錄里
ANDROIID_DIR/out/host/linux-x86/sdk
在這個(gè)目錄下有一個(gè)壓縮包,里面就是我們從eclipse里下載的sdk的包。
如果你做過app開發(fā)都會(huì)知道,我們只有下載了不同版本的sdk之后才能創(chuàng)建不同版本的模擬器,我們編譯完sdk之后就可以創(chuàng)建模擬器了
$ cd ANDROIID_DIR/out/host/linux-x86/sdk/android-sdk_eng.linux_linux-x86/tools
首先,查看當(dāng)前sdk的Id號(hào),用于創(chuàng)建一個(gè)模擬器
$ ./android list targets
Available Android targets:
----------
id: 1 or "android-14"
Name: Android 4.0
Type: Platform
API level: 14
Revision: 2
Skins: WXGA800, WQVGA400, WXGA720, HVGA, WVGA854, WQVGA432, WVGA800 (default), QVGA, WSVGA
ABIs : no ABIs.
創(chuàng)建一個(gè)模擬器
$ ./android create avd -n mydroid -t 1
-n 表示指定模擬器的名字, -t表示指定創(chuàng)建模擬的版本id
啟動(dòng)模擬器
$ ./emulator &
由于模擬器要啟動(dòng)android系統(tǒng),他要使用幾個(gè)映像文件,分別是:kernel-qemu , system.img, userdata.img, ramdisk.img
kernel-qemu:內(nèi)核映像文件,它是linux操作系統(tǒng)針對(duì)qemu模擬器編譯的內(nèi)核文件,里面安裝有qemu的仿真硬件驅(qū)動(dòng),如果將來(lái)在開發(fā)板或手機(jī)上移植android,那么,第一步就是要先make出一個(gè)支持開發(fā)板或手機(jī)的kernel來(lái)
system.img:是android系統(tǒng)的文件系統(tǒng),里面包含了android系統(tǒng)的應(yīng)用程序(apk),系統(tǒng)用到的各種庫(kù)(jar, so, a)和資源, 配置文件(etc目錄下),系統(tǒng)命令(bin, usr/bin, xbin) ,該映像文件是由out/target/product/PRODUCT/system目錄打包生成的,我們可以對(duì)這個(gè)目錄里的東西進(jìn)行定制 化,比如,你要想讓android系統(tǒng)默認(rèn)為安裝一個(gè)應(yīng)用程序,那么可以將要安裝的apk文件拷貝到out/target/product /PRODUCT/system/app目錄下
userdata.img:用戶數(shù)據(jù)映像,里面包含有程序安裝信息,好比如是windows的C:/Program Files/目錄
ramdisk.img:內(nèi)存磁盤映像,這個(gè)文件對(duì)于沒有做過Linux移植的人來(lái)說(shuō),不好理解,linux內(nèi)核啟動(dòng)起來(lái),要掛載一個(gè)文件系統(tǒng)作為 自己的根文件系統(tǒng),通常文件系統(tǒng)是存放在塊設(shè)備上的,也就是硬盤或flash上的。一個(gè)linux的根文件系統(tǒng)里面通常包含有以下內(nèi)容:
usr:最大的目錄,存放應(yīng)用程序和文件
bin:常用的命令目錄
etc:系統(tǒng)相關(guān)配置文件目錄
dev:系統(tǒng)設(shè)備目錄
opt:主機(jī)額外安裝的軟件目錄
boot:存放系統(tǒng)啟動(dòng)時(shí)必須讀取的配置文件,包括核心 (kernel) 在內(nèi)
home:普通用戶家目錄
lib:系統(tǒng)使用庫(kù)目錄
var:日志文件目錄
lost+found:系統(tǒng)不正常產(chǎn)生錯(cuò)誤時(shí),會(huì)將一些遺失的片段放置于此目錄下
mnt:外設(shè)的掛載點(diǎn)目錄
proc:虛擬文件目錄,是系統(tǒng)信息的映射
root:root用戶家目錄
sbin:超級(jí)命令所在目錄
tmp:一般使用者或者是正在執(zhí)行的程序暫時(shí)放置文件的地方
而ramdisk.img這個(gè)映像,其實(shí)里面就是上述目錄和一些基本配置文件的打包映像,ramdisk是將映像加載到內(nèi)存里,然后將內(nèi)存當(dāng)做一個(gè)塊設(shè)備(硬盤)來(lái)使用,所以說(shuō)通常ramdisk.img通常比較小。當(dāng)然,除了上面的FHS標(biāo)準(zhǔn)的Linux文件系統(tǒng)目錄以外,android系統(tǒng)里,還增加了data,system目錄。
前面所述的userdata.img和system.img映像,其實(shí)就是掛載到data,system目錄下的。
我們可以通過下面的命令,來(lái)指定模擬器,啟動(dòng)哪個(gè)內(nèi)核,使用哪些文件系統(tǒng):
./emulator -avd mydroid -system ANDROIID_DIR/out/target/product/generic/system.img -data ANDROIID_DIR/out/target/product/generic/userdata.img -ramdisk ANDROIID_DIR/out/target/product/generic/ramdisk.img -kernel ANDROIID_DIR/prebuilt/android-arm/kernel/kernel-qemu-armv7
-system指定system.img
-data指定userdata.img
-ramdisk指定ramdisk.img
-kernel指定內(nèi)核映像
實(shí)驗(yàn):對(duì)androd系統(tǒng)進(jìn)行瘦身
android系統(tǒng)抽屜里顯示的應(yīng)用存放在out/target/product/PRODUCT/system/app目錄里,我們可以將一些不 常用的,不想用的apk文件刪除,一來(lái)減小Android的體積,二來(lái)可以加快系統(tǒng)啟動(dòng)速度,因?yàn)樵谙到y(tǒng)啟動(dòng)時(shí),會(huì)掃描system/app目錄下的 apk文件,對(duì)比有沒有安裝更新。
刪除一些apk,去掉計(jì)算器,日歷,電話,短信
$ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Calculator.*
$ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Calendar.*
$ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Email.*
$ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Message.*
$ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Telephone.*
刪除了之后,執(zhí)行下面的命令,只編譯system.img,而不去檢查依賴關(guān)系,這樣很快就能編譯完
$ make snod
注:上述命令必須要保證執(zhí)行了source buile/envsetup.sh和lunch full-eng之后,以后只要是說(shuō)make,都指已經(jīng)執(zhí)行了前述兩步驟
snod的意思是編譯system imge no dependency
然后,再重新啟動(dòng)模擬器,指定自己編譯的system.img,查看抽屜里有沒有我們刪除的應(yīng)用
./emulator -avd mydroid -system ANDROIID_DIR/out/target/product/generic/system.img -data ANDROIID_DIR/out/target/product/generic/userdata.img -ramdisk ANDROIID_DIR/out/target/product/generic/ramdisk.img -kernel ANDROIID_DIR/prebuilt/android-arm/kernel/kernel-qemu-armv7
思考:我們能不能將全部的system/app下的apk刪除掉,如果不能,哪些必須要保留,為什么?