真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android.mk,androidmk99

android.mk文件怎么寫

 一個Android.mk file用來向編譯系統(tǒng)描述你的源代碼。具體來說:該文件是GNU Makefile的一小部分,會被編譯系統(tǒng)解析一次或多次。你可以在每一個Android.mk file中定義一個或多個模塊,你也可以在幾個模塊中使用同一個源代碼文件。編譯系統(tǒng)為你處理許多細節(jié)問題。例如,你不需要在你的Android.mk中列出頭文件和依賴文件。NDK編譯系統(tǒng)將會為你自動處理這些問題。這也意味著,在升級NDK后,你應(yīng)該得到新的toolchain/platform支持,而且不需要改變你的Android.mk文件。

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、寧陵ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的寧陵網(wǎng)站制作公司

先看一個簡單的例子:一個簡單的"hello world",比如下面的文件:

sources/helloworld/helloworld.c

sources/helloworld/Android.mk

相應(yīng)的Android.mk文件會象下面這樣:

---------- cut here ------------------

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE

:= helloworld

LOCAL_SRC_FILES := helloworld.c

include $(BUILD_SHARED_LIBRARY)

---------- cut here ------------------

我們來解釋一下這幾行代碼:

LOCAL_PATH := $(call my-dir)

一個Android.mk file首先必須定義好LOCAL_PATH變量。它用于在開發(fā)樹中查找源文件。在這個例子中,宏函數(shù)’my-dir’, 由編譯系統(tǒng)提供,用于返回當前路徑(即包含Android.mk file文件的目錄)。

include $( CLEAR_VARS)

CLEAR_VARS由編譯系統(tǒng)提供,指定讓GNU MAKEFILE為你清除許多LOCAL_XXX變量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。這是必要的,因為所有的編譯控制文件都在同一個GNU MAKE執(zhí)行環(huán)境中,所有的變量都是全局的。

LOCAL_MODULE := helloworld

LOCAL_MODULE變量必須定義,以標識你在Android.mk文件中描述的每個模塊。名稱必須是唯一的,而且不包含任何空格。注意編譯系統(tǒng)會自動產(chǎn)生合適的前綴和后綴,換句話說,一個被命名為'foo'的共享庫模塊,將會生成'libfoo.so'文件。

LOCAL_SRC_FILES := helloworld.c

LOCAL_SRC_FILES變量必須包含將要編譯打包進模塊中的C或C++源代碼文件。注意,你不用在這里列出頭文件和包含文件,因為編譯系統(tǒng)將會自動為你找出依賴型的文件;僅僅列出直接傳遞給編譯器的源代碼文件就好。

在Android中增加本地程序或者庫,這些程序和庫與其所載路徑?jīng)]有任何關(guān)系,只和它們的Android.mk文件有關(guān)系。Android.mk和普通的Makefile有所不同,它具有統(tǒng)一的寫法,主要包含一些系統(tǒng)公共的宏。

在一個Android.mk中可以生成多個可執(zhí)行程序、動態(tài)庫和靜態(tài)庫。

1,編譯應(yīng)用程序的模板:

#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加入所需要鏈接的靜態(tài)庫(*.a)的名稱,LOCAL_SHARED_LIBRARIES中加入所需要鏈接的動態(tài)庫(*.so)的名稱,LOCAL_MODULE表示模塊最終的名稱,BUILD_EXECUTABLE表示以一個可執(zhí)行程序的方式進行編譯。

2,編譯靜態(tài)庫的模板:

#Test Static Lib

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= /

helloworld.c

LOCAL_MODULE:= libtest_static

#LOCAL_C_INCLUDES :=

#LOCAL_STATIC_LIBRARIES :=

#LOCAL_SHARED_LIBRARIES :=

include $(BUILD_STATIC_LIBRARY)

一般的和上面相似,BUILD_STATIC_LIBRARY表示編譯一個靜態(tài)庫。

