JNI开发(一) 简单的C代码打包成SO库以及项目如何调用SO库
来源:互联网 发布:php 中英文企业网站 编辑:程序博客网 时间:2024/06/05 07:38
前段时间开发过程中用到了简单的JNI使用,当时发现很多网上文章总有这样那样的问题,最近趁时间充裕就记录下来,以供记忆和交流。
JNI环境配置
这里就不做多讲,百度一下,把脚跨过墙就好。
写一个简单的SO库
先在项目中创建一个类,里面暴露出本地代码的接口。
随后使用Terminal 执行生成.h的命令,将目录先定位到java目录,再执行 javah -jni com.monke.simplejnidemo.SimpleJniUtils
随后系统会自动生成 .h 文件
红框中就是需要实现的方法
在main目录创建jni文件夹,并将刚刚生成的 .h 文件移入,新建一个 .c 文件,并引入 .h,
实现JNIEXPORT jint JNICALL Java_com_monke_simplejnidemo_SimpleJniUtils_doubleData
方法
在build.gradle中添加
android{ ... sourceSets{ main{ jni.srcDirs=[] //不使用gradle编译本地c/c++代码 jniLibs.srcDirs = ['libs','src/main/libs']//加载so库 lib是第三方so src/main/libs是准备生成的so库位置 } } }
在gradle.properties文件中,没有就新建一个,添加android.useDeprecatedNdk=true
在jni目录中添加Android.mk
,Application.mk
文件
Android.mk中写
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := SimpleJniLOCAL_SRC_FILES =: simplejniutils.cinclude $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE
打包出来lib的名称,引用so库的时候需要使用 LOCAL_SRC_FILES
是代码原文件,路径是jni目录开始,多文件使用 \ 分割
Application.mk中写
APP_ABI := all
APP_ABI 是各个平台的分包,all是所有。
最后使用Terminal将目录定位到main,执行ndk-build
最后在SimpleJniUtils类中添加
static{ System.loadLibrary("SimpleJni"); }
测试一下,找个地方调用,run~
一切顺利,随后我们可以将so库,SimpleJniUtils类文件以及SimpleJniUtils所在的包路径给需要的人。
在项目中使用so库
在项目中放入so库文件,同时将SimpleJniUtils放入项目中,SimpleJniUtils的路径必须与so打包时的路径一致。
build.gradle 中添加
sourceSets{ main{ jniLibs.srcDirs = ['libs'] } }
在gradle.properties文件中,没有就新建一个,添加android.useDeprecatedNdk=true
,最后在需要的地方调用
- JNI开发(一) 简单的C代码打包成SO库以及项目如何调用SO库
- JNI 如何使用dlopen,dlsym调用第三方自定义的 .so库( JNI->C,C++)
- android中用ndk编译c代码为so库,供jni调用(一)
- JNI开发之打包输出so库
- JNI 如何使用dlopen,dlsym调用第三方自定义的 .so库(包括JNI->JNI)
- [JNI学习]---调用现有的so库
- android JNI的.so库调用
- JNI调用动态库.so
- jni 调用共享SO库
- android jni调用so库
- Android 静态和动态的调用so库(JNI)
- Android NDK开发(上)---jni的编译和调用so静态库文件
- jni-jni概述以及创建so库
- JNI开发(二) 在JNI开发中调用第三方so库
- 如何将java打包成jar, 如何将JNI的.so库和jar添加到应用APK中
- android 浅尝JNI 打包so库
- AndroidStudio开发jni调用第三方SO库
- Android调用so文件(C代码库)方法详解
- Python问题之“NameError: name 'reload' is not defined”
- UNITY 开发日记/教程 俄罗斯方块 (六) 消除与堆积正方形的下落
- C#WinForm练习——点击button按钮使窗体中文本框都显示“好好学习,天天向上”
- STL学习笔记1— —STL简述
- Osgi整理
- JNI开发(一) 简单的C代码打包成SO库以及项目如何调用SO库
- 利用Ajax向Servlet发送请求下载统计后的Excel文件,利用jquery.blockUI.js给予用户等待提示
- .Net环境下RabbitMQ的安装及使用
- cf 512B
- 字体格式:ttf,woff,eot
- visual studio 12/13基础c++工程建立使用
- jdk8 list排序
- JPA @MappedSuperclass注解的使用说明
- mysql数据库操作(一)