用Eclipse+Cygwin+CDT+NDK來創建一個簡單的Android JNI 項目

你看這篇文章之前,必須保證前期工作已經完成,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.運行結果如下:





希望對大家有所幫助,互相學習提高吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章