下载案例 HelloJNI ,导入工程到Eclipse, 可以直接下载我的案例,
源码下载:https://github.com/DickyQie/android-ndk
目录图
使用命令生成 .so 文件,如下图
之后生成了很多文件
先来看看代码:
public class MainActivity extends Activity {
//静态代码块加载C语言库文件
static{
System.loadLibrary("hello");
}
/*
* 声明一个native方法
* 这个方法在Java中是没有实现的, 没有方法体
* 该方法需要使用C语言编写
*/
public native String helloFromJNI();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println(helloFromJNI());
}
public void onClick(View view) {
//点击按钮显示从jni调用得到的字符串信息
Toast.makeText(getApplicationContext(), helloFromJNI(), 1).show();
}
}
hello.c 文件 (Java利用JNI来调用C中的helloFromJNI方法)
#include <jni.h>
/*
* 方法名称规定 : Java_完整包名类名_方法名()
* JNIEnv 指针
*
* 参数介绍 :
* env : 代表Java环境, 通过这个环境可以调用Java中的方法
* thiz : 代表调用JNI方法的对象, 即MainActivity对象
*/
jstring Java_com_zhangqie_ndkhelloworld_MainActivity_helloFromJNI(JNIEnv *env, jobject thiz)
{
/*
* 调用 android-ndk-r12b\platforms\android-9\arch-arm\usr\include 中jni.h中的方法
* jni.h 中定义的方法 jstring (*NewStringUTF)(JNIEnv*, const char*);
*
* 可以根据路径找到该方法
*
*/
return (*env)->NewStringUTF(env, "hello world zhangqie");
}
还有一个 Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c
include $(BUILD_SHARED_LIBRARY)
运行项目如图:
调用成功