你看這篇文章之前,必須保證前期工作已經完成,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.運行結果如下:
希望對大家有所幫助,互相學習提高吧。