android ------- 运行官方NDK 案例HelloJNI

下载案例 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)

运行项目如图:

 

调用成功

原文地址:https://www.cnblogs.com/zhangqie/p/8891181.html