android中使用ndk之创建MyTestJni项目

来源:互联网 发布:小猪cms三网通 编辑:程序博客网 时间:2024/05/23 11:57

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、执行项目,运行得到结果。


0 0