Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)

Android 简单使用第三方提供的.so和.h 前言: 刚来公司,接了一个项目(具体项目不便透露),其中涉及到一个socket数据传输的问题,这里当然就不可避免的用到了.so动态库进行实现。接触过jni的应该都知道,Android调用.so库其实很简单,不就是直接static { System.loadLibrary(“aaron”); }吗?其实我救算这么想的,但是直到我拿到.so和.h文件之后才发现我错了。好了,废话不说了,进入正题: 实现... 阅读详情

简单说下此文的目的:

1.如何自己 生成 so包跟H头文件 给别人使用。

(常见使用第三方给的,但是怎么生成就???,此文介绍。)

2.如何使用这个so包跟H头文件 自己再生成新的so包。

(这个就基本上都会用了,这里是为了配合1介绍)

第一步:先使用AS创建一个支持C/C++项目。


第二步:创建项目后在cpp文件夹下面创建一个h文件和一个cpp文件


1.h文件和cpp文件里面这里就随意写一个求和的


第三步:修改CMakeLists.txt文件。

这里只是改了生成的包名。和加入Hello.cpp文件


第四步:编译 运行。这里虽然没有调用Hello.cpp里面的方法,但不影响so包的生成。

由于我在build.gradle里面指定了生成版本所以这里只有v7a的。


到此,第一个so包生成,而且跟其他博客介绍的一样到这里应该没什么大问题。

接下来 才是重点,怎么在另一个c++项目里引用这个so。

第五步:现在再新建一个支持C/C++项目,跟第一步一样,

然后把第一个项目生成的libhello.so放到新建的armeabi-v7a文件夹下面

把第一个项目创建的Hello.H文件放到新建的include文件夹下面


第六步:修改CMakeLists.txt文件,这里跟上面一样为了方便看删掉了官方注释。

            加入头文件引用和动态链接so包。这里是第一个项目的so包跟头文件。


第七步:在MainActivity里面创建一个方法 adds() 并在native-lib.cpp文件中生成对应的方法调用so包里面的方法。

        注意引用头部最好加入include



第八步,同样的编译运行。下面是产生的新的libnative-lib.so包和调用运行的结果。




到此为止,在jni里面调用so包的方法完成,并产生第二个新的so包。

这里说一下这样做的原因,大部分是因为第三方会给这样的so包配合h头文件使用。

同时也清楚这其中的使用流程。尤其是第一个项目生成so包和h头文件给第二个项目使用的流程。

这样做目的当然是为了不想让你看到实现方法。也无法修改实现方法。以及一些商业机密。

在这里难免有些步骤出错,导致包找不到,或者类找不到,所以我放到另外一篇文章,供参考。

https://blog.youkuaiyun.com/SXH_Android/article/details/80700963


项目的demo

项目一:

https://github.com/talentsxh/HelloApplication

项目二:

https://github.com/talentsxh/TestHello



重温android studio jni编译生成so文件 步骤: 1、创建一个android工程 2、编译工程,Buiid->Make Project生成class文件 3、配置NDK 4、创建一个NdkUtil类 5、创建main.c和一个空的c文件empty.c 6、编译工程,生成so文件 7、复制so文件到jniLibs下 8、完成 具体实现: 1、创建一个android工程(这个就不废话了) 2、编译工程,Bui 阅读详情

相关推荐

android studio之jni(上)生成so文件

