一、适用:

因为架构迁移或者开发需要,有时候需要在android应用开发中,调用已有的c语言开发库,此时可能需要用到JNI。

二、示例:

1、Android Studio安装“合适的”ndk版本、cmake

NDK 修订历史记录  |  Android NDK  |  Android Developers

2、在CMakeLists.txt中添加需要编译的文件、和需要导入的c语言库。

添加native-lib.cpp,编译成库local-lib

#https://blog.csdn.net/weixin_51380973
add_library( # Sets the name of the library.local-lib# Sets the library as a shared library.SHARED# Provides a relative path to your source file(s).native-lib.cpp)
target_include_directories(local-libPRIVATE${CMAKE_SOURCE_DIR}/include
)
target_include_directories(local-libPRIVATE${CMAKE_SOURCE_DIR}/../jniLibs/include
)

导入remote-c.so库,命名为 remote-lib

add_library(remote-lib SHARED IMPORTED)set_property(TARGET remote-lib PROPERTY IMPORTED_NO_SONAME 1)
set_target_properties(remote-lib PROPERTIES IMPORTED_LOCATION${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/remote-c.so)target_link_libraries( # Specifies the target library.local-libremote-lib)
#https://blog.csdn.net/weixin_51380973

3、使用java语言格式,添加Activity、Class

public class JNITestActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_xxx);JNITest();}public void JNITest(){new Thread(new Runnable() {@Overridepublic void run() {                //https://blog.csdn.net/weixin_51380973callLocalJava();}  }).start();}}
public class CallLocalTest {public static void callLocalJava(){callLocalCJNI();}//https://blog.csdn.net/weixin_51380973private static native int callLocalCJNI();}

4、使用C++言格式编写cpp文件、.h文件

//https://blog.csdn.net/weixin_51380973
//native-lib.cpp
//${CMAKE_SOURCE_DIR}/include JNIEXPORT jint JNICALL Java_com_your_packetName_CallLocalTest_callLocalCJNI(JNIEnv
*env,jobject obj){   jint i;i=callRemoteCLibFuction();return i;
}
//https://blog.csdn.net/weixin_51380973
//main.h
//${CMAKE_SOURCE_DIR}/../jniLibs/include
//main.h内容参考remote-c.so中callRemoteCLibFuction所在头文件内容int callRemoteCLibFuction();

5、大功告成

JNI之java调用c库简单实例相关推荐

  1. linux平台 使用dlopen接口调用HelloWorld动态库简单实例

    动态库(libxxx.so)一种调用方式是在编译的时候的时候指定库名 -lxxx,另一种调用方式是通过dlopen在程序里加载动态库,然后调用相关接口.相关接口比较简单,包括打开动态库,解析库里提供的 ...

  2. 利用JNative实现Java调用动态库

    由于项目要求,需要用Java调用windows的dll文件,查了一下,如果用JNI的话是比较麻烦的,在sourceforge.net上搜索了一下 "Java dll",首先出现的是 ...

  3. Java调用动态库 缺点,Java调用动态库所需要关心的有关问题

    Java调用动态库所需要关心的问题 标签: 无标签 利用JNative实现Java调用动态库(转) http://cctv663.blog.163.com/blog/static/1011921220 ...

  4. 用Java 开发 WebService Axis简单实例

    用 Java 开发 WebService Axis 简单实例 在开发之前, 先了解一下AXIS,axis目前出现的2版本以其灵活性,快速开发工具的集成高于xfire而使用者居其上.用Eclipse开发 ...

  5. vue 调用webservice_js跨域调用WebService的简单实例

    步骤1. 在web.config中的system.web节点里加入 步骤2.webservice代码 using System; using System.Collections.Generic; u ...

  6. Appium+Java环境搭建及简单实例

    Appium+Java环境搭建及简单实例 一.下载jdk并配置好环境 二.下载Android-sdk并配置好环境 三.下载Eclipse软件 四.下载Node.js 下载地址:https://node ...

  7. 用Java调用C语言代码实例(JNI)

    为初步理解Java中native本地方法的使用,提出使用native方法实现计算任意正整数二进制的需求(native方法是Java中的本地方法,一般采用C/C++通过JNI(Java native i ...

  8. android jni 调用 java_Android与JNI(二) ---- Java调用C++ 动态调用

    目录: 1. 简介 2. JNI 组件的入口函数 3. 使用 registerNativeMethods 方法 4. 测试 5. JNI 帮助方法 6. 参考资料 1. 简介 Android与JNI( ...

  9. Java调用动态库(转载)

    记得以前 Java 要调用C/C++写得动态库都是用的 JNI 方式,还需要自己写不少 C/C++ 代码.比如说要在Java中调用已有的动态库,如 Windows 的 user32.dll 的方法 M ...

最新文章

  1. 【冷门实用小工具】JAVA和C#轻量级的UML图绘制工具NClass,UML类图编辑器免安装版【亲测有效】
  2. python open encoding为无效的参数_TypeError:“encoding”是无效的关键字参数ex23.py
  3. smarty半小时快速上手入门教程
  4. mysqldump导出数据库 (dos环境下)
  5. MYSQL--事务处理
  6. 关于SpringBoot下template文件夹下html页面访问的一些问题
  7. python做excel自动化-用python进行办公自动化都需要学习什么知识呢?
  8. 显示MSSQL SQL语句执行的时间
  9. 奥迪A8的L3级自动驾驶方案---奥迪A8的zFAS
  10. TortoiseGit的Reversion Graph图标颜色代表意义
  11. 推荐老牌挂机网赚 沙丁鱼流量联盟
  12. win10系统cpu内核或逻辑核心缺少缺少,解决办法
  13. 行波iq调制器_行波型LiNbO3电光调制器的电极优化设计
  14. Big Data 导论HadoopHDFS
  15. xp系统outlook突然无法连接服务器,outlook邮箱打不开是什么原因
  16. 思科CCNA认证课程内容
  17. Taste/Thoth:Taste Architecture 概览【转Beyond Search】
  18. P3354 [IOI2005]Riv 河流
  19. unity初写游戏(四)怪物产生方式
  20. 小程序生成网址链接,网址链接跳转小程序(附详细流程)

热门文章

  1. poi生成word文档后打开读取失败
  2. 华为Push用户增长服务:精准触达,加速增长
  3. 视频无损放大软件Topaz Video Enhance AI for Mac更新啦
  4. php字符串拷贝,PHP字符串还原
  5. 验证性实验:计算机网络常用命令
  6. Android设计模式详解之责任链模式
  7. 【C#】公元前后天干地支纪年法
  8. 使用C语言打印99乘法表
  9. 光流测速和视觉里程计
  10. pwm整流器及其控制_T型三相三电平整流器的控制实现和仿真