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、执行项目,运行得到结果。
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、执行项目,运行得到结果。
相关文章推荐
- Android NDK——使用Android Studio引用so库,jar包、module以及导入Eclipse项目并使用JNI的正确姿势
- 使用NDK编译含JNI的Android项目常见问题解决方案
- 用Eclipse+Cygwin+CDT+NDK来创建一个简单的Android JNI 项目
- Android JNI(NDK)简单学习(环境搭建,创建一个JNI项目的基本流程)
- Android Stuido Ndk-Jni 开发(一):创建简单的JniDemo
- Android-个人心得:超详细的JNI(NDK)入门与使用
- Android从0到完整项目(1)使用Android studio 创建项目详解
- 使用手动命令创建一个Android项目
- Android使用NDK开发项目时的一些问题
- cocos2d-x学习之旅(五):1.5 使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机
- 使用android studio创建android项目
- Android: 使用CMake 构建 JNI 项目
- 使用NDK移植开源项目,JNI的使用技巧
- 【基于Windows系统】教你如何在Android中使用JNI以及NDK开发环境搭建
- android使用ndk-stack调试JNI部分的C/C++代码
- 使用NDK创建及配置C++程序(原生纯C++项目,不包含JAVA代码)
- [转]Android通过NDK调用JNI,使用opencv做本地c++代码开发配置方法
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码
- Maven(二)——eclipse使用Maven创建(Java和Android)项目