用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.运行结果如下:





希望对大家有所帮助,互相学习提高吧。

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