在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ application.mk
安裝 NDK
application.mk
調(diào)試
Android.mk 文件
Hello JNI 示例
概述
Box2D 的 Android NDK 實(shí)現(xiàn)
TwoLibs 示例

application.mk

配合 android.mk 使用的 make 文件還有一個(gè) application.mk ,大部分情況無(wú)需修改該文件,下面也來(lái)自網(wǎng)絡(luò)翻譯

Application.mk 文件

簡(jiǎn)介:


要將 C\C++ 代碼編譯為 SO 文件,光有 Android.mk 文件還不行,還需要一個(gè) Application.mk 文件。 本文檔是描述你的 Android 應(yīng)用程序中需要的本地模塊的 Application.mk 的語(yǔ)法使用,要明白如下。

Application.mk 目的是描述在你的應(yīng)用程序中所需要的模塊(即靜態(tài)庫(kù)或動(dòng)態(tài)庫(kù))。

Application.mk 文件通常被放置在 $PROJECT/jni/Application.mk 下,$PROJECT 指的是您的項(xiàng)目。

另一種方法是將其放在頂層的子目錄下: $NDK/apps 目錄下,例如: $NDK/apps//Application.mk

是一個(gè)簡(jiǎn)稱,用于描述你的 NDK 編譯系統(tǒng)的應(yīng)用程序(這個(gè)名字不會(huì)生成共享庫(kù)或者最終的包) 下面是 Application.mk 中定義的幾個(gè)變量。 APP_PROJECT_PATH 這個(gè)變量是強(qiáng)制性的,并且會(huì)給出應(yīng)用程序工程的根目錄的一個(gè)絕對(duì)路徑。這是用來(lái)復(fù)制或者安裝一個(gè)沒(méi)有任何版本限制的 JNI 庫(kù),從而給 APK 生成工具一個(gè)詳細(xì)的路徑。 APP_MODULES 這個(gè)變量是可選的,如果沒(méi)有定義,NDK 將由在 Android.mk 中聲明的默認(rèn)的模塊編譯,并且包含所有的子文件(makefile 文件) 如果 APP_MODULES 定義了,它不許是一個(gè)空格分隔的模塊列表,這個(gè)模塊名字被定義在 Android.mk 文件中的 LOCAL_MODULE 中。注意 NDK 會(huì)自動(dòng)計(jì)算模塊的依賴 注意:NDK 在 R4 開(kāi)始改變了這個(gè)變量的行為,再次之前: - 在您的Application.mk中,該變量是強(qiáng)制的 - 必須明確列出所有需要的模塊 APP_OPTIM 這個(gè)變量是可選的,用來(lái)定義“release”或”debug”。在編譯您的應(yīng)用程序模塊的時(shí)候,可以用來(lái)改變優(yōu)先級(jí)。 “release”模式是默認(rèn)的,并且會(huì)生成高度優(yōu)化的二進(jìn)制代碼。”debug”模式生成的是未優(yōu)化的二進(jìn)制代碼,但可以檢測(cè)出很多的 BUG,可以用于調(diào)試。 注意:如果你的應(yīng)用程序是可調(diào)試的(即,如果你的清單文件中設(shè)置了 android:debuggable 的屬性是”true”)。默認(rèn)的是”debug”而不是”release”。這可以通過(guò)設(shè)置 APP_OPTIM 為”release”來(lái)將其覆蓋。 注意:可以在”release”和”debug”模式下一起調(diào)試,但是”release”模式編譯后將會(huì)提供更少的 BUG 信息。在我們清楚 BUG 的過(guò)程中,有一些變量被優(yōu)化了,或者根本就無(wú)法被檢測(cè)出來(lái),代碼的重新排序會(huì)讓這些帶阿彌變得更加難以閱讀,并且讓這些軌跡更加不可靠。 APP_CFLAGS 當(dāng)編譯模塊中有任何 C 文件或者 C++文件的時(shí)候,C 編譯器的信號(hào)就會(huì)被發(fā)出。這里可以在你的應(yīng)用中需要這些模塊時(shí),進(jìn)行編譯的調(diào)整,這樣就不許要直接更改 Android.mk 為文件本身了 重要警告:+++++++++++++++++++++++++++++++++++++++++++++++ + + + + 在這些編制中,所有的路徑都需要于最頂層的 NDK 目錄相對(duì)應(yīng)。 + 例如,如果您有以下設(shè)置: + +sources/foo/Android.mk +sources/bar/ Android.mk + 編譯過(guò)程中,若要在 foo/Android.mk 中指定你要添加的路徑到 bar 源代碼中, + 你應(yīng)該使用 + APP_CFLAGS += -Isources/bar + 或者交替: + APP_CFLAGS += -I $(LOCAL_PATH )/../bar + + 使用’-l../bar/’將不會(huì)工作,以為它將等同于”-l$NDK_ROOT/../bar” ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ 注意:在 Android 的 NDK 1.5_r1,只適用于 C 源文件,而不適合 C++。 這已得到糾正,以建立完整相匹配的 Andr??oid 系統(tǒng)。 APP_CXXFLAGS APP_CPPFLAGS 的別名,已經(jīng)考慮在將在未來(lái)的版本中廢除了 APP_CPPFLAGS 當(dāng)編譯的只有 C++源文件的時(shí)候,可以通過(guò)這個(gè) C++編譯器來(lái)設(shè)置 注意:在 Android NDK-1.5_r1 中,這個(gè)標(biāo)志可以應(yīng)用于 C 和 C++源文件中。并且得到了糾正,以建立完整的與系統(tǒng)相匹配的 Android 編譯系統(tǒng)。你先可也可以使用 APP_CFLAGS 來(lái)應(yīng)用于 C 或者 C++源文件中。 建議使用 APP_CFLAGS APP_BUILD_SCRIPT 默認(rèn)情況下,NDK 編譯系統(tǒng)會(huì)在 $(APP_PROJECT_PATH)/jni 目錄下尋找名為 Android.mk 文件: $(APP_PROJECT_PATH)/jni/Android.mk 如果你想覆蓋此行為,你可以定義 APP_BUILD_SCRIPT 來(lái)指定一個(gè)備用的編譯腳本。一個(gè)非絕對(duì)路徑總是被解釋為相對(duì)于 NDK 的頂層的目錄。 APP_ABI 默認(rèn)情況下,NDK 的編譯系統(tǒng)回味”armeabi”ABI生成機(jī)器代碼。喜愛(ài)哪個(gè)相當(dāng)于一個(gè)基于 CPU 可以進(jìn)行浮點(diǎn)運(yùn)算的 ARMv5TE。你可以使用 APP_ABI 來(lái)選擇一個(gè)不同的 ABI。 比如:為了在 ARMv7 的設(shè)備上支持硬件 FPU 指令??梢允褂? APP_ABI := armeabi-v7a 或者為了支持 IA-32 指令集,可以使用 APP_ABI := x86 或者為了同時(shí)支持這三種,可以使用 APP_ABI := armeabi armeabi-v7a x86 APP_STL 默認(rèn)情況下,NDK 的編譯系統(tǒng)為最小的 C++運(yùn)行時(shí)庫(kù)(/system/lib/libstdc++.so)提供 C++頭文件。 然而,NDK 的 C++的實(shí)現(xiàn),可以讓你使用或著鏈接在自己的應(yīng)用程序中。 例如: APP_STL := stlport_static –> static STLport library APP_STL := stlport_shared –> shared STLport library APP_STL := system –> default C++ runtime library 下面是一個(gè) Application.mk 文件的示例: ``` APP_PROJECT_PATH := ```
上一篇:Android.mk 文件下一篇:Hello JNI 示例