你看这篇文章之前,必须保证前期工作已经完成,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.运行结果如下:
希望对大家有所帮助,互相学习提高吧。