你看這篇文章之前,必須保證前期工作已經完成,Android的開發環境已經搭建完成,Cygwin已經安裝成功,Eclipse的CDT外掛程式已經整合OK,NDK已經解壓正常(DNK的版本是android-ndk-r8b,必須保證ndk的版本不低於5)。
1.更給cygwin中的檔案:更改Cygwin_root\home\Administrator\.bash_profile檔案(Cygwin_root是Cygwin軟體的安裝根目錄),在.bash_profile檔案的末尾增加如下內容:
ANDROID_NDK_ROOT=/cygdrive/h/android-ndk-r8b
export ANDROID_NDK_ROOT
/cygdrive/h/android-ndk-r8b 就是cygwin軟體協議下得NDK的解壓的根路徑,cygdrive可以理解成cygwin軟體的協議,h/android-ndk-r8b是ndk的路徑。
2.建立一個Android項目,此項目中的Activity的名稱為MainActivity,然後建立jni檔案夾,jni檔案夾是用來存放mk檔案和c檔案的。
3.然後配置這個Android的項目:
3.1 建立一個Builders,如所示:
當點擊2時,選擇“Program”選項,給建立的Builder命名,如New_Builder(1).
3.2配置Builder的Main面板如下:
1.選擇cygwin軟體bin下面的bash.exe; 2.選擇cygwin軟體下面的bin檔案夾;3.--login -c "cd /cygdrive/g/workspace/HelloJni3 &&$ANDROID_NDK_ROOT/ndk-build" g/workspace/HelloJni3
就是當前Android項目的路徑,$ANDROID_NDK_ROOT就是最開始步驟中定義的變數。
3.3 配置Refresh面板:
1.選擇“Specific resource” 2.指定特定資源,選擇Android項目下面的libs檔案; 3. 選擇“Recursively include sub-folders”
3.4 配置Build Options面板:
1.根據需要選擇何時進行build 2.Specify Resources 選擇此Android項目中建立的jni檔案夾。
4.MainActivity 的代碼如下:
package com.example.hellojni3;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView textview = (TextView) findViewById(R.id.textview);
textview.setText(fromString());
}
public native String fromString();
static {
System.loadLibrary("hello");
}
5.jni 檔案夾下面建立Android.mk 檔案,內容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello-jni2.c
include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE 和上面Acitivity中System.loadLibrary 對應。LOCAL_SRC_FILES 就是c檔案的名稱,在jni檔案夾中建立hello-jni2.c檔案,
內容如下:
#include <string.h>
#include <jni.h>
jstring
Java_com_example_hellojni3_MainActivity_fromString( JNIEnv* env,
jobject thiz )
{
return (*env)->NewStringUTF(env, "from String!");
}
jstring 與Java中的String類相對應,Java_com_example_hellojni3_MainActivity就是Java開頭的包含native方法的Java類(即:com.example.hellojni3.MainActivity),fromString方法對應MainActivity中的 public native String fromString();方法。
6.當你更改c檔案時候重新編譯如:
7.運行結果如下:
希望對大家有所協助,互相學習提高吧。