1、创建一个Android项目。
2、在mainactivity中
public class MainActivity extends Activity implements OnClickListener{
Button mPlusBtn;
Button mButton;
Button mKillBtn;
String ss;
int a = 3;
int b = 4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPlusBtn = (Button) findViewById(R.id.btn_plus);
mButton = (Button) findViewById(R.id.button);
mKillBtn = (Button) findViewById(R.id.btn_kill);
mPlusBtn.setOnClickListener(this);
mButton.setOnClickListener(this);
mKillBtn.setOnClickListener(this);
}
@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;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_plus:
ss = "a=" + String.valueOf(a) + "," + "b=" + String.valueOf(b)
+ "," + "a+b=" + String.valueOf(JniModule.jniadd(a,b));
Toast.makeText(this, "this is a + b ="+ ss, Toast.LENGTH_SHORT).show();
break;
case R.id.button:
Toast.makeText(this, "this is button click", Toast.LENGTH_SHORT).show();
break;
case R.id.btn_kill:
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
break;
default:
break;
}
}
}
3、项目-》右键-》Android tools-》add native suppor,这时我们发现在项目下有一个jni文件包被创建打开后发现有一些文件,暂时先不要动接下来将会被使用。
4、在src下新建一个类JniModule
public class JniModule {
static {
System.loadLibrary("jni_test");//jni_test是库文件名,这个库文件将在下面自己创建,因此名字可以自定义
}
public native static int jniadd(int a,int b);//这个方法顾名思义,本地的一个方法,将会调用jni_test.c文件库中的一个方法
}
5、生成.h文件
在cmd命令下进入所建项目的src目录下,执行javah <包含System.loadLibrary()静态方法的类的全名> (此处我的是javah com.example.myjnitest.JniModule),此时在src下我们看到有一个.h的文件生成。(注:这只是其中的一种方法,如果生成不成功可以换用另一种方法。方法是:在cmd命令下执行 javah -classpath <项目所在位置/bin/classes> -d jni <包含System.loadLibrary()静态方法的类的全名>,此时.h文件在bin/classes/... 进去可以看到.h文件)
5、将生成的.h文件拷贝到jni的目录下。
6、在jni目录下新建文件jni_test.c内容:
#include <string.h>
#include <com_example_myjnitest_JniModule.h>
/* This is a trivial JNI example where we use a native method
* to return a new VM String. See the corresponding Java source
* file located at:
*
* apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java
*/
jint
//此处严格按照规定 Java+包名+类名+方法名
Java_com_example_myjnitest_JniModule_jniadd( JNIEnv* env,
jobject thiz,jint a,jint b )
{
// return (*env)->NewStringUTF(env, "Hello from JNI ! ");
return (int) a+b;
}
7、修改Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jni_test
LOCAL_SRC_FILES := jni_test.c
include $(BUILD_SHARED_LIBRARY)
8、执行项目,运行得到结果。