3,編譯動態(tài)庫的模板:

#Test Shared Lib

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= /

helloworld.c

LOCAL_MODULE:= libtest_shared

TARGET_PRELINK_MODULES := false

#LOCAL_C_INCLUDES :=

#LOCAL_STATIC_LIBRARIES :=

#LOCAL_SHARED_LIBRARIES :=

include $(BUILD_SHARED_LIBRARY)

一般的和上面相似,BUILD_SHARED_LIBRARY表示編譯一個靜態(tài)庫。

以上三者的生成結(jié)果分別在如下,generic依具體target會變:

out/target/product/generic/obj/EXECUTABLE

out/target/product/generic/obj/STATIC_LIBRARY

out/target/product/generic/obj/SHARED_LIBRARY

每個模塊的目標文件夾分別為:

可執(zhí)行程序:XXX_intermediates

靜態(tài)庫: XXX_static_intermediates

動態(tài)庫: XXX_shared_intermediates

另外,在Android.mk文件中,還可以指定最后的目標安裝路徑,用LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH來指定。不同的文件系統(tǒng)路徑用以下的宏進行選擇:

TARGET_ROOT_OUT:表示根文件系統(tǒng)。

TARGET_OUT:表示system文件系統(tǒng)。

TARGET_OUT_DATA:表示data文件系統(tǒng)。

用法如:

CAL_MODULE_PATH:=$(TARGET_ROOT_OUT)

Z9002022款如何調(diào)節(jié)大燈開關(guān)

方向盤左下方有一個可調(diào)節(jié)的旋轉(zhuǎn)開關(guān),就是大燈高度調(diào)節(jié)開關(guān)?,F(xiàn)在,又有一款內(nèi)置安卓系統(tǒng)的USB便攜電腦Android 4.0 mini PC面世,即Zero Devices Z900。

MK802另一個型號名是Z802,而Zero Devices這次推出的Z900就是MK802的升級版,其他方面,Zero Devices Z900采用獨特的外殼設(shè)計,內(nèi)置512MB內(nèi)存和4GB存儲空間。

提供microSD卡插槽和HDMI、USB、mini USB接口尺寸為89×32×18毫米,重量為38克。

Zero Devices Z900將運行Android 4.0冰淇淋三明治系統(tǒng),如果你需要,還可以刷Android 2.3甚至是Linux系統(tǒng),和MK802一樣,用戶可以通過HDMI接口連接外置顯示器,再通過USB接口連接鼠標或鍵盤。

至于Z900的上市時間和價格,暫時還沒有消息,不過將有黑白兩色選擇。

Z9002022款大燈高度調(diào)節(jié)

前照燈高度調(diào)節(jié)旋鈕通常位于儀表板的左側(cè)和燈光控制開關(guān)的一側(cè)旋鈕上一般有0到3的數(shù)字,數(shù)字越高,高度越低大多數(shù)情況下,0的位置就可以了。

0為初始位置和水平高度,適用于前排有人,行李空裝載的情況1-3檔適用于車滿行李滿的情況。

大燈高度可調(diào)一般車內(nèi)有一個手動調(diào)節(jié)旋鈕,可以隨意調(diào)節(jié)大燈的照明高度,但有些高端豪華車的大燈是自動水平調(diào)節(jié)的。

對于大燈高度自動調(diào)節(jié)的車輛,車身會配備多個傳感器,可以檢測車輛的動態(tài)平衡,并根據(jù)預(yù)設(shè)程序調(diào)節(jié)光束角度,但同時也有一定的局限性,不能根據(jù)實際需要改變,需要人工干預(yù)。

如何調(diào)用android.mk 中的變量

變量

1

LOCAL_PATH := $(call my-dir)

1、解釋 LOCAL_PATH:

英文:如下圖

中文:Android.mk 開始必須定義變量 LOCAL_PATH,它用來指定源文件的位置

