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