<p><span style="color:#ff0000;">之前请确保您已配置好<span style="font-family:Times New Roman;">java</span><span style="font-family:宋体;">的环境并配置好了变量;</span></span></p><p>1、创建<span style="font-family:Times New Roman;">Android</span><span style="font-family:宋体;">工程如下,一直默认设置建立好</span><span style="font-family:Times New Roman;">Android</span><span style="font-family:宋体;">工程</span></p>

创建好以后,build project,然后run Android application,运行界面如下:
我们来看一下MainActivity.java代码如下
package com.hellojni;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
接着在工程HelloJni根目录下面创建jni目录文件夹
接着配置工程HelloJni的property-》builder,然后选择右边的选项卡new 一个builder,弹出如下界面,我们选择Program选项

接着配置面板如下:

填充Location选项和workingDirectory,对应如下界面,这里我们选择ndk编译

接着在Refresh刷新选项卡中选择,特定资源如下图,选择jni
接着在build option选项中,设置如下

然后把我们刚建立的ndk_builder 上移到第一位置,如下图

接着在Jni目录下面添加Android.mk编译文件如下设置
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := HJni
LOCAL_SRC_FILES := HelloJni.c
include $(BUILD_SHARED_LIBRARY)
这里指定我们的Jni模块的名字为HJni,Jni下面指定一个源文件是HelloJni.c
下面我们回到HelloJni的Src下面的MainActivity.java中
package com.hellojni;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
添加下列,导入引用组件
import android.util.Log;
import android.widget.TextView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//创建TextView,并调用C++返回的字符串
TextView tv = new TextView(this);
tv.setText(StringFromJni());
//打印log,这个可以再Eclipse下面的LogCat中看到
Log.v("tag", "message_flyingbird");
setContentView(tv);
//setContentView(R.layout.activity_main);
}
//调用c++实现的函数声明
public native String StringFromJni();
//添加引用HJni块信息
static {
System.loadLibrary("HJni");
注意这里的HJni与之前的Android.mk中的LOCAL_MODULE必需对应上,这样才能保证调用会走到HelloJni.c中
}
接着我们在Jni下添加HelloJni.c文件
#include <string.h>
#include <jni.h>
#include <android/log.h>
JNIEXPORT jstring
Java_com_hellojni_MainActivity_StringFromJni(
JNIEnv* env,jobject this)
{
return (*env)->NewStringUTF(env, "Hello ,flyingbird!")
}
这里的回调函数有一个要求,函数的命名规则如下
函数名也有相关的命名规则 即Java_包名_类名_方法
com_hellojni对应包名,MainActivity对应我们的Java类,StringFromJni对应类中的具体的方法,ok,到此为止,重新clean,build,run Android application,这时我们终于看到了果实,,赞一个。
