JNI&NDK

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文件夹(当前在\app\src\main目录下,所以.h所在的目录为\app\src\main\jni )
     -classpath ./java 指定去当前路径下java下寻找包名指定的类>>
  5. 写一个c或者c++文件, 这个比较复杂, 可以根据demo讲解。

            #include 
            #include 
            #include 
            // 就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文件名");

你可能感兴趣的:(JNI&NDK)