国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android NDK開(kāi)發(fā)詳解之Application.mk探秘

這篇具有很好參考價(jià)值的文章主要介紹了Android NDK開(kāi)發(fā)詳解之Application.mk探秘。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

本文檔介紹 ndk-build 所使用的 Application.mk 構(gòu)建文件。

我們建議先閱讀概念頁(yè)面,然后再閱讀本頁(yè)面。

概覽

Application.mk 指定 ndk-build 的項(xiàng)目級(jí)設(shè)置。默認(rèn)情況下,它位于應(yīng)用項(xiàng)目目錄中的 jni/Application.mk 下。
注意:其中許多參數(shù)也具有模塊等效項(xiàng)。例如,APP_CFLAGS 對(duì)應(yīng)于 LOCAL_CFLAGS。無(wú)論何種情況下,特定于模塊的選項(xiàng)都將優(yōu)先于應(yīng)用級(jí)選項(xiàng)。對(duì)于標(biāo)記,兩者都使用,但特定于模塊的標(biāo)記將后出現(xiàn)在命令行中,因此它們可能會(huì)替換項(xiàng)目級(jí)設(shè)置。

變量

APP_ABI

默認(rèn)情況下,NDK 構(gòu)建系統(tǒng)會(huì)為所有非棄用 ABI 生成代碼。您可以使用 APP_ABI 設(shè)置為特定 ABI 生成代碼。表 1 顯示了不同指令集的 APP_ABI 設(shè)置。

Android NDK開(kāi)發(fā)詳解之Application.mk探秘,學(xué)習(xí)交流,android,java,kotlin,數(shù)據(jù)結(jié)構(gòu),c++

您也可以指定多個(gè)值,方法是將它們放在同一行上,中間用空格分隔。例如:


APP_ABI := armeabi-v7a arm64-v8a x86

注意:Gradle 的 externalNativeBuild 會(huì)忽略 APP_ABI。請(qǐng)?jiān)?splits 塊內(nèi)部使用 abiFilters 塊或(如果使用的是“多個(gè) APK”)abi 塊。

如需查看所有受支持 ABI 的列表以及詳細(xì)了解其用法和限制,請(qǐng)參閱 Android ABI。

APP_ASFLAGS

要傳遞給項(xiàng)目中每個(gè)匯編源文件(.s 和 .S 文件)的編譯器的標(biāo)記。
注意:ASFLAGS 與 ASMFLAGS 不同。后者專(zhuān)用于 YASM 源文件(請(qǐng)參閱關(guān)于 APP_ASMFLAGS 的部分)。

APP_ASMFLAGS

對(duì)于所有 YASM 源文件(.asm,僅限 x86/x86_64),要傳遞給 YASM 的標(biāo)記。

APP_BUILD_SCRIPT

默認(rèn)情況下,ndk-build 假定 Android.mk 文件位于項(xiàng)目根目錄的相對(duì)路徑 jni/Android.mk 中。

如需從其他位置加載 Android.mk 文件,請(qǐng)將 APP_BUILD_SCRIPT 設(shè)置為 Android.mk 文件的絕對(duì)路徑。
注意:Gradle 的 externalNativeBuild 將根據(jù) externalNativeBuild.ndkBuild.path 變量自動(dòng)配置此路徑。

APP_CFLAGS

要為項(xiàng)目中的所有 C/C++ 編譯傳遞的標(biāo)記。
注意:Include 路徑應(yīng)使用 LOCAL_C_INCLUDES 而不是顯式 -I 標(biāo)記。

另請(qǐng)參閱:APP_CONLYFLAGS、APP_CPPFLAGS。

APP_CLANG_TIDY

若要為項(xiàng)目中的所有模塊啟用 clang-tidy,請(qǐng)將此標(biāo)記設(shè)置為“True”。默認(rèn)處于停用狀態(tài)。

APP_CLANG_TIDY_FLAGS

要為項(xiàng)目中的所有 clang-tidy 執(zhí)行傳遞的標(biāo)記。

