1. 擷取一些額外的命令,來用於part build一些子模組
Android_4.2.2_SourceCode/build/下的envsetup.sh指令碼可以使這些額外的命令被啟用,這樣才可以編譯子模組。
USER-NAME@MACHINE-NAME:~/Android_4.2.2_SourceCode$ . ./build/envsetup.sh
including device/asus/grouper/vendorsetup.sh
including device/asus/tilapia/vendorsetup.sh
including device/generic/armv7-a-neon/vendorsetup.sh
including device/generic/armv7-a/vendorsetup.sh
including device/generic/mips/vendorsetup.sh
including device/generic/x86/vendorsetup.sh
including device/lge/mako/vendorsetup.sh
including device/samsung/maguro/vendorsetup.sh
including device/samsung/manta/vendorsetup.sh
including device/samsung/toroplus/vendorsetup.sh
including device/samsung/toro/vendorsetup.sh
including device/ti/panda/vendorsetup.sh
including sdk/bash_completion/adb.bash
然後很多命令就可以使用了。。
2.編譯指定模組
USER-NAME@MACHINE-NAME:~/Android_4.2.2_SourceCode$ mmm packages/apps/Email/
編譯完成之後,就可以在out/target/product/generic/system/app目錄下看到Email.apk檔案了。
這是我驗證過的,我編譯之前沒有Email.apk,使用mmm命令後,的確出現了 Email.apk檔案。。
這些都是參考的。。。
3.重新打包和開啟模擬器
USER-NAME@MACHINE-NAME:~/Android$ make snod
USER-NAME@MACHINE-NAME:~/Android$ emulator
這些沒有完全用的到,以後說明用處。。
// 分割線一下都是老羅作品, 我只是將學習的東西總結,提取出來。。。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
參考老羅的部落格:
地址:http://blog.csdn.net/luoshengyang/article/details/6566662
第一次下載好Android原始碼工程後,我們通常是在Android原始碼工程目錄下執行make命令,經過漫長的等待之後,就可以得到Android系統鏡像system.img了。以後如果我們修改了Android原始碼中的某個模組或者在Android原始碼工程新增一個自己的模組,是不是還是執行make命令呢?答案是否定的,Google為我們準備了另外的命令來支援編譯單獨的模組,以及重新打包system.img的命令。在繼續學習Android原始碼之前,就讓我們先來看看這個命令吧。
一. 首先在Android原始碼目錄下的build目錄下,有個指令檔envsetup.sh,執行這個指令檔後,就可以獲得一些有用的工具:
USER-NAME@MACHINE-NAME:~/Android$ . ./build/envsetup.sh
注意,這是一個source命令,執行之後,就會有一些額外的命令可以使用:
- croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of the modules in the current directory.
- mmm: Builds all of the modules in the supplied directories.
- cgrep: Greps on all local C/C++ files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file. 這些命令的具體用法,可以在命令的後面加-help來查看,這裡我們只關注mmm命令,也就是可以用它來編譯指定目錄的所有模組,通常這個目錄只包含一個模組。 二. 使用mmm命令來編譯指定的模組,例如Email應用程式:
USER-NAME@MACHINE-NAME:~/Android$ mmm packages/apps/Email/
編譯完成之後,就可以在out/target/product/generic/system/app目錄下看到Email.apk檔案了。Android系統內建的App都放在這具目錄下。另外,Android系統的一些可執行檔,例如C編譯的可執行檔,放在out/target/product/generic/system/bin目錄下,動態連結程式庫檔案放在out/target/product/generic/system/lib目錄下,out/target/product/generic/system/lib/hw目錄存放的是硬體抽象層(HAL)介面檔案,後面的文章裡面,我們會陸續提及到,敬請關注。 三. 編譯好模組後,還要重新打包一下system.img檔案,這樣我們把system.img運行在模擬器上時,就可以看到我們的程式了。
USER-NAME@MACHINE-NAME:~/Android$ make snod
四. 參照Ubuntu上下載、編譯和安裝Android最新原始碼一文介紹的方法運行模擬器:
USER-NAME@MACHINE-NAME:~/Android$ emulator
這樣一切就搞定了。
老羅的新浪微博:http://weibo.com/shengyangluo,歡迎關注!