android 編譯命令

來源:互聯網
上載者:User

轉自:http://blog.csdn.net/jaylin2013/archive/2010/07/01/5707301.aspx

作者:jaylin2013

 

 

1.編譯單個模組,可以使用mmm工具

其使用方法是:mmm <dir>,如編譯frameworks下的所有檔案:

先在android 源碼根目錄下執行: source build/envsetup.sh 再換到目標目錄下執行:mmm <framwork>
或者:
先執行: $. build/envsetup.sh && help
接著:如下, m, mm, mmm.
Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment:
- 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.
例1:===========================================================================================================================================================
jinli@jinli:~/AndroidStandardSource$ . build/envsetup.sh && choosecombo 1 1 2 3 && export ANDROID_JAVA_HOME=$JAVA_HOME && mmm hardware/libhardware/sensor/
=============================================================================================================================================================

例2:
我們可以使用mmm來編譯指定目錄的模組,如編譯連絡人:
mmm packages/apps/Contacts/
編完之後產生兩個檔案:
out/target/product/generic/data/app/ContactsTests.apk
out/target/product/generic/system/app/ Contacts.apk

2.編譯出來的APK,但APK並不包含在system檔案夾中,我們可以使用make snod 打包system檔案夾,產生新的system.img。

3. make sdk 命令:
make PRODUCT-sdk-sdk

4.應用程式還可以通過eclipse建立android 應用程式安裝包。

5.運行在模擬器,上傳framework.jar到對應的運行環境目錄
$ ./adb push {MYDONUT_OUT_PATH}/target/product/generic/system/framework/framework.jar /system/framework

6. 通過命令,重啟裝置,更新生效。
$ ./adb shell
# stop
# start

================================================================================

android source 目錄下MAkefile內容:

### DO NOT EDIT THIS FILE ###
include build/core/main.mk
### DO NOT EDIT THIS FILE ###

build/core/main.mk包含build/core/config.mk
build/core/config.mk在兩個地方尋找BoardConfig.mk
config.mk中與此相關的內容:
#Boards may be defined under $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)
# or under vendor/*/$(TARGET_DEVICE). Search in both places, but
# make sure only one exists.

make 預設的BoardConfig
build/target/board/generic/BoardConfig.mk

====================================================================================

source build/envsetup.sh

make TARGET_PRODUCT=sec_smdk6410 showcommands
=======================================================================================
構建Android 1.5系統映像並在模擬器中運行

1、Host OS編譯環境準備
sudo apt-get install flex bison gperf valgrind libsdl-dev libesd0-dev libwxgtk2.6-dev zlib1g-dev
另外,編譯過程中還需要用到JDK 5.0(注意JDK6.0不被支援),請到Sun的官方網站下載後安裝。

(10.04 & 9.10: sudo agt-get install gcc-4.3 g++-4.3)

2、設定java環境
把JDK5.0加進$PATH,如:
$export PATH=$PATH:/home/william/jdk5.0/bin
然後可以用java -version來確認java的版本

3.Android源碼編譯出錯的解決辦法

下載Android源碼前,如果在Ubuntu 9.10系統下,需要更換jdk的版本,要換成sun-java5-jdk,如果不更換,在編譯Android源碼的時候會出現錯誤。
編譯Android源碼
下載完源碼後,不能直接編譯,如果直接make,會出現錯誤:
frameworks/policies/base/PolicyConfig.mk:22: *** No module defined for the given PRODUCT_POLICY (android.policy_phone). 
解決辦法:
在 Android源碼所在目錄中 進入build/tools/findleaves.sh中的第89行 
   這一句
find "${@:0:$nargs}" $findargs -type f -name "$filename" -print |
改為
find "${@:1:$nargs-1}" $findargs -type f -name "$filename" -print |
這個錯誤改過了之後,執行make,又發現錯誤:
frameworks/base/tools/aidl/AST.cpp:10: error: 'fprintf' was not declared in this scope
解決辦法:
下載gcc-4.3和 g++-4.3,替換最新的gcc-4.4和g++-4.4版本
sudo apt-get install g++-4.3 gcc-4.3
進入/usr/bin目錄 刪除目錄下對gcc-4.4 和 g++-4.4的軟連結
rm gcc
rm g++
建立如下連結
ln -s gcc-4.3 gcc
ln -s g++-4.3 g++

4、關於編譯選項
在build/core目錄下的envsetup.mk定義了target的體繫結構和OS,預設為arm和linux,我們暫時不涉及移植,所以不需要修改。

5、開始編譯
做完上面的準備,在代碼樹的根目錄下敲make就可以了,編譯的過程大約需要持續1~2個小時,總計需要大約3.5G的可用空間。

6、測試產生的image
編譯完成以後如果想在模擬器中運行,除了kernel的映像檔案以外,所需的其他3個映像檔案分別是:(位於out/target/product/generic/目錄)
ramdisk.img: 包含了在模擬器中啟動Android所需的檔案系統
system.img: 初始的Android系統映像,包含了程式和庫檔案
userdata.img: 初始的使用者資料映像檔案
模擬器會首先到指定的AVD所在的目錄尋找是否有userdata映像存在,如果沒有的話就會基於初始的userdata.img來建立一個,載入這3個映像檔案後,它會把system.img和userdata.img分別掛載載到ramdisk檔案系統中的system和userdata目錄下。所有的使用者資料都會被儲存在AVD目錄下的userdata-qemu.img中,初始的使用者資料映像檔案並不會被修改。

通過命令列參數啟動模擬器,載入我們編譯的系統映像的方法:
emulator @1.5_L2 -system system.img -ramdisk ramdisk.img
或者加上-kernel參數,用自己編出來的kernel來啟動。
=========================================================================================================================================================

android 編譯時間可能出現gcc版本不匹配的問題,解決方案如下:

下載gcc-4.3和 g++-4.3,替換最新的gcc-4.4和g++-4.4版本
sudo apt-get install g++-4.3 gcc-4.3
進入/usr/bin目錄 刪除目錄下對gcc-4.4 和 g++-4.4的軟連結
rm gcc
rm g++
建立如下連結
ln -s gcc-4.3 gcc
ln -s g++-4.3 g++
執行make命令 ,編譯成功

 

 

KeyWords:

 

android 編譯命令,android 編譯命令大全,android 編譯步驟

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.