在Windows系統(tǒng)上安裝與使用Android NDK r5
一、 Android NDK r5安裝
1、 cygwin的安裝和簡(jiǎn)單配置
① 首先到http://www.cygwin.com下載setup.exe ,接著建立安裝目錄,如X:\cygwin (我用的是 E:\cygwin ) ,將setup.exe放到此目錄。
② 啟動(dòng)安裝:

BEGIN-> 點(diǎn)擊setup.exe:

③ Next->選Install from Internet(選擇在線安裝方式):

④ Next->填寫Root Directory,如X:\cygwin(選擇安裝路徑):

⑤ Next->填寫Local Package Directory,如X:\cygwin\ftp(選擇下載文件存放的目錄):

⑥ Next->選Direct Connection(選擇網(wǎng)絡(luò)連接方式):

⑦ Next->選一個(gè)較快的ftp(選擇下載鏡像站點(diǎn)):

⑧ Next->(開始下載安裝):

⑨ 到了關(guān)鍵步驟,如果僅想安裝基本系統(tǒng),直接Next;如果想完全安裝,點(diǎn)擊 All旁邊的旋轉(zhuǎn)狀圖標(biāo),將Default切換至Install;如果僅想在命令行下寫寫程序,則只要將gcc、make等開發(fā)工具選上,還有openssh等(一般選擇: autoconf2.1 、 automake1.10 、 binutils 、 gcc-core 、 gcc4-core 、 gdb 、 pcre 、 pcre-devel 、 GNU awk );選好后,Next->:

⑩ 選擇需不需要?jiǎng)?chuàng)建快捷方式。->END
最后啟動(dòng)Cygwin,測(cè)試安裝是否成功:
點(diǎn)擊快捷方式或X:\cygwin\cygwin.bat打開控制臺(tái),如果是域用戶,按照提示makepasswd和makegroup即可。

輸入命令檢查

出現(xiàn)以上版本信息則表明make 和gcc 已經(jīng)安裝成功。
2、 Android NDK r5 Windows
① 首先到官網(wǎng)下載 Android NDK r5 Windows
② android-ndk-r5直接解壓就行了,我的路徑是E:\Android_NDK
③ 在home\<你的用戶名>\.bash_profile 文件中最后添加環(huán)境變量 :打開E:\cygwin\etc\skel目錄,找到 .bash_profile 文件 ,拷貝到 home\<你的用戶名>\ (此處為E:\cygwin\home\Administrator)下面,在 最后添加環(huán)境變量
NDK=/cygdrive/<你的盤符>/
export NDK
我的:NDK=/cygdrive/E/Android_NDK/android-ndk-r5
export NDK
其中"NDK"這個(gè)名字隨便起,因?yàn)楹竺嬉媒?jīng)常使用,建議不要太長(zhǎng)。
重啟cygwin,輸入cd $NDK進(jìn)入對(duì)應(yīng)目錄,就成功了。
注意:添加時(shí)用UltraEdit打開添加,如果是中文OS 使用記事本或者寫字板打開編輯后,重新啟動(dòng)Cygwin 會(huì)報(bào)錯(cuò)??梢园凑障聢D方式轉(zhuǎn)換:

#p#二、 JNI實(shí)例
1、 安裝成功后編譯NDK中的一個(gè)例子命令行:

編譯完成后在E:\Android_NDK\android-ndk-r5\samples\hello-gl2文件夾中會(huì)生成一個(gè)文件夾libs,里面有一個(gè)子文件夾armeabi,里面生成libgl2jni.so文件 。
2、 一個(gè)簡(jiǎn)單的JNI例子
下面用一個(gè)簡(jiǎn)單的例子介紹怎么生成一個(gè).so文件以及在Android項(xiàng)目中怎么調(diào)用.so文件。
- package com.cn.lhq;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TextView;
- public class JniTest extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- // setContentView(R.layout.main);
- TextView tv = new TextView(this);
- tv.setText(stringFromJNI());
- setContentView(tv);
- }
- public native String stringFromJNI();
- static {
- System.loadLibrary("MyFirstJNI");
- }
- }
① 首先,用Eclipse建立一個(gè)ANDROID的工程,命名為MyFirstJNI,工程代碼為:
② 制作生成.so文件: 可以通過獲取以.h文件 來 獲取函數(shù)申明。打開命令行,鍵入cd (這個(gè)路徑是使用Eclipse建立的工程目錄的src的路徑 ,我的是F:\workspace\MyFirstJNI\src ),目的是設(shè)置工程目錄。然后鍵 入: javah -jni com.cn.lhq.JniTest,結(jié)果如果失敗,那就是因?yàn)闆]有把MyFirst.class文件拷貝到 F:\workspace\MyFirstJNI\src \com\ cn\lhq 之下,原因是Eclipse的文件管理機(jī)制會(huì)將.class文件和.java文件分開到不同的目錄,解決方法是將F:\workspace\MyFirstJNI\bin\com\cn\lhq的所有.class文件都拷貝到他的目錄下面。再次運(yùn)行javah -jni com.cn.lhq.JniTest即可。然后就可以看到在 F:\workspace\MyFirstJNI\src 下多出了一個(gè)文件:com_cn_lhq_JniTest.h,通過這個(gè)文件,我們就知道了本地接口的函數(shù)名,于是我們就根據(jù)函數(shù)名寫一個(gè)com_cn_lhq_JniTest.c文件, 代碼如下:
- #include <string.h>
- #include <jni.h>
- jstring
- Java_com_cn_lhq_JniTest_stringFromJNI( JNIEnv* env,
- jobject thiz )
- {
- return (*env)->NewStringUTF(env, "Hello from JNI !");
- }
注意 : 這個(gè)函數(shù)的參數(shù)與用javah生成出來的參數(shù)是不同的,這里只是需要函數(shù)名而已,因?yàn)楹瘮?shù)名必須匹配,否則在模擬器上面跑的時(shí)候會(huì)出錯(cuò),當(dāng)然,如果對(duì)JNI命名規(guī)則熟悉的話可以跳過javah這步,直接寫一個(gè).c文件。
寫好.c文件之后就開始生成 .so 文件了,這時(shí)候需要 用到 ANDROID.MK這個(gè)文件。于是把Eclipse生成的工程目錄剪切,放到NDK目錄的samples目錄之下 (和示例hello-gl2一樣),這個(gè)時(shí)候模仿hello-gl2文件層次結(jié)構(gòu),將MyFirstJNI文件也做成那樣 :在MyFirstJNI文件夾下面新建一個(gè) jni文件夾,把 com_cn_lhq_JniTest.c 剪切到此文件夾中,同時(shí)也拷貝一個(gè) ANDROID.MK 文件到此文件夾,用 UltraEdit打開 ANDROID.MK 文件進(jìn)行修改,主要修改如下:
LOCAL_MODULE := 工程名
LOCAL_SRC_FILES := .c的文件名(包含擴(kuò)展名)
此例子應(yīng)改為:
LOCAL_MODULE := MyFirstJNI
LOCAL_SRC_FILES := com_cn_lhq_JniTest.c
然后 打開 cygwin, 進(jìn)入 E:\Android_NDK\android-ndk-r5\samples\MyFirstJNI\jni目錄:

再 輸入$NDK/ndk-build命令,在E:\Android_NDK\android-ndk-r5\samples\MyFirstJNI生成libs文件夾,即生成.so文件:

③ 在eclipse中重新導(dǎo)入生成了.so文件的 MyFirstJNI項(xiàng)目,運(yùn)行效果圖如下:

【編輯推薦】