使用android studio做ndk开发相对于eclipse无疑要简单很多,那么下面我将做详细的步骤介绍: 1、下载ndk (最好使用最新版本的ndk ,我现在使用的ndk版本是android-ndk-r11c,studio版本是2.1.1) 2、新建项目 3、设置ndk路径 4、新建一个moudle 选择android library  命名为hellojni  (下

wangsfine的博客 7265

AndroidStudio生成SO文件

AndroidStudio生成SO文件 生成so的方式可能有多种,这里说一种简单的方式。具体由如下三步 下载配置ndk,编写java调用so的native方法; 生成.h头文件夹,编写c/c++文件,编写Android.mk,Application.mk文件; 编译并使用SO文件; 1.下载配置NDK,编写java方法 下载NDK: 在 file->settings->Androi...

xiaoYuDAxiao的博客 5691

Android Studio NDK开发并调用so库

前言 什么是NDK? NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。NDK集成了交叉编译器(交叉编译器需要UNIX或LINUX系统环境),并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就...

FZeroTHero的博客 2894

Android Studio上生成Jni.h头文件和jni函数名的两种方法

1、(方法一)根据编译的.class生成Jni.h头文件和jni函数 1.1在java的类文件中预置想要的native接口 1.2 点击make project(Ctrl+F9)后确认class文件已生成 我AS下class的生成路径在: 工程目录下\app\build\intermediates\javac\debug\classes\com\example\myapplication 1.3 由javah -jni命令对class文件生成头文件 ​ 备注:我这台电脑的javah命令在路径 “D:\P

hdmsfhfg1的博客 3539

android jni方式调用c++代码并在其它app中使用生成的.so文件

搞了一下午终于明白了一点机制,网上的代码太乱了,很多不经过验证就转载的,强烈谴责这种行为,以下所写都是android studio测试运行过的,欢迎交流指正。运行前提是在project structure中配置好ndk路径。想看入门demo的童鞋不要再到处下载了,ndk文件目录下有一个samples,里面都是官方demo,例如hello-jni,不过是eclipse的项目哦。 1.使用androi

lishaobo211985的博客 4540

Android studio调用第三方so文件(成功)

踩了很多坑,走了很长的路,网上各种各样的说法把我整得晕头转向,最终还是成功了,这里自己总结一下,也顺便分享有需要的伙伴。 如何利用ndk编译我这里就不说了。在linux中进行ndk编译:https://blog.csdn.net/FZeroTHero/article/details/89308312 在Android studio中ndk编译:https://blog.csdn.net/FZero...

FZeroTHero的博客 7173

Android Studio中生成.h文件及将jni文件打包成so包

3.在app的build.gradle中增加如下内容,防止Android.mk找不到。4.命令进入jni,然后执行ndk-build则会生成对应的so包。5.so包生成在libs下,so包放置位置。,将.c文件放到此目录下,同时将。及相关的依赖文件放入此目录下。

fuzhongbin的博客 1452

使用JNI在android studio中调用AOSP环境下编译的 so库

在android studio中调用AOSP环境下编译的so库的一种实现方法。android studio的编译环境比直接在AOSP环境里写java要直观和方便,但是android studio对C++又支持的不太好,确实是可以新建native C++工程,但是cmake又麻烦,且有不少同学的AOSP代码在Linux下,android studio在windows下。。编译又是问题。。所以不如各取所长,在android studio下生成JNI头文件和实现java层,在源码环境下编译JNI和本地函数。用J.

qq_42679700的博客 1398

android studio用Javah创建.h头文件和编译运行

android studio 初步JNI开发android studio在原有项目中使用cmake构建JNIandroid studio用Javah创建.h头文件和编译运行android studio继续深入ndk打包so库和jar Api首先一如既往的创建library module:jnilib,然后在jnilib\src\main\java目录中新建类JniUtil如下:package co...

w2865673691的专栏 4519

Android JNI编程并生成so库

android jni编程和学习

jack22001的博客 2007

Android studio 简单方便的使用JNI调用c语言中的方法

今天尝试了在Android studio中调用JNI,历尽千辛万苦终于成功了。不说废话,只谈步骤: 第一步:在gradle.properties文件中添加  Android.useDeprecatedNdk = true 第二步:将鼠标光标移到你的项目上按f4,选中SDK Location,这一步的是添加NDK,一般来说在最下面的NDK location是没有的,点击旁边的下载

小李的博客 6227

android studio通过 jni 调用第三方非标准 so库

android studio通过 jni 调用第三方非标准 so库

susu1083018911的博客 2087

Unity与 SO 交互 ☀️| 详细讲解 怎样通过 Android Studio 生成一个.so文件 并简单调用!

本文章是Unity与 SO 交互的内容,详细的将每一步都做了介绍,生成一个so文件其实很简单!该专栏还有多篇优质内容在等待你观看。

努力前行,总会成为自己心中的那道光 2万+

Android Studio中编写jni代码并生成so文件和jar包

实现:点击按钮,实现java与Native方法互调 1) 编写JNI测试代码 public class JNITest { static { System.loadLibrary("Hello"); } public native String test(); } 2)生成JNITest对应的c文件,实现交互 A:生成.c文件 javah -jni 包名.类名 把生成的.h文...

