下载案例 HelloJNI ,导入工程到Eclipse, 可以直接下载我的案例,
源码下载:
目录图
使用命令生成 .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/* * 方法名称规定 : 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 := helloLOCAL_SRC_FILES := hello.cinclude $(BUILD_SHARED_LIBRARY)
运行项目如图:
调用成功