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

相关文章

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SpringBoot如何访问jsp页面

《SpringBoot如何访问jsp页面》本文介绍了如何在SpringBoot项目中进行Web开发,包括创建项目、配置文件、添加依赖、控制层修改、测试效果以及在IDEA中进行配置的详细步骤... 目录SpringBoot如何访问JSP页python面简介实现步骤1. 首先创建的项目一定要是web项目2. 在

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景:

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四:

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超