zhangwenhaojf40it的博客 1490

Android so库开发——Android Studio调用so库(二)

在中已经创建了自己的so库,这是一个JNI规范的so库,可以直接将so库放到libs中,并按照上面文章中MainActivity中的调用方法使用。1、build.gradle(app)配置2、加载so库中方法在Sudio中方法名虽然显示红色,但不影响使用。3、Activity中调用方法。

小旭的专栏 8029

WPS接入DeepSeek,实现AI辅助功能

总的来说,借助 WPS 中宏功能与 DeepSeek 大模型的结合,文档处理、内容创作和数据分析等任务都能更加智能化、自动化。这不仅大幅提升了工作效率,也为办公场景带来了全新的智能化办公体验。

运维老生常谈 3804

Android studio使用JNI实例(2)- 调用外部so库

本文详细介绍了Android APK开发如何使用外部库,每个步骤都详细谁明,大部分都配有截图,适合初学者参考。

whb_fei的专栏 1万+

51单片机学习(5)-----蜂鸣器的介绍与使用

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计 算机、 打印机、 复印机、 报警器、 电子玩具、 汽车电子设备、 电话机、 定 时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。1.半导体三极管也称为晶体三极管,可以说它是电子电路中最重要的器件。三极管顾名思义具有三个电极。二极管是由一个PN结构成的,而三极管由两个PN结构成,共用的一个电极成为三极管的基极(用字母b表示)。其他的两个电极成为集电极(用字母c表示)和发射极(用字母e表示)。

2302_80260350的博客 1万+

Android Studio 配置NDK并编译JNI文件so库 APP调用jni源码实例

Android:配置NDK并编译JNI文件so库 APP调用jni源码实例 一、Android studio 版本3.4.1 二、Android studio自带NDK 二、配置javah及ndk-build快速构建工具 1、配置ndk-build 用来编译jni,File-Settings-Tools-External Tools + Program:C:\Android\Sdk\ndk-bundle\ndk-build.cmd (根据自己............

海月汐辰 4805

使用LabVIEW创建和分析柱状图:从基础绘制到高级数据分析的完整指南

LabVIEW,全称为Laboratory Virtual Instrument Engineering Workbench,是由美国国家仪器公司(National Instruments, NI)开发的一款图形化编程语言。自1986年首次推出以来,LabVIEW凭借其强大的数据采集、分析和控制能力,在工程、科研、教育等领域得到了广泛应用。与传统的文本编程语言不同,LabVIEW采用了图形化编程方式,用户通过连接不同的函数节点来实现复杂的逻辑和算法。

qq_38334677的博客 774

Coze智能体开发:搭建一个解析 PDF 文件的工作流

大模型本身并不具备文件读取和解析的能力,无法直接处理文件字节流。对于支持工具调用(Function calling)的模型,扣子提供插件功能来帮助大模型调用外部工具 API,拓展大模型的能力边界。扣子插件商店提供海量官方插件和第三方插件,例如链接读取插件可以将链接对应的文件内容解析为纯文本传递给大模型。

王国平的博客 2812

Android Studio中如何编写JNI代码及编译so库

简单实例说明如何使用Android Studio NDK编译so库

Bright的博客 4030

LLC 谐振转换器中为什么需要 ( L_m )(励磁电感)

在每个模态中,励磁电感 ( L_m )、谐振电感 ( L_r ) 和谐振电容 ( C_r ) 分别承担着储存和释放能量、维持谐振电流和电压波形的任务。Q1和Q2的交替导通确保了这些元件能够在不同的模态下实现能量的有效传输和谐振状态的维持。励磁电感 ( L_m ) 在这一过程中起着不可或缺的作用,确保了电路的高效运行和稳定性。

weixin_43199439的博客 3652
上一篇: CMakeLists格式。
下一篇: NDK 调用so包以及找不到类出错。
SXH_Android
博客等级 码龄11年 16粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值