2、解釋 my-dir:

英文:如下圖

中文:編譯系統(tǒng)提供的'my-dir'宏函數(shù),被用來獲取當前的目錄。

2

include $(CLEAR_VARS)

1、解釋 CLEAR_VARS:

英文:如下圖

中文:編譯系統(tǒng)提供CLEAR_VARS變量,它指向了一個用來清除 LOCAL_ 開頭的變量(LOCAL_PATH除外)的makefile文件,需要它的原因是整個的編譯上下文中,所有的變量都是全局的,這樣就可以保證這些變量只在局部范圍內(nèi)起作用;

3

LOCAL_MODULE := hello-jni

1、解釋 LOCAL_MODULE:

英文:如下圖

中文:每一個android.mk文件中都必須定義一個模塊標示 LOCAL_MODULE , 這個名字必須是唯一的并且不包含任何的空格,編譯系統(tǒng)將自動的修改生成文件的前綴和后綴,如一個模塊為'foo'共享庫將被改為'libfoo.so';

重要提示,如果你的模塊名為'libfoo',編譯系統(tǒng)生成的文件為 'libfoo.so', 而不會去再增加前綴,當你使用的時候,android平臺會自動識別;

4

LOCAL_SRC_FILES := hello-jni.c

1、解釋 LOCAL_SRC_FILES

英文:如下圖

中文:LOCAL_SRC_FILES必須包含一系列的C/C++源文件,他們將會被建立和裝載到模塊中,注意你不應(yīng)該把需要包含的頭文件列在這里,因為建立系統(tǒng)將自動計算依賴項,只有源文件才能夠被編譯器識別;

2、解釋 LOCAL_CPP_EXTENSION

英文:如下圖

中文:注意默認的c++文件擴展名是'.cpp', LOCAL_CPP_EXTENSION可以用來指定不同類型的擴展名,不要忘了前面的點(如:'.cxx' 將起作用, 但是 'cxx'不會起作用).

如:LOCAL_CPP_EXTENSION := .cc .cpp

5

include $(BUILD_SHARED_LIBRARY)

1、解釋 BUILD_SHARED_LIBRARY

英文:如下圖

中文:‘建立系統(tǒng)’提供個變量 BUILD_SHARED_LIBRARY, 將根據(jù)在‘include’之前定義的所有的信息和LOCAL_前綴的變量,決定將建立什么,如何正確的生成共享庫;

2、解釋 BUILD_STATIC_LIBRARY

英文: 如下圖

中文: 同上,只不過它生成的是靜態(tài)庫

6

LOCAL_C_INCLUDES := $(NDK_ROOT)/sources/third_party/freetype

1、解釋 NDK_ROOT

中文:NDK_ROOT 代表的是ndk的根目錄,如我的是“D:\Android\android-ndk-r10”,這個例子是用來加載ndk根目錄下的freetype的頭文件路徑;

7

LOCAL_LDFLAGS := \

