Windows Android NDK Compile —–android-ndk-r6b

來源:互聯網
上載者:User

  NDK : http://developer.android.com/sdk/ndk/index.html

  Cygwin :http://www.cygwin.com

 

1 Cygwin 安裝

   Cygwin安裝就很簡單啦,直接下一步就行。唯一需要注意的就是,因為我們在cygwin中編譯ndk的時候需要make和gcc,所以我們在Select Packages 這一步的時候要選擇Devel 選項為Install(預設為不安裝的,Defatult狀態)。順便也要把vim所在的包選擇為isntall,因為後續我們在cygwin中需要編輯檔案。vim所對應的包名字呀? 不記得了,直接在尋找裡面輸入vim就能看到對應的package名字了。

 

2 NDK 安裝

   更簡單了,只需要將下載的檔案解壓縮到任意目錄就可以了。

 

3     編譯NDK程式

       這裡先介紹下Application.mk不在應用程式目錄下的jni裡,而是在其它目錄下的jni裡,這裡具體目錄就是在$NDK_ROOT/jni/下。通過Application.mk中的APP_BUILD_SCRIPT可以指定任意的應用程式裡的Android.mk的特性來實現的。當然Application.mk也可以和Android.mk一起放在應用程式$Program/jni目錄下,這種情況的編譯請參見我的另一篇文章。

 

       1> 先配置ndk相關環境

        進入到cygwin的/home/username目錄,username是你當前登入機器的使用者名稱,修改該目錄下的.bash_profile,在檔案的尾部加入如下代碼,設定ndk安裝的根目錄。

         NDK_ROOT=/cygdrive/d/workdoc_tool/android_env_build/windows/android-ndk-r6b    
         export NDK_ROOT

         NDK_PROJECT_PATH=/cygdrive/d/workdoc_tool/android_env_build/windows/android-ndk-r6b   
         export NDK_PROJECT_PATH      

         環境變數名NDK_ROOT為NDK安裝包根目錄,名字可以隨便取,只是用於切換目錄時方便而已。 

         環境變數NDK_PROJECT_PATH名字不能更改,因為如果定義了此環境變數後,編譯器會根據此變數去找此目錄下的jni下的Application.mk. 

         然後重新啟動Cygwin。

 

      2> cd $NDK_ROOT, 在ndk安裝目錄下mkdir jni 目錄。

 

      3>cd $NDK_ROOT/build/core,將該目錄下的default-application.mk 拷貝到2>中jni目錄下,並且重新命名為Application.mk。

 

      4> 修改Application.mk中變數內容,指定需要編譯的project路徑,並且指定project path下對應的build 的make file指令碼。這裡編譯ndk內建的samples下的hello-jni工程。

            # Project Path
           APP_PROJECT_PATH := $(NDK_PROJECT_PATH)/samples/hello-jni  

           # We expect the build script to be located here
           APP_BUILD_SCRIPT := $(APP_PROJECT_PATH)/jni/Android.mk        

          變數APP_PROJECT_PATH是可選的,不過這裡最好是指定下,看起來清晰些.

          變數APP_BUILD_SCRIPT是必須的

     5> $(APP_PROJECT_PATH)/jni/Android.mk 內容如下:     

           LOCAL_PATH := $(call my-dir)

           include $(CLEAR_VARS)

           LOCAL_MODULE    := hello-jni
           LOCAL_SRC_FILES := hello-jni.c

           include $(BUILD_SHARED_LIBRARY)

     6> cd $NDK_ROOT,執行./ndk-build.

           因為指定了NDK_PROJECT_PATH環境變數,所以在$NDK_ROOT根目錄下執行./ndk-build或是在$APP_PROJECT_PATH下執行$NDK_ROOT/ndk-build來編譯$APP_PROJECT_PATH程式都可以。編譯器都會先根據NDK_PROJECT_PATH環境變數去找jni/Application.mk,然後根據其中的APP_BUILD_SCRIPT來執行對應的Android.mk.

        

          這樣就可以編譯Application.mk中指定的native project了,在samples/hello-jni/libs/armeabi/下產生動態庫libhello-jni.so了。

 

        呵呵, 大功告成了!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.