android studio如何添加jni

        最近公司在做jni方面的东西,自己做了小demo在创建新project的时候直接勾选include C++ support,然后项目就会自动在MainActivity中添加
static {
    System.loadLibrary("native-lib");
}
 
  
public native String stringFromJNI();

        同时也会自动创建jni的文件,如果在其他地方想使用jni的话直接照猫画虎复制粘贴再改改就OK了,非常方便。

        就在我美滋滋的得意自己的成果时,同组的小伙伴又跟我说 要我把我的内容放到主应用里使用,可主应用并没有使用jni,那就需要单独加咯。

        于是信心满满的去百度android studio 添加jni方法,然鹅,百度到的方法都不能得到so文件,自然也无法正确的调用jni了,这个问题整整困扰了两天,我曾一度怀疑是不是本地环境的问题,甚至还把ndk版本升级到最新 还是没什么卵用。这些博客可能都不是自己的原创,从别人那里copy一份直接放到自己的博客里。

        废话不多数,直接说怎么干吧

        前面的步骤跟其他博客差不多:

1 先建一个JniUtils类,然后编写加载jni的代码

static {
    System.loadLibrary("myjni");
}
public native String stringFromJNI();

2 build->make project生成.class文件

3 打开terminal,cd app/src/main,  javah -d  jni  -classpath 包名.类名     然后自动在生成jni目录,并在该目录下生成.h文件

在src\main\jni\目录内新建一个名称为CMakeLists.txt的文件(该文件名称固定为CMakeLists.txt),内容为

cmake_minimum_required(VERSION 3.4.1)

add_library(myjni SHARED native-lib.cpp)

find_library(log-lib log)

target_link_libraries(myjni ${log-lib})

注:为了区别两个地方我特意用了两个名字 :在add library和target link libraries中的myjni必须是一致的,用在

static {
    System.loadLibrary("native-lib");
}

在add library 中的native-lib.cpp这个必须跟接下来新建的jni文件名一致。

其实我看了系统自动创建的项目中也有这个文件,而且里面代码很多,仔细看的话其实也就是这核心的4段代码,其他都是注释

5 点击IDE菜单File -> Link C++ Project with Gradle

Build System选择CMake
Project Path选择上面创建的CMakeLists.txt
实际上就是在app的build.gradle的android节中新增了
externalNativeBuild {
    cmake {
        path 'src/main/jni/CMakeLists.txt'
    }
}

点击IDE的Sync Project With Gradle Files

jni的部分基本就完事了,下面就是jni编程

在java文件中添加native代码


static {
    System.loadLibrary("myjni");
}

public native String helloJni();

鼠标点击放到native函数上

会提示Cannot resolve corresponding JNI function Java_com_example_jiang_hellojnitest_MainActivity_helloJni

按Alt + Enter点击Create...

在c文件中自动创建函数

JNIEXPORT jstring JNICALL
Java_com_example_jiang_hellojnitest_MainActivity_helloJni(JNIEnv *env, jobject instance) {

    // TODO


    return (*env)->NewStringUTF(env, returnValue);
}

修改函数实现


在java中用一个TextView显示jni函数的结果

运行即可看到jni函数成功执行


参考文档:https://blog.csdn.net/zahuopuboss/article/details/52804817

你可能感兴趣的:(Android)