APP_CONLYFLAGS

要為項(xiàng)目中的所有 C 編譯傳遞的標(biāo)記。這些標(biāo)記不會(huì)用于 C++ 代碼。

另請(qǐng)參閱:APP_CFLAGS、APP_CPPFLAGS。

APP_CPPFLAGS

要為項(xiàng)目中的所有 C++ 編譯傳遞的標(biāo)記。這些標(biāo)記不會(huì)用于 C 代碼。

另請(qǐng)參閱:APP_CFLAGS、APP_CONLYFLAGS。

APP_CXXFLAGS

注意:APP_CPPFLAGS 應(yīng)優(yōu)先于 APP_CXXFLAGS。

與 APP_CPPFLAGS 相同,但在編譯命令中將出現(xiàn)在 APP_CPPFLAGS 之后。例如:


APP_CPPFLAGS := -DFOO
APP_CXXFLAGS := -DBAR

以上配置將導(dǎo)致編譯命令類(lèi)似于 clang++ -DFOO -DBAR,而不是 clang++ -DBAR -DFOO。

APP_DEBUG

若要構(gòu)建可調(diào)試的應(yīng)用,請(qǐng)將此標(biāo)記設(shè)置為“True”。

APP_LDFLAGS

關(guān)聯(lián)可執(zhí)行文件和共享庫(kù)時(shí)要傳遞的標(biāo)記。
注意:這些標(biāo)記對(duì)靜態(tài)庫(kù)沒(méi)有影響。不會(huì)關(guān)聯(lián)靜態(tài)庫(kù)。

APP_MANIFEST

AndroidManifest.xml 文件的絕對(duì)路徑。

默認(rèn)情況下將使用 $(APP_PROJECT_PATH)/AndroidManifest.xml)(如果存在)。
注意:使用 externalNativeBuild 時(shí),Gradle 不會(huì)設(shè)置此值。

APP_MODULES

要構(gòu)建的模塊的顯式列表。此列表的元素是模塊在 Android.mk 文件的 LOCAL_MODULE 中顯示的名稱(chēng)。

默認(rèn)情況下,ndk-build 將構(gòu)建所有共享庫(kù)、可執(zhí)行文件及其依賴(lài)項(xiàng)。僅當(dāng)項(xiàng)目使用靜態(tài)庫(kù)、項(xiàng)目?jī)H包含靜態(tài)庫(kù)或者在 APP_MODULES 中指定了靜態(tài)庫(kù)時(shí),才會(huì)構(gòu)建靜態(tài)庫(kù)。
注意:將不會(huì)構(gòu)建導(dǎo)入的模塊(在使用 $(call import-module) 導(dǎo)入的構(gòu)建腳本中定義的模塊),除非要在 APP_MODULES 中構(gòu)建或列出的模塊依賴(lài)導(dǎo)入的模塊。

APP_OPTIM

將此可選變量定義為 release 或 debug。默認(rèn)情況下,將構(gòu)建發(fā)布二進(jìn)制文件。

發(fā)布模式會(huì)啟用優(yōu)化,并可能生成無(wú)法與調(diào)試程序一起使用的二進(jìn)制文件。調(diào)試模式會(huì)停用優(yōu)化,以便可以使用調(diào)試程序。

請(qǐng)注意,您可以調(diào)試發(fā)布二進(jìn)制文件或調(diào)試二進(jìn)制文件。但是,發(fā)布二進(jìn)制文件在調(diào)試期間提供的信息較少。例如,變量可能會(huì)被優(yōu)化掉,導(dǎo)致無(wú)法檢查代碼。此外,代碼重新排序會(huì)使單步調(diào)試代碼變得更加困難;堆棧軌跡更可能不可靠。

在應(yīng)用清單的 標(biāo)記中聲明 android:debuggable 將導(dǎo)致此變量默認(rèn)為 debug,而不是 release。通過(guò)將 APP_OPTIM 設(shè)置為 release 可替換此默認(rèn)值。
注意:使用 externalNativeBuild 進(jìn)行構(gòu)建時(shí),Android Studio 將根據(jù)您的構(gòu)建風(fēng)格適當(dāng)?shù)卦O(shè)置此標(biāo)記。

