android应用程序jni访问C库

2024-09-05 22:18

本文主要是介绍android应用程序jni访问C库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

应用程序访问C库 –通过jni访问

如果应用程序,需要访问C的动态库,可以通过ndk的方式生成动态库,也可以在ubuntu中通过命令行得到动态库。本文通过命令行的方式得到动态库libhardcontrol.so

交叉编译

arm-linux-gcc -fPIC -shared hardcontrol.c -o libhardcontrol.so -I /usr/lib/jvm/java-1.7.0-openjdk-arm64/include/ -nostdlib libc.so的目录

编译出的文件libhardcontrol.so
如果在android系统级别的开发,动态库可以在 /vendor/lib 或者 /system/lib 下;
也可以在 应用程序包中

应用程序中,怎么操作

app/libs/下创建armeabi子目录。放入so文件
修改 app下的build.gradle

sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}

可能会出现找不到lib.so.6
在/vendor/lib/ /system/lib/libc下没有这个lib.so.6

可以在编译的时候添加 -nostdlib 这样不会自动的使用标准的ilibc
此时需要指定使用那个
find -name “libc.so”
找一个版本比较高的
-nostdlib so的目录

arm-linux-gcc -fPIC -shared  hardcontrol.c -o libhardcontrol.so  -I /usr/lib/jvm/java-1.7.0-openjdk-arm64/include/    -nostdlib libc.so的目录

总结

  • 仅仅是应用程序通过jni的方式访问C库。那么就是在jni中进行操作或者访问硬件。
  • 如果在android系统级别的开发中,对于硬件的访问一般是用通过hal来实现的。
    系统给应用程序提供访问C库或者硬件的服务。

参考文献

  • [Android Studio 之 NDK篇](
    http://www.cnblogs.com/ouyangduoduo/p/5900040.html)
  • javah 生成jni所需头文件
    在使用javah 生成头文件的实话,需要将目录的/ 改成 . 来进行。

这篇关于android应用程序jni访问C库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140220

相关文章

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De