Android.mk

和您一起終身學(xué)習(xí),這里是程序員Android

本篇文章主要介紹 Android 開發(fā)中 Android.mk部分知識點,通過閱讀本篇文章,您將收獲以下內(nèi)容:

一、Android.mk 簡介
二、Android.mk 的基本格式
三、Android.mk 深入學(xué)習(xí)一
四、 Android.mk 深入學(xué)習(xí)二
五、 Android.mk 深入學(xué)習(xí)三
六、 Android.mk 判斷語句
七、參考文獻

一 、Android.mk 簡介

Android.mk 是Android 提供的一種makefile 文件,注意用來編譯生成(exe,so,a,jar,apk)等文件。

Android.mk生成文件

二、Android.mk 的基本格式

Android.mk 基本格式如下

# 定義模塊當(dāng)前路徑
LOCAL_PATH := $(call my-dir)  
#清空當(dāng)前環(huán)境變量
include $(CLEAR_VARS)  
................  
# 引入頭文件等
LOCAL_xxx       := xxx
#編譯生成的文件名  
LOCAL_MODULE    := hello  
#編譯該模塊所需的源碼
LOCAL_SRC_FILES := hello.c  
#引入jar包等
LOCAL_xxx       := xxx  
................  
#編譯生成文件的類型 
#LOCAL_MODULE_CLASS  、JAVA_LIBRARIES
#APPS 、 SHARED_LIBRARIES
#EXECUTABLES 、 ETC
include $(BUILD_EXECUTABLE)  

三、Android.mk 深入學(xué)習(xí)一

使用Android.mk 可以編譯多個目標(biāo)文件:

Android.mk 編譯多個目標(biāo)文件

編譯動態(tài)庫

C/C++ 文件編譯生成靜態(tài)庫.so文件參考如下

LOCAL_PATH := $(call my-dir)    
include $(CLEAR_VARS)    
# 生成libhell.so
LOCAL_MODULE = libhello    

LOCAL_CFLAGS = $(L_CFLAGS)    
LOCAL_SRC_FILES = hello.c  
LOCAL_C_INCLUDES = $(INCLUDES) 
LOCAL_SHARED_LIBRARIES := libcutils    
LOCAL_COPY_HEADERS_TO := libhello   
LOCAL_COPY_HEADERS := hello.h   

#編譯動態(tài)庫 BUILD_SHARED_LIBRARY

include $(BUILD_SHARED_LIBRARY)   

編譯靜態(tài)庫

C/C++ 文件編譯生成靜態(tài)庫.a文件參考如下


#編譯靜態(tài)庫    
LOCAL_PATH := $(call my-dir)    
include $(CLEAR_VARS)    
# 生成libhell.a
LOCAL_MODULE = libhello

LOCAL_CFLAGS = $(L_CFLAGS)    
LOCAL_SRC_FILES = hello.c    
LOCAL_C_INCLUDES = $(INCLUDES)    
LOCAL_SHARED_LIBRARIES := libcutils    
LOCAL_COPY_HEADERS_TO := libhello   
LOCAL_COPY_HEADERS := hellos.h   

 # 編譯 靜態(tài)庫    BUILD_STATIC_LIBRARY
include $(BUILD_STATIC_LIBRARY) 

四、 Android.mk 深入學(xué)習(xí)二

Android.mk 引用資源

引用靜態(tài)庫
LOCAL_STATIC_LIBRARIES += libxxxxx

LOCAL_STATIC_LIBRARIES := \
    ...
    libxxx2 \
    libxxx \

引用動態(tài)庫
LOCAL_SHARED_LIBRARIES += libxxxxx

LOCAL_SHARED_LIBRARIES := liblog libnativehelper libGLESv2

引用第三方庫文件
LOCAL_LDFLAGS:=-L/PATH -Lxxx

LOCAL_LDFLAGS := $(LOCAL_PATH)/lib/libtest.a

引用第三方頭文件
LOCAL_C_INCLUDES :=path