$(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libfreetype.a

1、解釋 LOCAL_LDFLAGS

中文:用來加載用戶自己的靜態(tài)庫(.a文件)

2、解釋 TARGET_ARCH_ABI

中文:當前的cpu/abi的類型,在鏈接不同類型的CPU_ABI時非常有用,如下圖

8

$(call import-add-path,$(LOCAL_PATH)/libsrc)

1、解釋:import-add-path

中文:增加自己的路徑到 NDK_MODULE_PATH 環(huán)境變量中,再非ndk根目錄/sources下編譯時會用到

9

LOCAL_SRC_FILES := hello-jni.c HelloJni.cpp

$(error $(LOCAL_SRC_FILES))

1、解釋:$

中文:變量前面加上"$"用來返回變量的值

2、解釋:$(error string)

中文:用來將string所對應(yīng)的內(nèi)容打印到控制臺,并且android.mk文件停止繼續(xù)進行編譯,如下圖

10

LOCAL_SRC_FILES := hello-jni.c HelloJni.cpp

$(warning $(LOCAL_SRC_FILES))

1、解釋:$(warning string)

中文:用來將string所對應(yīng)的內(nèi)容打印到控制臺,并且android.mk文件將繼續(xù)進行編譯,如下圖

11

LOCAL_PRELINK_MODULE := false

1、解釋 LOCAL_PRELINK_MODULE:

中文:關(guān)閉編譯器鏈接前進行代碼優(yōu)化,防止將沒有用到的代碼不添加到生成的庫中

12

LOCAL_EXPORT_CFLAGS := -DFOO=1

1、解釋 LOCAL_EXPORT_CFLAGS

定義這個變量來記錄一些列的 c/c++編譯標志,他們將會增加到其他的使用這個模塊的LOCAL_CFLAGS中,LOCAL_CFLAGS的功能相當于:LOCAL_STATIC_LIBRARIES 和 LOCAL_SHARED_LIBRARIES 這兩個變量;

13

LOCAL_STATIC_LIBRARIES := foo

1、解釋 LOCAL_STATIC_LIBRARIES

鏈接進來一個靜態(tài)庫的模塊,這里是靜態(tài)庫的模塊的名稱,而不是靜態(tài)庫的名稱

14

LOCAL_SHARED_LIBRARIES

鏈接進來一個動態(tài)庫的模塊,這里是動態(tài)庫的模塊的名稱,而不是靜態(tài)庫的名稱

15

LOCAL_EXPORT_CPPFLAGS

跟 LOCAL_EXPORT_CFLAGS 的功能一樣,但是它只能夠在c++中使用

16

LOCAL_EXPORT_C_INCLUDES

跟 LOCAL_EXPORT_CFLAGS,但是對于c的 include路徑,被調(diào)用模塊申明后,使用模塊可以很方便的使用包含的路徑

17

LOCAL_EXPORT_LDFLAGS

跟LOCAL_EXPORT_CFLAGS的作用一樣,但是僅僅是鏈接選項

18

LOCAL_EXPORT_LDLIBS

跟LOCAL_EXPORT_CFLAGS的作用類似,但是這個變量說明的系統(tǒng)庫,需要帶上 '-l' 前綴,他們將導(dǎo)入鏈接器選項,并追加到你的模塊的 LOCAL_LDLIBS

19

LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

允許未定義的符號

20

LOCAL_CFLAGS

.c文件對應(yīng)的編譯標記變量

21

LOCAL_LDLIBS

用來鏈接共享庫(so)或者執(zhí)行文件,使用系統(tǒng)的庫文件的時候,需要加上前綴 '-l',例如下面的例子,將告訴連接器生成的模塊的時候同時鏈接 /system/lib/libz.so

LOCAL_LDLIBS := -lz

注意:如果你在一個模塊中鏈接一個靜態(tài)庫,這個靜態(tài)庫是不會起作用的,同時ndk-build 會打印出一條警告消息

22

LOCAL_CFLAGS := -fvisibility=hidden

隱藏庫函數(shù)名

23

LOCAL_PROGUARD_ENABLED默認是打開的,不特別指定的話,就是起作用的,就可能做優(yōu)化。

LOCAL_PROGUARD_ENABLED:= disabled

Android.mk介紹(一)

在Linux下,可以通過Makefile來對源碼工程進行管理,Android.mk文件是Makefile的一小部分,它用來對Android程序進行編譯。Android.mk文件中描述了哪些C文件將被編譯且指明了如何編譯。Android.mk文件用來告知NDK Build 系統(tǒng)關(guān)于Source的信息。

1、編譯可執(zhí)行程序

2、編譯動態(tài)庫或靜態(tài)庫

3、預(yù)編譯文件(APK或Java庫)

以上三種是Android.mk的主要用法,我們寫mk文件時也就是以上三種目的。

首先看一個最簡單的Android.mk的例子:

講解:

每個Android.mk文件必須以定義 LOCAL_PATH 為開始。它用于在開發(fā)tree中查找源文件。

宏 my-dir 由Build System提供。返回包含Android.mk的目錄路徑。

CLEAR_VARS 變量由Build System提供。并指向一個指定的GNU Makefile,由它負責清理很多LOCAL_xxx.

例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理 LOCAL_PATH .

這個清理動作是必須的,因為所有的編譯控制文件由同一個GNU Make解析和執(zhí)行,其變量是全局的。所以清理后才能避免相互影響。

LOCAL_MODULE 模塊必須定義,以表示Android.mk中的每一個模塊。名字必須唯一且不包含空格。

Build System會自動添加適當?shù)那熬Y和后綴。例如,foo,要產(chǎn)生動態(tài)庫,則生成libfoo.so.