APP_PLATFORM

APP_PLATFORM 會(huì)聲明構(gòu)建此應(yīng)用所面向的 Android API 級(jí)別,并對(duì)應(yīng)于應(yīng)用的 minSdkVersion。

如果未指定,ndk-build 將以 NDK 支持的最低 API 級(jí)別為目標(biāo)。最新 NDK 支持的最低 API 級(jí)別總是足夠低,可以支持幾乎所有有效設(shè)備。
警告:將 APP_PLATFORM 設(shè)置為高于應(yīng)用的 minSdkVersion 可能會(huì)生成一個(gè)無(wú)法在舊設(shè)備上運(yùn)行的應(yīng)用。在大多數(shù)情況下,庫(kù)將無(wú)法加載,因?yàn)樗鼈円昧嗽谂f設(shè)備上不可用的符號(hào)。

例如,值 android-16 指定庫(kù)使用在 Android 4.1(API 級(jí)別 16)以前的版本中不可用的 API,并且無(wú)法在運(yùn)行較低平臺(tái)版本的設(shè)備上使用。如需查看平臺(tái)名稱(chēng)和相應(yīng) Android 系統(tǒng)映像的完整列表,請(qǐng)參閱 Android NDK 原生 API。

使用 Gradle 和 externalNativeBuild 時(shí),不應(yīng)直接設(shè)置此參數(shù)。而應(yīng)在模塊級(jí)別 build.gradle 文件的 defaultConfig 或 productFlavors 塊中設(shè)置 minSdkVersion 屬性。這樣就能確保只有在運(yùn)行足夠高 Android 版本的設(shè)備上安裝的應(yīng)用才能使用您的庫(kù)。

請(qǐng)注意,NDK 不包含 Android 每個(gè) API 級(jí)別的庫(kù),省略了不包含新的原生 API 的版本以節(jié)省 NDK 中的空間。ndk-build 按以下優(yōu)先級(jí)降序使用 API:

    匹配 APP_PLATFORM 的平臺(tái)版本。
    低于 APP_PLATFORM 的下一個(gè)可用 API 級(jí)別。例如,APP_PLATFORM 為 android-20 時(shí),將使用 android-19,因?yàn)?android-20 中沒(méi)有新的原生 API。
    NDK 支持的最低 API 級(jí)別。
APP_PROJECT_PATH

項(xiàng)目根目錄的絕對(duì)路徑。
APP_SHORT_COMMANDS

LOCAL_SHORT_COMMANDS 的項(xiàng)目級(jí)等效項(xiàng)。如需了解詳情,請(qǐng)參閱 Android.mk 中有關(guān) LOCAL_SHORT_COMMANDS 的文檔。

APP_STL

用于此應(yīng)用的 C++ 標(biāo)準(zhǔn)庫(kù)。

默認(rèn)情況下使用 system STL。其他選項(xiàng)包括 c++_shared、c++_static 和 none。請(qǐng)參閱 NDK C++ 運(yùn)行時(shí)和功能。

APP_STRIP_MODE

要為此應(yīng)用中的模塊傳遞給 strip 的參數(shù)。默認(rèn)為 --strip-unneeded。若要避免剝離模塊中的所有二進(jìn)制文件,請(qǐng)將其設(shè)置為 none。如需了解其他剝離模式,請(qǐng)參閱剝離文檔。

APP_THIN_ARCHIVE

要為項(xiàng)目中的所有靜態(tài)庫(kù)使用瘦歸檔,請(qǐng)將此變量設(shè)置為“True”。如需了解詳情,請(qǐng)參閱 Android.mk 中有關(guān) LOCAL_THIN_ARCHIVE 的文檔。

APP_WRAP_SH

要包含在此應(yīng)用中的 wrap.sh 文件的路徑。

