NDK Samples [1] - hello-jni

作者: 七零八落问号 | 来源:发表于2018-11-11 16:36 被阅读5次

    NDK Samples目录:GoogleSamples - NDK Samples


    项目地址:https://github.com/googlesamples/android-ndk/tree/master/hello-jni
    说明文档:https://github.com/googlesamples/android-ndk/blob/master/hello-jni/README.md

    该项目演示如何从Java调用C代码,使用cmake插件编译。


    最低要求:

    1. Android Studio 版本大于 2.2

    该项目演示了如何从Java代码调用C方法,并获取返回值。

    1. HelloJni :: stringFromJNI();
      演示了如何从java层调用C层对应stringFromJNI的方法。

    HelloJni

    /*
      该方法在hello-jni实现。
      可以通过ctrl+鼠标左键跳转到c方法。
     */
    public native String stringFromJNI();
    
    /* 
      该方法并没有任何的实现,纯粹展示了可以在同一个文件定义多个native方法。
      在IDE上显示为红色,提示没有找到该方法的c实现方法。
      调用会抛出UnsatisfiedLinkError
     */
    public native String  unimplementedStringFromJNI();
    
    /* 
      要使用上述的native方法,需要先加载对应的动态库,本例为加载hello-jni库。
      包中的动态库会被pm解压到 /data/data/[ packagename ]/lib 中。
     */
    static {
        System.loadLibrary("hello-jni");
    }
    

    hello-jni.c

    /*
      导入jni.h
      java和c之间的交互基本由此实现,包括数据转换,方法调用等。
     */
    #include <jni.h>
    
    /*
      stringFromJNI()的实现,返回一个包含平台类型信息的字符串
     */
    JNIEXPORT jstring JNICALL
    Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env, jobject thiz)
    {
        // 根据平台定义一个ABI宏
        ...
        
        return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI " ABI ".");
    }
    

    CMakeLists.txt

    # 配置cmake最低版本要求 3.4.1
    cmake_minimum_required(VERSION 3.4.1)
    
    # 使用指定的源文件,生成链接文件,并加入工程
    # 此处则是:
    # 指定使用 hello-jni.c (同目录下),
    # 生成 hello-jni 链接文件,
    # 通过 SHARED 指定链接文件为动态链接库。
    add_library(hello-jni
                SHARED
                hello-jni.c)
    
    # target_link_libraries要写在add_library之后
    # 为目标文件链接其所需要的库
    # 注意,库文件的顺序符合gcc链接顺序的规则,即被依赖的库放在依赖它的库的后面
    target_link_libraries(hello-jni
                          android
                          log)
    

    相对简单的项目,NDK开发的Hello World,只是编译工具换成了Cmake。

    相关文章

      网友评论

        本文标题:NDK Samples [1] - hello-jni

        本文链接:https://www.haomeiwen.com/subject/xepyxqtx.html