標籤: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的開發