但請注意:如果模塊名被定為:libfoo.則生成libfoo.so. 不再加前綴。

LOCAL_SRC_FILES變量必須包含將要打包如模塊的C/C++ 源碼。

不必列出頭文件,build System 會自動幫我們找出依賴文件。

缺省的C++源碼的擴展名為.cpp. 也可以修改,通過LOCAL_CPP_EXTENSION。

BUILD_SHARED_LIBRARY:是Build System提供的一個變量,指向一個GNU Makefile Script。

它負責收集自從上次調(diào)用include $(CLEAR_VARS) 后的所有LOCAL_XXX信息。并決定編譯為什么。

BUILD_STATIC_LIBRARY:編譯為靜態(tài)庫。

BUILD_SHARED_LIBRARY :編譯為動態(tài)庫

BUILD_EXECUTABLE:編譯為Native C可執(zhí)行程序

BUILD_PACKAGE(既可以編apk,也可以編資源包文件,但是需要指定LOCAL_EXPORT_PACKAGE_RESOURCES:=true)

BUILD_JAVA_LIBRARY(Java共享庫)

BUILD_STATIC_JAVA_LIBRARY(java靜態(tài)庫)

Android源碼中有大量的mk文件,Android系統(tǒng)的編譯就是靠著這些mk文件的,所以學(xué)好是非常有必要的哦!

android.mk是在什么情況下生成的

當你需要使用JNI的時候,你需要創(chuàng)建一個native工程。Android.mk就是一個makefile配置文件,幫你把C/C++的代碼編譯成動態(tài)庫so的。

創(chuàng)建的方式有兩種:

在工程根目錄里手動創(chuàng)建一個目錄叫jni,在里面新建一個Android.mk,然后創(chuàng)建c,cpp文件,把他們配置到Android.mk里。

右鍵工程,選擇Android Tools-Add Native Support自動生成。

擴展資料:

創(chuàng)建Android庫

Android 庫在結(jié)構(gòu)上與 Android 應(yīng)用模塊相同??梢蕴峁?gòu)建應(yīng)用所需的一切內(nèi)容,包括源代碼、資源文件和 Android 清單。

不過,Android 庫將編譯到可以用作 Android 應(yīng)用模塊依賴項的 Android 歸檔 (AAR:Android Archive Resource) 文件,而不是在設(shè)備上運行的 APK。

與 JAR 文件不同,AAR 文件可以包含 Android 資源和一個清單文件,這樣,除了 Java 類與方法外,還可以捆綁布局和可繪制對象等共享資源。

庫模塊在以下情況下非常有用:

構(gòu)建使用某些相同組件(例如 Activity、服務(wù)或 UI 布局)的多個應(yīng)用。

構(gòu)建存在多個 APK 變體(例如免費版本和付費版本)的應(yīng)用并且需要在兩種版本中使用相同的核心組件。

參考資料來源:百度百科-Android


當前名稱:android.mk,androidmk99
網(wǎng)站路徑:http://weahome.cn/article/dseicej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部