windows下androidNDK的開發

來源:互聯網
上載者:User

標籤:android   ndk   cygwine   

          這篇文章是我一年前寫的,當時只是寫的word文檔,今天將其中的步驟按照該文檔重新走了一遍,還是挺詳細的,不會沒有關係,只要認真參照教程,那麼windows下androidNDK開發不是夢,好了,下面看教程。

android應用的ndk開發基礎,即在android應用中用java檔案調用c檔案

1.首先需要安裝windows下類比linux環境的cygwin軟體,如下:

1.下載setup.exe

到官網www.cygwin.com 在螢幕的中央是一個黑綠兩色組成的 “C” 徽標,標題是“Install or update now.”。在該連結上點擊,這將下載一個小程式 setup.exe(250KB)。這個安裝程式將在您的機器上引導 Cygwin 環境的安裝或更新過程。 

2.運行setup.exe,進行安裝,如:
圖 1. Cygwin 環境的安裝嚮導


點擊 Next按鈕。 
選擇下載位置
在這個頁面上,選擇"Install from Internet"。

圖 2. 選擇安裝類型


一直點擊 Next按鈕,一直到出現介面:


選擇一個下載網站。因為這些網站是義務的鏡像,所以選擇一個下載點有點風險(通常它們是可用的,但有時不可用)。通常,試試離你比較近的那個網站。(有一個http://mirrors.163.com最快)

點擊 Next按鈕。 
選擇包進行安裝
在這個頁面上,您將選擇要安裝的包。預設情況下,Cygwin 基本包將不安裝 GCC,因此,您必須修改預設設定。
將滑鼠移動到 Devel邊的加號(+)上,然後點擊它展開 Devel類。


這一步,我們選擇需要下載安裝的組件包,為了使我們安裝的Cygwin能夠編譯器,我們需要安裝gcc編譯器,預設情況下,gcc並不會被安裝,我們需要選中它來安裝。為了安裝gcc,我們用滑鼠點開組件列表中的“Devel”分支,在該分支下,有很多組件,我們必須的是:

binutils 
gcc 
gcc-mingw 
gdb

make

滑鼠點擊組件前面的迴圈按鈕,會出現組建的版本日期,我們選擇最新的版本安裝,是選中後的四類組件的:

binutils 組件


gcc 組件


gcc-mingw 組件


gdb組件


注意還有make組件 

選完以後,我們選擇下一步,進入安裝過程,如所示,


一直到下載完成,就ok了!

3.測試是否安裝成功

運行cygwin,輸入make -v 和 gcc -v 如果能找的,則表示安裝成功。

安裝NDK

安裝ndk很簡單,只需要把下載的ndk檔案解壓縮到指定的目錄即可。

配置NDk

修改Cygwin目錄/home/username 下的.bash_profile檔案,在檔案末尾加入如下代碼:

NDKROOT=/cygdrive/ndk檔案的路徑(如NDKROOT=/cygdrive/d/android/ndk)
export NDKROOT

(注意:NDKROOT名字可以自己,ndk檔案路徑是你 解壓縮後ndk的路徑,特別注意將斜杠換成反斜線 和 去掉d:中的:(windows和linux路徑區別問題))

2.開啟eclipse,建立android工程hello-jni,在工程的根目錄下建立jni檔案夾

A.在HelloJni.java的關鍵代碼如下

TextView  tv = new TextView(this); tv.setText( stringFromJNI() ); setContentView(tv);public native String  stringFromJNI();//這個是聲明的本地方法public native String  unimplementedStringFromJNI(); //用靜態快載入libhello-jni.so檔案static {        System.loadLibrary("hello-jni");}

B.開始,運行cmd,cd進入hello-jni工程的HelloJni.java的目錄,javac HelloJni.java產生位元組碼

C.進入hello-jni工程的bin目錄,運用javah產生  .h  檔案

Javah  -classpath . -jni 包名.類名

3.將產生的  .h  檔案的函數標頭檔,複製到建立的hello-jni.c檔案裡,注意在hello-jni.c檔案裡需要引入#include <jni.h>檔案,hello-jni.c檔案如下:

#include <string.h>#include <jni.h>/* This is a trivial JNI example where we use a native method * to return a new VM String. See the corresponding Java source * file located at: * *   apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java */Jstring//這個是用javah產生的頭Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,                                                  jobject thiz ){#if defined(__arm__)  #if defined(__ARM_ARCH_7A__)    #if defined(__ARM_NEON__)      #define ABI "armeabi-v7a/NEON"    #else      #define ABI "armeabi-v7a"    #endif  #else   #define ABI "armeabi"  #endif#elif defined(__i386__)   #define ABI "x86"#elif defined(__mips__)   #define ABI "mips"#else   #define ABI "unknown"#endif    return (*env)->NewStringUTF(env, "Hello from JNI !  Compiled with ABI " ABI ".");}
4.建立android.mk檔案

 LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni

LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)

