Android NDK開發指南---Application.mk文件

      網友投稿 879 2022-05-29

      簡介:

      -----------------------------

      要將C\C++代碼編譯為SO文件,光有Android.mk文件還不行,還需要一個Application.mk文件。

      本文檔是描述你的Android應用程序中需要的本地模塊的Application.mk的語法使用,要明白如下。

      Application.mk目的是描述在你的應用程序中所需要的模塊(即靜態庫或動態庫)。

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

      (2)另一種方法是將其放在頂層的子目錄下:

      $NDK/apps目錄下,例如:

      $NDK/apps//Application.mk

      是一個簡稱,用于描述你的NDK編譯系統的應用程序(這個名字不會生成共享庫或者最終的包)

      下面是Application.mk中定義的幾個變量。

      APP_PROJECT_PATH

      這個變量是強制性的,并且會給出應用程序工程的根目錄的一個絕對路徑。這是用來復制或者安裝一個沒有任何版本限制的JNI庫,從而給APK生成工具一個詳細的路徑。

      APP_MODULES

      這個變量是可選的,如果沒有定義,NDK將由在Android.mk中聲明的默認的模塊編譯,并且包含所有的子文件(makefile文件)

      如果APP_MODULES定義了,它不許是一個空格分隔的模塊列表,這個模塊名字被定義在Android.mk文件中的LOCAL_MODULE中。注意NDK會自動計算模塊的依賴

      注意:NDK在R4開始改變了這個變量的行為,再次之前:

      - 在您的Application.mk中,該變量是強制的

      - 必須明確列出所有需要的模塊

      APP_OPTIM

      這個變量是可選的,用來定義“release”或"debug"。在編譯您的應用程序模塊的時候,可以用來改變優先級。

      “release”模式是默認的,并且會生成高度優化的二進制代碼。"debug"模式生成的是未優化的二進制代碼,但可以檢測出很多的BUG,可以用于調試。

      注意:如果你的應用程序是可調試的(即,如果你的清單文件中設置了android:debuggable的屬性是"true")。默認的是"debug"而不是"release"。這可以通過設置APP_OPTIM為"release"來將其覆蓋。

      注意:可以在"release"和"debug"模式下一起調試,但是"release"模式編譯后將會提供更少的BUG信息。在我們清楚BUG的過程中,有一些變量被優化了,或者根本就無法被檢測出來,代碼的重新排序會讓這些帶阿彌變得更加難以閱讀,并且讓這些軌跡更加不可靠。

      APP_CFLAGS

      當編譯模塊中有任何C文件或者C++文件的時候,C編譯器的信號就會被發出。這里可以在你的應用中需要這些模塊時,進行編譯的調整,這樣就不許要直接更改Android.mk為文件本身了

      重要警告:+++++++++++++++++++++++++++++++++++++++++++++++ + +

      +

      + 在這些編制中,所有的路徑都需要于最頂層的NDK目錄相對應。

      + 例如,如果您有以下設置:

      +

      +sources/foo/Android.mk

      +sources/bar/ Android.mk

      + 編譯過程中,若要在foo/Android.mk中指定你要添加的路徑到bar源代碼中,

      + 你應該使用

      + APP_CFLAGS += -Isources/bar

      + 或者交替:

      + APP_CFLAGS += -I $(LOCAL_PATH )/../bar

      +

      + 使用'-l../bar/'將不會工作,以為它將等同于"-l$NDK_ROOT/../bar"

      ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++

      注意:在Android的NDK 1.5_r1,只適用于C源文件,而不適合C++。

      這已得到糾正,以建立完整相匹配的Andr oid系統。

      APP_CXXFLAGS

      APP_CPPFLAGS的別名,已經考慮在將在未來的版本中廢除了

      APP_CPPFLAGS

      當編譯的只有C++源文件的時候,可以通過這個C++編譯器來設置

      注意:在Android NDK-1.5_r1中,這個標志可以應用于C和C++源文件中。并且得到了糾正,以建立完整的與系統相匹配的Android編譯系統。你先可也可以使用APP_CFLAGS來應用于C或者C++源文件中。

      建議使用APP_CFLAGS

      APP_BUILD_SCRIPT

      默認情況下,NDK編譯系統會在$(APP_PROJECT_PATH)/jni目錄下尋找名為Android.mk文件:

      $(APP_PROJECT_PATH)/jni/Android.mk

      如果你想覆蓋此行為,你可以定義APP_BUILD_SCRIPT來指定一個備用的編譯腳本。一個非絕對路徑總是被解釋為相對于NDK的頂層的目錄。

      APP_ABI

      默認情況下,NDK的編譯系統會為"armeabi"ABI生成機器代碼。喜愛哪個相當于一個基于CPU可以進行浮點運算的ARMv5TE。你可以使用APP_ABI來選擇一個不同的ABI。

      比如:為了在ARMv7的設備上支持硬件FPU指令。可以使用

      APP_ABI := armeabi-v7a

      或者為了支持IA-32指令集,可以使用

      APP_ABI := x86

      或者為了同時支持這三種,可以使用

      APP_ABI := armeabi armeabi-v7a x86

      APP_STL

      默認情況下,NDK的編譯系統為最小的C++運行時庫(/system/lib/libstdc++.so)提供C++頭文件。

      然而,NDK的C++的實現,可以讓你使用或者鏈接在自己的應用程序中。

      例如:

      Android NDK開發指南---Application.mk文件

      APP_STL := stlport_static??? --> static STLport library

      APP_STL := stlport_shared??? --> shared STLport library

      APP_STL := system??????????? --> default C++ runtime library

      Android C++

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:戶外共享wifi,搭建信號橋(網橋)~只需幾步操作~
      下一篇:2022CANN訓練營新手模型開發課學習筆記
      相關文章
      亚洲欧洲综合在线| 日本亚洲视频在线| 久久精品九九亚洲精品| 亚洲天堂一区二区三区四区| 婷婷精品国产亚洲AV麻豆不片| 亚洲色婷婷综合久久| 国产精品亚洲综合一区| 亚洲色婷婷综合开心网| 亚洲国产91精品无码专区| 午夜亚洲国产成人不卡在线| 日韩亚洲精品福利| mm1313亚洲精品无码又大又粗| WWW亚洲色大成网络.COM| 亚洲综合久久1区2区3区| 亚洲网址在线观看| 亚洲国产精品久久久久秋霞影院 | 亚洲丝袜美腿视频| 久久久久亚洲AV成人无码网站| 久久精品夜色国产亚洲av| 久久国产精品亚洲综合| 亚洲日本va午夜中文字幕一区| 亚洲黄色一级毛片| 亚洲国产成人片在线观看| 亚洲av午夜福利精品一区| 亚洲AV无码精品无码麻豆| 亚洲人成亚洲精品| 亚洲理论片在线中文字幕| 亚洲午夜一区二区电影院| 亚洲免费观看网站| 一本色道久久88—综合亚洲精品| 亚洲欧美自偷自拍另类视| 久久久亚洲精华液精华液精华液 | 香蕉视频亚洲一级| 亚洲国产精品一区二区第四页| 国产精品V亚洲精品V日韩精品| 亚洲夜夜欢A∨一区二区三区| 久久精品国产亚洲夜色AV网站| 久久精品国产亚洲av麻豆色欲| 亚洲熟妇无码八V在线播放 | 一本色道久久88亚洲精品综合| 亚洲高清一区二区三区电影|