通过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
通过cmake在Android中调用c语言,且三方应用通过so库调用c语言的更多相关文章
- Android中通过WebView控件实现与JavaScript方法相互调用的地图应用
在Android中通过WebView控件,可以实现要加载的页面与Android方法相互调用,我们要实现WebView中的addJavascriptInterface方法,这样html才能调用andro ...
- android中按电源键锁屏然后解锁导致Activity调用onDestory以及如何防止锁屏
今天在android项目中按电源键锁屏,然后解锁,发现子Activity关闭了,回到了主页,这个问题困扰了我很久,最后打log发现,在按电源键的时候,调用了子Activity的onDestroy()方 ...
- Android中关于JNI 的学习(零)简单的样例,简单地入门
Android中JNI的作用,就是让Java可以去调用由C/C++实现的代码,为了实现这个功能.须要用到Anrdoid提供的NDK工具包,在这里不讲怎样配置了,好麻烦,配置了好久. . . 本质上,J ...
- android中SharedPreferences
SharedPreferences:用于存储少量并且数据格式简单,基本上都是普通的字符串,标量类型的值,比如:应用程序的各种配置信息等. SharedPreferences:保存的数据格式主要是key ...
- 在 Android 中如何调用 C 语言?
当我们的 Java 需要调用 C 语言的时候可以通过 JNI 的方式,Java Native Interface.Android 提供了对 JNI 的支持, 因此我们在 Android 中可以使用 J ...
- Android中实现如下多语言选择Radiobutton效果
手边的samsung手机设置多语言的方式一般是点击设置多语言的一栏后进入到多语言选择界面,选择完成之后当前的语言环境用小字方式直接显示在设置多语言栏的下方.另一种选择多语言的方式如上图所示,我也在系统 ...
- 在Android 中使用KSOAP2调用WebService
WebService 是一种基于SOAP协议的远程调用标准.通过WebService可以将不同操作系统平台,不同语言.不同技术整合到一起.在Android SDK中并没有提供调用WebService的 ...
- android 中调用接口发送短信
android中可以通过两种方式发送短信 第一:调用系统短信接口直接发送短信:主要代码如下: //直接调用短信接口发短信 SmsManager smsManager = SmsManager.getD ...
- 在Android中调用WebService
某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查.我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数 ...
随机推荐
- .NET Core/.NET5/.NET6 开源项目汇总9:客户端跨平台UI框架
系列目录 [已更新最新开发文章,点击查看详细] .NET Core 实现了跨平台,支持在 Windwos.Linux.macOS上开发与部署,但是也仅限于Web应用程序.对于Windows桌面 ...
- 将Flink计算完毕后的数据Sink到Nebula
Flink是目前流计算的隐形王者,在国际国内有有庞大的拥趸. Nebula是国产图数据库的后起之秀,在DBEngines中排名也逐年上升. 将两者进行结合,可以产生很多应用场景:比如实时计算服务链路调 ...
- 39、wget、curl
39.1.wget介绍: wget命令用来从指定的URL下载文件.wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败, wget会不断的尝试,直到整个文件 ...
- POJ 3126 Prime Path 简单广搜(BFS)
题意:一个四位数的质数,每次只能变换一个数字,而且变换后的数也要为质数.给出两个四位数的质数,输出第一个数变换为第二个数的最少步骤. 利用广搜就能很快解决问题了.还有一个要注意的地方,千位要大于0.例 ...
- 国内CRM客户管理系统哪个好用
在企业管理者对CRM系统进行选择的时候,面对搜索引擎上各种各样的结果和各种广告,肯定会有这样的疑问:CRM客户管理系统到底是哪一个好?除了网络上那些为了广告效果而"夸大其词"的优点 ...
- WebService:java配置类形式发布WebService接口及遇见的问题总结
配置WebService前需要以下依赖jar包 #版本只供参考,具体看项目 <dependency> <grouId>org.apache.cxf</grouId> ...
- Maven:手动添加jar包进Maven本地库内
正常maven依赖jar包的pom.xml写法如下: <!-- https://mvnrepository.com/artifact/ojdbc/ojdbc --><!-- (参数一 ...
- 2shell中处理字符串,字符串的截取、替换
0.字符串的小知识点 1.字符串的截取 1.1从指定位置开始截取 1.2 从指定字符(子字符串)开始截取 1.3字符串截取的总结 1.4 按指定要求截取 2.字符串的拼接 3.字符串的替换 0.字符串 ...
- org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class
错误:org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util ...
- XCTF Normal_RSA
这题本来算是很常规的rsa了,下载附件 发现有个公钥文件,还有一个加密文件,这种题之前有遇到一次,做法和这个类似,上次那个是用rsa的库,直接解的,这次直接用常规的,好像更简单,记录下模板 记事本打开 ...