JNI&NDK

作者: 攻城狮xhb | 来源:发表于2017-05-23 17:31 被阅读0次

    JNI: Java Native Interface (Java本地接口,本地接口即C和C++开发的接口) → 调用接口
    NDK:Native Development Kit (原生开发套件) → 工具集

    一: 使用NDK生成so文件

      1. 生成头文件,使用有调用native方法的类生成头文件。
      2. 在app的build.gradle增加
            Android{}里面增加
            sourceSets {
                main {
                      jniLibs.srcDirs = ['libs']
                      jni.srcDirs = ['src/main/jni', 'src/main/jni/']
                }
          }
      3. 在gradle.properties末行 android.useDeprecatedNdk=true
      4. 进入app/src/main目录:cd app/src/main执行javah命令:javah -d jni -classpath ./Java 包名.类名   
         << 解释语:  -d jni 表示头文件生成到jni文件夹(当前在<Project工程下>\app\src\main目录下,所以.h所在的目录为<Project>\app\src\main\jni )
         -classpath ./java 指定去当前路径下java下寻找包名指定的类>>
      5. 写一个c或者c++文件, 这个比较复杂, 可以根据demo讲解。
    
                #include <stdlib.h>
                #include <Stdio.h>
                #include <jni.h>
                // 就string 返回的数据类型, JNICALL java_包名_类名_方法名(JNIEnv *env,jobject thiz)
                jstring JNICALL Java_com_yunange_drjing_JniTest_getPackageName(JNIEnv *env,jobject thiz) {
                // 返回值 *env(结构体->)
                return (*env)->NewStringUTF(env, "I`m bug_king!");}
        6. 调用ndk-build生成so库。
        7. 别忘记使用system.System.loadLibrary("so文件名");<so文件名需要去掉前缀lib 和后缀.so>

    相关文章

      网友评论

          本文标题:JNI&NDK

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