【轉】Android底層庫和程式

來源:互聯網
上載者:User

標籤:

原文網址:http://blog.csdn.net/louiswangbing/article/details/6616202

Android底層庫和程式

1、     本地實現的基本結構

Android的本地實現層次具有基本的庫和程式,這些庫和程式是Android基本系統啟動並執行基礎,主要包含以下內容:

l  標準C/C++庫Bionic;

l  C語言工具庫libcutils;

l  init進程;

l  shell工具;

l  C++工具庫libutils。

2、     增加本地庫的方法

Android中增加本地庫或者程式,與其代碼路徑無關,只和他們的Android.mk檔案有關係。

Android.mk和普通的makefile略有不同,具有統一的寫法,主要包括一些系統公用的宏定義。

Android.mk中選項參考以下檔案路徑:

build/core/config.mk

各個選項的預設值在以下檔案中定義:

build/core/base_rules.mk

在一個Android.mk中也可以產生多個可執行程式、動態庫或者靜態庫。

在Android中編譯一個可執行程式的模板如下所示:

# test exe

LOCAL_PATH :=$(call my-dir)

 

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \

               main.c

LOCAL_MODULE :=test_exe

 

#LOCAL_C_INCLUDES:=

#LOCAL_STATIC_LIBRARIES:=

# LOCAL_SHARED_LIBRARIES:=

 

include $(BUILD_EXECUTABLE)

編譯一個可執行程式,需要在LOCAL_SRC_FILES中啊計入源檔案路徑(相當與當前的目錄),在LOCAL_C_INCLUDES加入所需要包含的標頭檔路徑,在LOCAL_STATIC_LIBRARIES中加入所需要串連的靜態庫(.a)的名稱,在LOCAL_SHARED_LIBRARIES中加入所需要串連的動態庫(.so)的名稱。LOCAL_MODULE表示模組最終的名稱。最後,使用include $(BUILD_EXECUTABLE)表示以一個可執行程式的方式進行編譯。在本例中LOCAL_MODULE被定義為test_exe,因此最終產生的可執行程式的名稱是test_exe。

在Android.mk中編譯一個靜態庫的模板如下所示:

# test staticlib

LOCAL_PATH :=$(call my-dir)

 

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \

               main.c

LOCAL_MODULE :=libtest_static

      

#LOCAL_C_INCLUDES:=

#LOCAL_STATIC_LIBRARIES:=

# LOCAL_SHARED_LIBRARIES:=

 

include $(BUILD_STATIC_LIBRARY)

編譯一個靜態庫,基本的內容和編譯可執行程式相似,區別在於使用include $(BUILD_STATIC_LIBRARY)表示編譯靜態庫,本例中LOCAL_MODULE被定義為libtest_static,所以最終產生的靜態庫的名稱是libtest_static.a。

在Android.mk中編譯一個動態庫的模板如下所示:

# test sharedlib

LOCAL_PATH :=$(call my-dir)

 

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \

               main.c

LOCAL_MODULE :=libtest_shared

      

       TARGET_PRELINK_MODULE:= false

      

#LOCAL_C_INCLUDES:=

#LOCAL_STATIC_LIBRARIES:=

# LOCAL_SHARED_LIBRARIES:=

 

include $(BUILD_SHARED_LIBRARY)

編譯一個動態庫,基本的內容和編譯可執行程式、靜態庫相似,區別在於使用include $(BUILD_ SHARED _LIBRARY)表示編譯靜態庫,本例中LOCAL_MODULE被定義為libtest_ shared,所以最終產生的靜態庫的名稱是libtest_shared.so。

在Android中不需要對C源檔案和C++源檔案進行區分,統一加入LOCAL_SRC_FILES中即可。

可執行程式、靜態庫和動態庫產生的編譯結果分別在一下的目錄中:

out/target/product/generic/obj/EXECUTABLE

out/target/product/generic/obj/STATIC_LIBRARY

out/target/product/generic/obj/SHARED_LIBRARY

每個模組的魔錶檔案夾分別為:

l  可執行程式:{XXX}_intermediates

l  靜態庫:{XXX}_static_intermediates

l  動態庫:{XXX}_shared_intermediates

其中{XXX}為每個模組中LOCAL_MODULE所定義的名稱。

在編譯過程中,可以編譯目標及的內容,也可以編譯主機的內容。以上的例子是編譯目標及的內容,可執行程式、動態庫、靜態庫使用宏分別為:

include $(BUILD_EXECUTABLE)

include $(BUILD_SHARED_LIBRARY)

include $(BUILD_STATIC_LIBRARY)

編譯主機的內容,可執行程式、動態庫、靜態庫使用宏分別為:

include $(BUILD_HOST_EXECUTABLE)

include $(BUILD_HOST_SHARED_LIBRARY)

include $(BUILD_HOST_STATIC_LIBRARY)

【轉】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.