android studio如何添加jni
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文件
4 在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 JNICALLJava_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中Fragment的构造函数 his fragment should provide a de
- Android(安卓)HDecoration项目so库导出和调用
- [毕业设计-基于android的手机网盘的设计与实现] java中文件的soc
- Android(安卓)自己实现 NavigationView
- android多线程下载模块
- Android经常使用UI组件 - TextView
- [2] Android进程孵化图
- Tinker热修复简单接入
- Android(安卓)XMl文件存储及其解析