簡單說明一下

LOCAL_PATH := $(call my-dir)

LOCAL_PATH 表示此時位於工程目錄的根目錄中 (call my-dir)返回目前的目錄的地址

LOCAL_MODULE := NewJNI

LOCAL_MODULE 用來區分 Android.mk 中的每一個模組。檔案名稱必須為一 不能有空格 這個

是你以後庫檔案產生的檔案名稱 編譯器會自動給你加上首碼 lib 和尾碼.so.

LOCAL_SRC_FILES := com_demo_jni_Jni.c

include $(BUILD_SHARED_LIBRARY)

BUILD_SHARED_LIBRARY 的意思就是建立一個動態共用程式庫庫


2.,將寫好的hello-jni.c檔案和android.mk檔案拷貝到jni檔案夾下

3.右鍵工程,properties

點擊builders----->new------->program



Location的參數是cygwin的安裝路徑下的bin檔案夾下的bash.exe檔案

Working Directory的參數是cygwin的安裝路徑下的bin檔案夾路徑

Arguments的參數是:

--login -c “cd/cygdrive/建立的工程的路徑&&$NDK/ndk-build”

在這裡我的建立的工程的路徑是:f/codethree/hello-jni(注意f盤符沒有:即不是f:)

$NDK是當時安裝cygwin時在cygwin的安裝路徑下的C:\cygwin64\home\Administrator的.bash_profile檔案配置的ndk的解壓路徑,如下:

NDK=/cygdrive/f/android/androidNDK/android-ndk-r9d-windows-x86_64/android-ndk-r9d

export NDK




注意在勾選Specify working set of relevant resources時指定資源選擇你的工程的jni目錄即可。

當以上步驟都正確配置無誤,儲存配置後應該就會自動編譯jni目錄下的C相關代碼並輸出相應的.so庫檔案到工程的libs目錄下,libs目錄會自動建立。也會自動建立obj目錄

編譯時間控制台輸出類似如下:


再運行工程,結果正確。

以後修改了C代碼,儲存後也會自動觸發編譯,省時省力。


若是用代碼方式實現的編譯產生的.so檔案的方式,如下:

如下;


四、配置NDK路徑設定

可以在cygwin中通過vim修改,也可以在windows安裝目錄中修改 home\<你的使用者名稱>\.bash_profile 檔案中最後添加環境變數

NDK=/cygdrive/e/Andriod/develop/android-ndk-r4

export NDK

其中NDK=/cygdrive/<你的盤符>/<android ndk 目錄> ,"NDK"這個名字隨便起,以後經常用不要太長。

重啟cygwin,輸入:

cd $NDK

可進入ndk對應目錄說明設定OK。

五、編譯示範工程

現在就可以編譯相關NDK工程了(一些用c/c++寫的程式),編譯方法如下:

1、在cygwin命令列下,進入android項目工作目錄:

cd $NDK

2、依次進入samples\hello-jni目錄,(完整路徑樣本: E:\Andriod\develop\android-ndk-r4\samples\hello-jni)

3、運行

$NDK/ndk-build

注意:該命令$NDK和/ndk-build是串連到一起的,中間沒有空格,實際使用時是打入完整的$NDK/ndk-build,不要只打ndk-build。

4、正常編譯完成後會在你的項目libs/armeabi目錄下產生對應的 .so檔案。


至此,window下androidndk的開發環境搭建以及簡單的開發案例就結束了。






windows下androidNDK的開發

聯繫我們

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