Android 技術專題系列之三 -- 編譯(build) 流程 - shenbin143...

Android 技術專題系列之三 -- 編譯(build) 流程 收藏 Android使用的build系統與普通Linux軟體使用的build工具有很大不同,因而,可能使熟悉傳統Linux開發工具的程序員稍感陌生。普通的軟體項目一般使用autotools工具,包括autoconf, automake, libtool等,利用這些工具來自動生成Makefile。而Android創建了一套自己的系統來生成Makefile。下面對Android的 build系統作一初步探討。Android源碼中的build/core/build-system.html是我們研究Android build系統的基本文檔。本文基於這一文檔並進一步展開。Android build系統定義了一套自己的變數,宏等,如LOCAL_MODULE_TAGS, LOCAL_PACKAGE_NAME等。如何代入這些變數,如何展開這些宏,都在build/core目錄下的文件中定義。開發人員可以使用這些變數編寫Android build系統的Makefile -- Android.mk。每個模塊,如一個應用,一個共享庫等,都有一個自己的Android.mk。在編譯的時候,Android.mk中的宏就會被展開成相應的Make規則,變數也會代入相關的規則。下面以packages/apps/AlarmClock/Android.mk舉例介紹:~~~~~~~~LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := eng developmentLOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_PACKAGE_NAME := AlarmClockinclude $(BUILD_PACKAGE)~~~~~~~~~~關於這些變數的含義,在build/core/build-system.html中都有具體介紹。值得注意的是,如果是生成一個可執行程序,則引用 BUILD_PACKAGE,如果生成一個library,則引用BUILD_SHARED_LIBRARY。我們可以模仿現有的Android.mk去創建自己的Android.mk。build/envsetup.sh中引入了幾個方便的命令可用來幫助執行build命令。m: 執行對整個Android源碼的buildmm: 執行對當前目錄下模塊的build.printconfig: 當前build的配置情況。在整個Android源碼編譯完成後,生成的二進位文件以及image等都安裝在out/目錄下。通過如下命令序列可以啟動emulator (假設Android源碼安裝在~/mydroid目錄下):export ANDROID_PRODUCT_OUT=~/mydroid/out/target/product/generic/cd ~/mydroid/out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates./emulator本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/shenbin1430/archive/2009/06/23/4291839.aspx
推薦閱讀:

eclipse 編譯jni的一些設置
TarvisCI 全流程使用實踐(一)
梭羅和隱逸的《瓦爾登湖》(王淑霞 編譯)
將 ffmpeg 編譯為 android JNI 庫 | 挨踢的甘蔗
2011 阿拉伯之春【普羅編譯】

TAG:Android | 技術 | 編譯 | 流程 | 專題 |