在Android Studio中使用Jni
来源:互联网 发布:c语言发送post请求 编辑:程序博客网 时间:2024/06/05 19:24
前提:
NDK环境已经搭建好,
windows下需要安装cygwim
Android studio指向正确的ndk
2、在MainActivity中定义Native方法
在static语句块中先加载so库,这时android Studio会报错,先忽略
3、创建jni文件夹,以及.c/.cpp文件和.h文件
将视图切换至Project下,在app\src\main\目录下创建jni文件夹
在jni文件夹下创建c文件和h文件
编辑.c文件如下:
说明
1、jstring是方法返回值类型,我们可以把jstring看成是Java中String跟C语言中char*类型的一个中间转换类型,
2、方法的命名规则
Java_[pkgName]_[className]_[funcName]
pkgName:你的包名,但是不能含".",将其替换为“_”
className:用到native方法的类名
funcName:native方法名
3、方法的形参有两个是必须的也就是不管java中的方法是否有形参,但是c语言中对应的方法必须有JNIEnv* env,和jobject obj,
如果java方法中还用其他形参,那么在C语言中严格按照顺序排在jobject obj参数的后面即可。
至此,Android Studio的部分已经准备完毕。
4、使用NDK编译生成hello.so文件
首先so文件是根据mk文件生成的,因此我们需要先准备好mk文件,方便起见,我们直接从NDK安装目录的sample/hello-jni/jni目录复制文件Android.mk和Application.mk
Android.mk的修改
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := printHelloLOCAL_SRC_FILES := printHello.cinclude $(BUILD_SHARED_LIBRARY)
说明:
我们只需要修改LOCAL_MODULE和LOCAL_SRC_FILES两个参数即可。
LOCAL_MODULE参数是指定编译后的目标文件的名称,其实编译好的目标文件名为libhello.so,
LOCAL_SRC_FILES指定了要编译的源文件。
Application.mk的修改
通过修改Application.mk文件来指定生成的动态库的类型:
如按以的修改则只会生成一种动态库:
# Build both ARMv5TE and ARMv7-A machine code.
APP_ABI := armeabi x86
为了方便,也可以指定所有类型
APP_ABI := all
下一步使用cygwin(windows)或则终端进入到工程的jni目录
输入:
${NDK}/ndk-build.cmd
这一步的前提是你已经配置好了NDK的环境
这样so文件会在libs目录下生成
修改jni的库目录
将app->src->main->libs改成app->src->main->jniLibs
注意:每次运行后ndk-build后,都需要修改这个目录名,否则对动态库的修改不会生效;
修改 gradle->gradle.properties
在文件的最末行添加:
android.useDeprecatedNdk=true
最后运行app,就能出现来自c文件的字符串了。
- 在Android Studio中使用Jni
- 在Android Studio中使用Jni
- 如何在Android Studio中使用JNI
- Android studio 中使用Jni
- JNI在Android Studio 2.2中基本配置和使用
- 在Android Studio中进行JNI编程
- 在 Android 中 使用JNI
- Android studio中如何使用Ndk(Jni)?
- Android Studio 中使用JNI的步骤
- Android Studio中使用NDK/JNI
- Android Studio中jni的使用
- Android Studio中使用NDK/JNI
- 【笔记】Android Studio中使用NDK-JNI
- android studio JNI使用
- Android Studio使用JNI
- android studio使用jni
- Android Studio 使用JNI
- ANDROID STUDIO JNI使用
- mysql limit 分页问题分析
- HDU-3191 How Many Paths Are There(有向图次短路条数)
- Hadoop伪分布式环境搭建
- POJ 1542 Atlantis (线段树+扫描线+离散化)
- Android自定义可移动悬浮窗,WindowManager.LayoutParams一些属性介绍
- 在Android Studio中使用Jni
- Can't find bundle for base name 的解决方法
- Linux普通用户无法浏览ROOT等文件夹问题解决
- 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis
- 阿里云服务器部署Nodejs
- C++学习小记
- 为2D游戏生成平滑地形的最简单的方法是什么?
- 94. Binary Tree Inorder Traversal
- FatFsVersion0.01源码分析