eg:

LOCAL_C_INCLUDES = $(INCLUDES)

五、 Android.mk 深入學(xué)習(xí)三

Android.mk 深入學(xué)習(xí)三

編譯apk

  LOCAL_PATH := $(call my-dir)
  include $(CLEAR_VARS)
  LOCAL_SRC_FILES := $(call all-subdir-java-files)
  # 生成hello apk
  LOCAL_PACKAGE_NAME := hello
  include $(BUILD_PACKAGE)

編譯jar包

  LOCAL_PATH := $(call my-dir)
  include $(CLEAR_VARS)
  LOCAL_SRC_FILES := $(call all-subdir-java-files)
  # 生成 hello
  LOCAL_MODULE := hello
  # 編譯生成靜態(tài)jar包
  include $(BUILD_STATIC_JAVA_LIBRARY)
  #編譯生成共享jar
  include $(BUILD_JAVA_LIBRARY)
  • 靜態(tài)jar包:

include $(BUILD_STATIC_JAVA_LIBRARY)
使用.class文件打包而成的JAR文件,可以在任何java虛擬機運行

  • 動態(tài)jar包:

include $(BUILD_JAVA_LIBRARY)
在靜態(tài)jar包基礎(chǔ)之上使用.dex打包而成的jar文件,.dex是android系統(tǒng)使用的文件格式。

APK 依賴jar

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 靜態(tài)jar包
LOCAL_STATIC_JAVA_LIBRARIES := static-library
#動態(tài)jar包
LOCAL_JAVA_LIBRARIES := share-library

LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := hello
include $(BUILD_PACKAGE)

預(yù)編譯jar包

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#指定編譯生成的文件類型
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := hello
LOCAL_SRC_FILES :=  $(call all-subdir-java-files)
# 預(yù)編譯
include $(BUILD_PREBUILT)

預(yù)編譯文件類型如下:

  • 1.LOCAL_MODULE_CLASS:
    編譯文件類型

  • 2.JAVA_LIBRARIES:
    dex歸檔文件

  • 3.APPS:
    APK文件

  • 4.SHARED_LIBRARIES:
    動態(tài)庫文件

  • 5.EXECUTABLES:
    二進制文件

  • 6.ETC:
    其他文件格式

六、 Android.mk 判斷語句

Android.mk 中的判斷語句

ifeq($(VALUE), x)   #ifneq
  do_yes
else
  do_no
endif

ifeq/ifneq:根據(jù)判斷條件執(zhí)行相關(guān)編譯

七、參考文獻

至此,本篇已結(jié)束。轉(zhuǎn)載網(wǎng)絡(luò)的文章,小編覺得很優(yōu)秀,歡迎點擊閱讀原文,支持原創(chuàng)作者,如有侵權(quán),懇請聯(lián)系小編刪除,歡迎您的建議與指正。同時期待您的關(guān)注,感謝您的閱讀,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android.mk是Android源碼中提供的一套用于編譯Android系統(tǒng)、子模塊的基于makefile語法規(guī)...
    林栩link閱讀 4,246評論 0 10
  • 1. LOCAL_PATH:= $(callmy-dir) 每個Android.mk文件必須以定義LOCAL_PA...
    蘇恨閱讀 6,295評論 0 9
  • 簡介 Android.mk文件是GNU Make的一小部分,它用來對Android程序進行編譯。因為所有的andr...
    xcz1899閱讀 1,402評論 0 1
  • 常用變量定義 為了方便模塊編譯,Build系統(tǒng)還設(shè)置了很多編譯環(huán)境。單獨編譯一個模塊時,需要配置變量后才能執(zhí)行編譯...
    好多個胖子閱讀 3,589評論 0 2
  • Android.mk解析 一、變量說明: 1.LOCAL_PATH:= $(call my-dir) 此行代碼在A...
    傀儡世界閱讀 2,388評論 0 1

友情鏈接更多精彩內(nèi)容