下载案例 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)
运行项目如图:
调用成功