zoukankan      html  css  js  c++  java
  • android jni学习

    参考 

    http://www.cnblogs.com/flyme/p/4431762.html

    http://blog.csdn.net/sodino/article/details/41946607

     Android的JNI开发有两种情况:一种是使用已经编译好的so动态库,别外一种是使用c/c++源码开发。下面分别介绍使用方法。

    一、使用已经编译好的so 

    这种情况下,只要将.so文件放到相应的目录就可以了。在编译后,so文件会自动打包到apk中,在代码中直接loadLibrary就可以了。如下图

    使用方法:

    String libName = "helloNDK";//注意没有lib前缀和.so后缀

    System.loadLibrary(libName);

    二、使用C/C++源码 

    • 编写java源码 

    • 生成class文件

    执行build--->make project,生成class文件,文件存放于下面的目录中。

    • 生成.h头文件

    在AS的terminal中使用javah命令生成头文件。我们要使用的是

    javah -d <dir> -classpath <path>

    -d:生成头文件存放的目录(这个目录如果事先没有,那么运行时会创建。

    <dir> :-d选择的头文件存放的目录。

    -classpath:从中加载类的路径命令。

    <path>:是需要生成头文件的class文件的目录。

    首先要cd到HelloNDK.java的文件夹main,如果不进行这个目录就运行javah时会提示找不到相关的类文件。

    在切换到了main目录后,执行

    javah -d jni -classpath ....uildintermediatesclassesdebug  chuiyuan.lsj.androidjava.jni.HelloNDK

    其中

    jni:生成的头文件要保存的目录。

    ....uildintermediatesclassesdebug:class所在的目录。

    最后一个是class文件名。

    运行成功后,得到如下图

    .h头文件出现了,它是自动生成的,不能进行改动。

    • 编写C/C++源文件

    函数名一定要从头文件中复制过来,以免出错。

    得到的如下所示

    //
    // Created by lsj on 2015/9/18.
    //
    #include <jni.h>
    #include <android/log.h>
    
    #ifndef LOG_TAG
    #define LOG_TAG "ANDROID_LAB"
    #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
    #endif
    
    //copy from header file
    #ifndef _Included_chuiyuan_lsj_androidjava_jni_HelloNDK
    #define _Included_chuiyuan_lsj_androidjava_jni_HelloNDK
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     chuiyuan_lsj_androidjava_jni_HelloNDK
     * Method:    syaHello
     * Signature: ()Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_chuiyuan_lsj_androidjava_jni_HelloNDK_syaHello
            (JNIEnv *env, jobject jObj) {
        LOGE("log string from ndk");
        return (*env)->NewStringUTF(env, "Hello from JNI");
    }
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    
    • 配置app里面的build.gradle文件

     如图,加入ndk的配置。

    • 配置ndk的路径

    要先下载,还是很大的。

    • 最后生成 so文件

    • 在Activity中测试jni

  • 相关阅读:
    第08组 Alpha冲刺(1/6)
    第08组 团队Git现场编程实战
    第08组 团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
    第一次结对编程作业
    第8组 团队作业
    第一次个人编程作业
    第一次博客作业
    Alpha 冲刺 (7/10)
  • 原文地址:https://www.cnblogs.com/chuiyuan/p/4821009.html
Copyright © 2011-2022 走看看