当前位置: 首页 > news >正文

通过cmake在Android中调用c语言,且三方应用通过so库调用c语言

1、  新建JniUtils类实现native方法

 

2、  在build中执行clean project 再rebuild project 生成class文件。

注意:最新版本的AndroidStudio中classes文件的路径是在\app\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes。而原来的版本classes路径是在\app\build\intermediates\classes

3、  通过javah -jni 生成对应的.h文件

注意:

3.1、在执行该命令时要在classes路径下执行,否则会报找不到JniUtils的类文件,且执行时不带文件后缀

3.2、生成的.h文件也是在classes路径下

.h路径:

 

成功时:

失败时:

 

4、  新建jni文件夹,把上述中的.h文件拷贝到jni文件夹下,且在jni路径下新建一个c语言文件,实现.h中的方法(注意方法名要保持一致)

 

 

 

5、  接下来开始通过cmake生成so文件

5.1、把CMakeList.txt文件拷贝到app路径下,注意CMakeList中的一些设置,在add_library中要设置需要编译的源文件,在target_link_libraries中要设置输出的so文件名,eg设置为serial_port则生成的so名为libserial_port。执行完之后,要右键app,选择Link C++ project with grade

 

 

 

5.2、在app路径下的build.gradle中配置cmake,且在JniUtils.java中设置System.loadLibrary注意libname为在CMakeList中设置的保持一致

5.3、点击sync工程之后,在clean Project时,如果报如下错误,则重启AndroidStudio试下,大概率的能成功clean

5.4、通过上步的clean Project之后,再Rebuild Project会生成so文件,路径如下

 

6、  把上述生成的so库拷贝到libs路径下,运行即可。

7、三方应用如果也想调用上述的so文件方法如下

 7.1、需要把so拷贝到libs路径下,然后在app路径下的build.gradle中的android里设置

 

 7.2、也要创建对应的native方法,注意路径要和so库里的路径完全一样。然后就可以成功调用了

 

 

 

参考demo:https://github.com/lelelongwang/TestApp

转载于:https://www.cnblogs.com/longjunhao/p/10220173.html

相关文章:

  • request设置属性 一般当做下一个页面的结果集
  • Niagara基于javascript的控件开发
  • SpringBoot之打成war包部署到Tomcat
  • 基本数据类型中的浮点类型
  • MyBaits 常见面试题
  • 洛谷p1072 gcd,质因数分解
  • 大结局---Miracl库下完全实现SM2加密算法
  • php封装生成随机数函数
  • 洛谷P3372 【模板】线段树 1
  • python3 练习题100例 (二十九)猴子吃桃问题
  • Floyd判断环算法总结
  • freemarker导出定制excel
  • [bzoj1324]Exca王者之剑_最小割
  • Spring Boot 学习笔记(二)第一个 Spring boot 程序
  • 计算机的门电路和加减乘除
  • hexo+github搭建个人博客
  • JS 中的深拷贝与浅拷贝
  • 时间复杂度分析经典问题——最大子序列和
  • Android单元测试 - 几个重要问题
  • CSS实用技巧
  • E-HPC支持多队列管理和自动伸缩
  • ESLint简单操作
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Java读取Properties文件的六种方法
  • java取消线程实例
  • js写一个简单的选项卡
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • MobX
  • webpack4 一点通
  • 从tcpdump抓包看TCP/IP协议
  • 码农张的Bug人生 - 初来乍到
  • 微信支付JSAPI,实测!终极方案
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 主流的CSS水平和垂直居中技术大全
  • 阿里云ACE认证学习知识点梳理
  • 阿里云服务器如何修改远程端口?
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # 数据结构
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (8)STL算法之替换
  • (C++17) std算法之执行策略 execution
  • (八十八)VFL语言初步 - 实现布局
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (转)shell中括号的特殊用法 linux if多条件判断
  • *1 计算机基础和操作系统基础及几大协议
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET 动态调用WebService + WSE + UsernameToken
  • .Net 知识杂记
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .NET性能优化(文摘)