Android程式編譯原理之淺析(NDK編譯)

來源:互聯網
上載者:User

標籤:

原文連結 http://blog.csdn.net/nodeathphoenix/article/details/7684230

Android build/core下的編譯指令碼裡會用到變數NDK_ROOT和NDK_PROJECT_PATH。但是這兩個變數你都不是必須顯式地設定對應環境變數。因為如果沒有定義NDK_ROOT,指令碼裡拿字串"build/core"去匹配當前指令碼的全路徑,截取該字串前面的部分即是NDK_ROOT了。如果定義了NDK_PROJECT_PATH,則指令碼會在該路徑下去找jni目錄下的 application.mk 和 android.mk;如果沒有定義NDK_PROJECT_PATH,則指令碼會尋找"jni/Android.mk"來匹配得到NDK_PROJECT_PATH,然後在NDK_PROJECT_PATH目錄下找到application.mk 和 android.mk。如果application.mk中的APP_BUILD_SCRIPT沒有指定Android.mk的路徑,則在application.mk當前所在的目錄下找Android.mk;否則的話,就直接根據APP_BUILD_SCRIPT來找Android.mk。

Android下面編譯器,除了Android.mk之外, Application.mk也是必須要的。 通過查看buid/core/build-local.mk可知道,如果你沒有寫Application.mk,它會預設地使用build/core/default-application.mk,然後根據其中的APP_BUILD_SCRIPT調用Android.mk去編譯.所以,如果剛好你不需要在Application.mk中去指定cpu的架構等資訊,沒有寫Application.mk你也能正確編譯。

Application.mk 中的APP_BUILD_SCRIPT是個可選的變數,可以根據需要來決定是否設定具體的值。正因為這個特性,我們可以根據Application.mk的位置分為$Project/jni/ 和 $NDK_ROOT/jni/中兩種情況。

如果沒有指定環境變數NDK_PROJECT_PATH,編譯器會在當前執行編譯命令的目錄下通過匹配jni/Android.mk的方式來得到NDK_PROJECT_PATH。所以執行的時候只能在$Project當前應用程式的目錄下執行$NDK_ROOT/ndk-build來編譯。

Application.mk可以和Android.mk一起放在你的$Project/jni/目錄下,如果Application.mk中沒有指定APP_BUILD_SCRIPT變數的值,編譯器會自動在make的目前的目錄下的jni目錄下去找Android.mk. 如果Application.mk中指定了APP_BUILD_SCRIPT變數的值,則編譯器會按照此變數的值去讀Android.mk.所以。一般對於Application.mk和Android.mk都在$Project/jni/目錄下的情況,我們沒有必要在Application.mk中指定APP_BUILD_SCRIPT,直接讓編譯器讀取$Project/jni/目錄下的Android.mk就可以了。

對於Application.mk在$NDK_ROOT/jni/下的情況,則必須要指定APP_BUILD_SCRIPT,APP_PROJECT_PATH也是可選的,同時必須要指定環境變數NDK_PROJECT_PATH---編譯器根據此環境變數找到$NDK_ROOT/jni/Application.mk。

注意APP_PROJECT_PATH對於"$PROJECT/jni/Application.mk"檔案是可選的,但對於"$NDK/apps/<myapp>/Application.mk"是強制需要的。

Android程式編譯原理之淺析(NDK編譯)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.