每個(gè) ABI 都存在此變量的變體,ABI 通用變體也是如此:


    APP_WRAP_SH
    APP_WRAP_SH_armeabi-v7a
    APP_WRAP_SH_arm64-v8a
    APP_WRAP_SH_x86
    APP_WRAP_SH_x86_64

注意:APP_WRAP_SH_ 可能無(wú)法與 APP_WRAP_SH 結(jié)合使用。如果有任何 ABI 使用特定于 ABI 的 wrap.sh,所有 ABI 都必須使用該 wrap.sh。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-713268.html

到了這里,關(guān)于Android NDK開(kāi)發(fā)詳解之Application.mk探秘的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android NDK開(kāi)發(fā)詳解之JNI中的庫(kù)文件

    簡(jiǎn)介 本部分簡(jiǎn)要介紹了 NDK 的工作原理。Android NDK 是一組使您能將 C 或 C++(“原生代碼”)嵌入到 Android 應(yīng)用中的工具。能夠在 Android 應(yīng)用中使用原生代碼對(duì)于想執(zhí)行以下一項(xiàng)或多項(xiàng)操作的開(kāi)發(fā)者特別有用: 工作原理 本部分介紹了在為 Android 構(gòu)建原生應(yīng)用時(shí)使用的主要組件

    2024年02月06日
    瀏覽(26)
  • Android NDK開(kāi)發(fā)詳解之調(diào)試和性能分析的系統(tǒng)跟蹤概覽

    Android NDK開(kāi)發(fā)詳解之調(diào)試和性能分析的系統(tǒng)跟蹤概覽

    “系統(tǒng)跟蹤”就是記錄短時(shí)間內(nèi)的設(shè)備活動(dòng)。系統(tǒng)跟蹤會(huì)生成跟蹤文件,該文件可用于生成系統(tǒng)報(bào)告。此報(bào)告有助于您了解如何最有效地提升應(yīng)用或游戲的性能。 有關(guān)進(jìn)行跟蹤和性能分析的全面介紹,請(qǐng)參閱 Perfetto 文檔中的跟蹤 101 頁(yè)面。 Android 平臺(tái)提供了多種不同的跟蹤記

    2024年02月06日
    瀏覽(20)
  • Android NDK開(kāi)發(fā)詳解之針對(duì)中間件供應(yīng)商的建議

    分發(fā)使用 NDK 構(gòu)建的中間件會(huì)引發(fā)其他問(wèn)題,但應(yīng)用開(kāi)發(fā)者無(wú)需對(duì)此感到擔(dān)心。預(yù)構(gòu)建庫(kù)會(huì)為用戶(hù)提供一些實(shí)現(xiàn)選項(xiàng)。 選擇 API 級(jí)別和 NDK 版本 您的用戶(hù)無(wú)法使用低于您的級(jí)別的 minSdkVersion。如果用戶(hù)的應(yīng)用需要在 API 21 上運(yùn)行,您就無(wú)法針對(duì) API 24 構(gòu)建應(yīng)用。您可以針對(duì)低于

    2024年02月07日
    瀏覽(23)
  • Android NDK開(kāi)發(fā)詳解之編寫(xiě)C/C++代碼中的Android SDK 版本屬性)

    本部分將討論如何使用 NDK 提供的庫(kù)。 注意:有關(guān)導(dǎo)入預(yù)構(gòu)建庫(kù)(未包含在 NDK 中的庫(kù))的指南已移至各個(gè)構(gòu)建系統(tǒng)的相關(guān)部分。請(qǐng)根據(jù)您的項(xiàng)目需求參閱 CMake 或 ndk-build 指南。 文中說(shuō)明了 NDK 提供的 C ++ 運(yùn)行時(shí),并介紹了 NDK 提供的其他庫(kù)(例如 OpenGL ES 和 OpenSL ES)以及支持

    2024年02月07日
    瀏覽(41)
  • Android.mk開(kāi)發(fā)模板

    Android.mk開(kāi)發(fā)模板

    今天簡(jiǎn)單寫(xiě)了一個(gè) Android.mk 的示例模板,供初學(xué)者參考。 本模板主要給大家示例 Android NDK 開(kāi)發(fā)中的如下幾個(gè)問(wèn)題: 如何自動(dòng)添加需要編譯的源文件列表 如何添加第三方靜態(tài)庫(kù)、動(dòng)態(tài)庫(kù)的依賴(lài) 如何構(gòu)造一個(gè)完整的NDK工程框架 假設(shè)我們的項(xiàng)目依賴(lài) libmath.a, libjson.a, libffmpeg.so 這

    2024年02月11日
    瀏覽(19)
  • Android.mk和Android.bp的區(qū)別和轉(zhuǎn)換詳解

    Android.mk和Android.bp的區(qū)別和轉(zhuǎn)換詳解

    簡(jiǎn)單的說(shuō): Android.mk和Android.bp都是用來(lái)編譯出類(lèi)庫(kù).jar,應(yīng)用文件.apk,動(dòng)態(tài)庫(kù).so,靜態(tài)庫(kù).a等等作用。 Android.mk就是一個(gè)GNU make語(yǔ)法的腳本文件。 Android.bp文件是Android 7.0及更高版本中引入的一種構(gòu)建腳本文件,是使用Starlark語(yǔ)法編寫(xiě)的,它是一種基于Python的輕量級(jí)腳本語(yǔ)言。 他們

    2024年04月28日
    瀏覽(17)
  • android使用ndk開(kāi)發(fā)

    ndk sdk要單獨(dú)下載和android sdk不同 https://developer.android.google.cn/ndk/downloads?hl=zh-cn 解壓后添加ndk路徑到path即可 gradle下載太慢使用國(guó)內(nèi)鏡像 distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-6.7.1-all.zip 執(zhí)行g(shù)radlew.bat gradlew //檢查環(huán)境,下載gradle依賴(lài)項(xiàng) gradlew tasks //查看可執(zhí)行任務(wù) gr

    2024年01月17日
    瀏覽(26)
  • Android-NDK開(kāi)發(fā)——基本概念

    在Android開(kāi)發(fā)中,有時(shí)候出于安全,性能,代碼共用的考慮,需要使用C/C++編寫(xiě)的庫(kù)。雖然在現(xiàn)代化工具鏈的支持下,這個(gè)工作的難度已經(jīng)大大降低,但是畢竟萬(wàn)事開(kāi)頭難,初學(xué)者往往還是會(huì)遇到很多不可預(yù)測(cè)的問(wèn)題。本篇就是基于此背景下寫(xiě)的一份簡(jiǎn)陋指南,希望能對(duì)剛開(kāi)始編

    2024年02月09日
    瀏覽(22)
  • 使用vscode開(kāi)發(fā)android ndk的思路

    使用vscode開(kāi)發(fā)android ndk的思路

    首先下載Visual Studio Code和Android Studio 選擇對(duì)應(yīng)系統(tǒng)的軟件最新版本,下載完成后安裝即可 ①.?Visual Studio Code? 打開(kāi)vscode,按下Ctrl + Shift + X進(jìn)入拓展,在搜索框內(nèi)輸入C/C++ Extension Pack,然后選擇安裝(install),安裝完成后如下所示(如已經(jīng)安裝則忽略) ? ?②.Android Studio 打開(kāi)

    2024年02月03日
    瀏覽(26)
  • Android JNI系列詳解之ndk-build工具的使用

    Android JNI系列詳解之ndk-build工具的使用

    一、Android項(xiàng)目中使用ndk-build工具編譯庫(kù)文件 之前介紹過(guò)CMake編譯工具的使用,今天介紹一種ndk自帶的編譯工具ndk-build的使用。 ndk-build目前主要有兩種配置使用方式: ?如上圖所示,第一種方式是Android.mk+Application.mk+gradle的方式生成庫(kù)文件;第二種方式是Android.mk+Application.mk+命

    2024年02月10日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包