您的位置:首页 > 移动开发 > Android开发

android中使用ndk之创建MyTestJni项目

2014-03-04 15:22 477 查看
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、执行项目,运行得到结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  NDK jni使用