【Android 系統】編譯android源碼學習

Android 系統
make -v 檢查系統中GNU Make的版本

Makefile帶來的好處就是分模塊來管理源程序工程和自動化編譯
Android編譯系統的入口文件位於$ANDROID_HOME目錄下
在Android編譯系統中,GNU Makefile文件名爲Android.mk,它說明如何編譯特定的應用程序,一般包含的元素:
(1)名稱。即編譯後的文件名,格式爲:LOCAL_MODULE :=<build_name>
(2)局部變量。使用下面的格式清除編譯期間會使用到的局部變量:include $(CLEAR_VARS)
(3)文件。即應用程序依賴的文件,格式爲:LOCAL_SRC_FILES :=main.c
(4)標籤。有必要的可以定義的一些標籤,格式爲:LOCAL_MODULE_TAGS :=eng development
(5)共享庫。即應用程序需要鏈接的共享庫,格式爲:LOCAL_SHARED_LIBRARIES :=cutils
(6)模板文件。把模板文件包含進來以便讓Make工具知道將生成什麼目標文件,格式爲:include $(BUILD_EXECUTABLE)

簡單APK應用程序包的Makefile文件代碼:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES :=$(call all-subdir-java-files)
LOCAL_PACKAGE_NAME :=localPackage
include $(BUILD_PACKAGE)

其中,目標應用程序名爲localPackage,apk;include $(BUILD_PACKAGE)表示編譯的目標應用程序包的類型爲APK。引用已存在jar文件的代碼

是LOCAL_STATIC_JAVA_LIBRARIES :=static-library。使用平臺的密鑰是通過指定LOCAL_CERTIFICATE變量的值爲platform來實現的。使用特

定產商的密鑰是通過指定LOCAL_CERTIFICATE變量的值爲vendor/example/certs/app來實現的

已編譯好的APK的Makefile文件代碼:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=localModuleName
LOCAL_SRC_FILES :=$(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS :=APPS
LOCAL_MODULE_SUFFIX :=$(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

include $(BUILD_PREBUILT)表示預編譯的目標應用程序包

Android系統編譯環境搭建
1.安裝git

$ sudo apt-get install git-core

2.安裝repo
創建存放repo目錄:

$ cd ~ 
$mkdir bin
$export PATH=~/bin;$PATH

3.初始化repo
下載repo,並改變權限:

$ curl http://android.git.kernel.org/repo >~/bin/repo
$chmod a+x ~/bin/repo

4.安裝JDK
查看當前正使用的Java和Javac版本命令:
sudo update-alternatives –config java sudo update-alternatives –config javac

$ sudo apt-get install sun-java6-jdk

然後再~/.bashrc文件中添加環境變量JAVA_HOME和ANDROID_JAVA_HOME;
$ sudo vim ~/.bashrc
在.bashrc文件的最後加入如下兩行:

export JAVA_HOME=/usr/lib/jvm/java-6-sum
export ANDROID_JAVA_HOME=$JAVA_HOME

完成後使用如下命令更新:

$ sudo source ~/.bashrc

之後,測試環境變量是否設置好

$echo $ANDROID_JAVA_HOME
$echo $JAVA_HOME

運行java-version,提示。。。。。說明已經成功安裝
5.安裝依賴和程序
$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev

zliblg-dev
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zliblg-dev gcc-multilib g++-multilib libc6

-dev-i386 lib32ncurses5-dev ia32-libs x1lproto-core-dev libxll-dev lib32readline5-dev lib32z-dev java-common unixodbc

編譯源代碼
在命令行運行emulator &,需要設置環境變量PATH和ANDROID_PRODUCT_OUT。在~/.bashrc文件添加環境變量的代碼:

export ANDROID_PRODUCT_OUT=$ANDROID_HOME/out/target/product/generic
export PATH=$PATH:$ANDROID_HOME/out/host/linux-x86/bin

如果想使用命令DDMS &來可視化地查看啓動的Log信息,還需加上
export ANDROID_SWT=$ANDROID_HOME/out/host/linux-x86/framework

編譯Android內核
1.設置環境變量
在~/.bashrc文件末尾加入環境變量:

export PATH=$PATH:/android23/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
export ARCH=arm

2.設定交叉編譯參數
進入$ANDROID_HOME/kernel/common目錄,修改其Makefile文件,
ARCH = arm
CROSS_COMPILE = arm-eabi-
3.編譯內核
在$ANDROID_HOME/kernel/common目錄下運行命令 make goldfish_defconfig配置編譯選項,然後輸入命令make編譯內核,如果編譯成功,看

到信息:kernel:arch/arm/boot/zImage is ready
4.測試自己編譯的內核
命令:$emulator -kernel /android23/kernel/common/arch/arm/boot/zImage

5.Android NDK 是一套開發工具,允許Android應用開發者使用C、C++語言開發效率敏感的程序,將其編譯成共享庫(以so文件的形式),加入到應用程序apk文件中,通過JNI方式調用這些共享庫的函數。

6.Android.mk文件的作用是向Android NDK編譯系統描述系統C\C++源代碼文件如何組織編譯的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章