Android Studio 使用jni调用第三方so

2023-05-16

源码部分

项目需要调用第三方so函数,由于需要调用的函数不符合jni规范,这里用jni调用编写的native方法,native方法再调用三方so函数。

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := libxxx
LOCAL_SRC_FILES := libxxx.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libyyy
LOCAL_SRC_FILES := libyyy.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := HelloJni
LOCAL_SRC_FILES =: HelloJni.cpp
LOCAL_SHARED_LIBRARIES := \
    libxxx   \
    libyyy 

include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_MODULES := HelloJni
APP_PLATFORM := android-16  #对应平台版本 主要指定了ndk目录下对应platform资源
APP_ABI := armeabi-v7a   #编译目标ABI   =all 表示全部  #由于使用了三方so,需要对应三方so的类型#

安卓load部分

static {
		//有依赖关系要注意load的先后顺序
        System.loadLibrary("xxx");
        System.loadLibrary("yyy");
        System.loadLibrary("HelloJni");
    }

编译相关

ndk配置:
File->Project Structure中可以快速配置,没有资源可以直接Download

使用External Tools
打开File->Settings->Tools->External Tools
点击 + 新建:
示例
Program: /你的ndk路径/ndk-build.cmd
Working directory: $ModuleFileDir$\src\main

添加完成后,点击右键选择External tools->ndk-build 即可进行编译。(源码文档齐全)

编译成功后,将生成的 libxxx.so libyyy.so libHelloJni.so 放入src/main/jniLibs目录即可使用。
或者也可以使用将jniLibs修改为src/libs

sourceSets.main {
	jniLibs.srcDir "libs"	
}

兼容性问题

在不同终端上使用时发现会有兼容性问题。
三方库使用系统库函数,而不同终端平台系统库有差异,导致有时候会报错。

Cannot load library: soinfo_relocate(linker.cpp:975): cannot locate symbol "__strncpy_chk2" referenced by "libxxx.so"

这个问题困扰了很久,在网上查找资料多说是ndk版本问题,一再尝试都失败。
最后定位了__strncpy_chk2应该在libc.so中,导出了终端上对应的libc.so文件,使用nm命令查看发现果然没有这个symbol 。(有点鸡肋的问题,希望对遇到相同问题的人有帮助)

参考:https://blog.csdn.net/findsafety/article/details/72821732

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Studio 使用jni调用第三方so 的相关文章

  • 意图?如何注册以获得传入电子邮件提醒?

    这里是极限 Android 开发新手 好吧 Android 开发新手 而不是一般开发 我想编写一个应用程序 当电子邮件进入设备时会收到通知 并根据电子邮件中的数据 主题 发件人 收件人等 采取各种操作 我认为我要做的是创建一个带有 Inte
  • 不同 Android 设备上 box2D 中出现奇怪的“口吃”

    我正在用 C 同时开发引擎和游戏 并使用 box2D 作为物理后端 我正在不同的 Android 设备上进行测试 在三分之二的设备上 游戏运行良好 物理效果也很好 然而 在我的 Galaxy Tab 10 1 上 我偶尔会遇到某种 口吃 的
  • 如何从一个活动中完成一系列开放的子活动?

    我正在尝试为我的应用程序制作一个退出按钮 无论如何 我能够跟踪我的应用程序中的所有活动实例 然后完成它们 但在某些情况下 仍有一些活动仍然存在 不知道怎么办 有没有什么方法可以杀死android中的特定应用程序 或者我可以通过任何其他方式退
  • Android Manifest 自动生成无效权限

    我不小心在 Android 清单中输入了无效的权限名称 并且无法将其删除 这是我的清单代码
  • OPENGL ES 不工作:无当前上下文

    我尝试了 OpenGL ES2 for Android 一书中所示的程序 但它不起作用 我已经在Odroid E 三星s3 三星y 三星star上进行了测试 the gl version suported returns 2 but i g
  • Android向后兼容技术

    我现在在开发基于最新 API 15 ICS 的 15 项活动 Android 应用程序方面取得了进展 现在我发现应用程序的主要功能主义者即使支持 android v4 也不向后兼容 例如 1 fragment事务动画 2 将StringSe
  • 导航组件参数默认值

    在导航组件中 将参数从第一个片段发送到第二个片段时 默认值不会从导航图中获取哪个集合 这是我的代码 导航图 xml
  • 有没有办法将搜索栏添加到我的实际首选项屏幕?

    我一直看到有关添加您自己的搜索栏首选项的教程 但它不在我实际的 prefs xml 中 有什么方法可以在我的主偏好设置屏幕中添加一个 或者我必须将其分开 Google 似乎有 2 个滑块首选项 搜索栏首选项 https github com
  • Android 8.1 中 Activity 自行旋转并恢复正常

    我的应用程序在所有 Android 版本上运行良好 但我注意到在 Android 8 1 0 Oreo 中 当我将屏幕从纵向活动转到横向活动时 以及当我按后退按钮时 它会显示异常行为 屏幕自动从横向旋转并恢复正常 看起来 Activity
  • 使用 RxJava 限制吞吐量

    我现在遇到的情况很难解释 所以我会写一个更简单的版本来解释这个问题 我有一个Observable from 它发出一系列由ArrayList文件数量 所有这些文件都应上传到服务器 为此 我有一个函数可以完成这项工作并返回一个Observab
  • 更改 Android 中的媒体音量?

    我可以更改媒体音量吗 如何 到目前为止我用过这个 setVolumeControlStream AudioManager STREAM MUSIC 但有一个搜索栏并且想要更改媒体音量 而不是铃声音量 那么有人可以告诉我如何更改媒体音量onC
  • 使用 mupdf android 库导航到特定页面

    我如何使用 muPDF 库导航到特定页面 或者有没有办法让图书馆不记得我最后在那个pdf文件中浏览的是哪一页 Uri uri Uri parse path Intent intent new Intent MainActivity getC
  • 将图像保存到内部存储器并将出现在图库中

    我搜索了很多与我的问题相关的问题 是否有办法将图像存储在内存中并且它也应该出现在图库中 这是完全有可能的 我以前也这么做过 在将图像保存到内存 或称为应用程序文件夹等 之前 您最好设置Context MODE WORLDREADABLE 虽
  • android 多关键词搜索

    我的应用程序包含搜索功能 它将搜索数据库内的内容 我的搜索的弱点是 我只能使用一个标签进行搜索 例如我只能搜索 猫 它会返回我的数据库中包含 猫 一词的内容 因为我正在使用LIKE在 select 语句期间进行查询 如何使用多个标签进行搜索
  • Android - 多次实例化一个片段?

    我正在创建一个在 ListView 中显示数据的应用程序 数据分为两种类型 热门 收藏夹 我有一个活动和两个片段 片段根据类别显示项目列表 我为此使用了 ListView 然后我有两个fragment layouts 它们在设计上完全相同
  • Spotify 登录错误 INVALID_CLIENT:无效的重定向 URI android

    我正在制作一个包含 Spotify 集成的应用程序 我点击了此链接https developer spotify com technologies spotify android sdk tutorial https developer s
  • 在片段之间切换时底部导航栏会向下推

    在我的活动中 我有一个底部导航栏和框架布局来显示片段 一切正常 但问题是当我开始按顺序从 1 4 移动时 底部导航栏保持在其位置 但当我突然从 4 跳到2 然后底部导航栏就会超出屏幕 当再次单击同一项目时 它就会回到正常位置 该视频将清楚地
  • 如何在 onDraw() 方法中定义与像素无关的高度

    我扩展了 View 来构建自定义小部件 我想用独立的像素单位定义小部件的高度 我认为可以通过将像素密度乘以所需的高度来完成 但我不知道该怎么做 到目前为止我所拥有的 最小化 public class Timeline extends Vie
  • 制作弹跳动画

    我想做图层的弹跳动画 我已经完成了该图层从右到中心的操作 现在我想将其向后移动一点 然后回到中心 这会产生反弹效果 我想我可以用这样的翻译来做到这一点
  • Android Espresso - 如果未选中,请单击复选框

    I have onView withId R id check box perform click 但我只想在尚未选中该复选框时执行此操作 我怎样才能在浓缩咖啡中做到这一点 我还想根据其之前的状态来切换复选框 开关 起初 我尝试用此方法打开

随机推荐

  • 在Ubuntu20/debian10 上安装向日葵

    Ubuntu20 04 debian10 安装 向日葵 1 首先下载向日葵安装包deb 选择linux平台的Ubuntu Deepin 2 安装 安装时会发现不能安装 sudo dpkg i SunloginClient 10 1 1 38
  • 彻底永久禁止Win10自动更新工具Windows Update Blocker v1.6 汉化版

    你是否已经被一开机关机就自动更新的电脑系统折磨疯了 xff0c 这还不算啥当你更新了最新版本还有可能出现各种BUG xff0c 甚至蓝屏黑屏不得不退回之前的版本 以往的Windows10系统我们还可以通过禁止更新服务 xff0c 设置一些本
  • 两款投屏和跨屏协作软件

    在这两款软件的帮助下 xff0c 我在手机 电脑还有平板之间实现了原本要在同个生态下才能实现的跨屏协同 xff0c 不用花钱凑齐全家桶 xff0c 效果照样杠杠的 xff01 来 xff0c 先给你们介绍下我发现的第一个软件 AnLink
  • 在LINUX-DEBIAN系统下挂载新硬盘的方法

    LINUX DEBIAN系统下挂载新硬盘的方法 总共六个部分 xff0c 一起来看看吧 xff0c 非常简单的 一 fdisk l 查看硬盘的使用情况 xff0c 也就是哪些硬盘没有挂载 下面显示的 xff0c 三块硬盘 xff0c 其中二
  • linux root 文件修复,The root filesystem on /dev/sda1 requires a manual fsck...

    bin sh can 39 t access tty job control turned off initramfs 出错原因 xff1a 磁盘检测不能通过 xff0c 可能是因为系统突然 断电 或其它 未正常关闭系统 导致 在错误信息里
  • Linux 自动休眠功能的关闭方法

    CDLinux 自动休眠功能的关闭方法 xff1a 控制台下使用xset命令来完成 xset q 可以查看当前屏幕保护和电源管理的状态信息 具体设置时 xff0c 常用的有以下参数 xff1a xset s 这个参数设置屏幕保护时间 xse
  • Linux 串口调试工具汇总

    在 linux 系统下进行串口调试或者开发时配合简单易用的串口调试工具那是必不可少 这篇博客对当前用的较多的 xff0c 且我自己经常用的一些串口工具做一下汇总 xff0c 大家可以参考一下 实验环境 xff1a OS Ubuntu16 0
  • 一、A/B升级之系统image的生成

    一 A B升级之系统image的生成 本篇将对AB升级打开宏开关后make 和 makeotapackage的流程做分析 xff0c 下面这张图是之前文档中所提到的按照对应文件打开宏开关 xff0c 即可开启AB升级 xff0c 但是代码里
  • python 获取当前年份,日,月,小时,分钟,秒

    from datetime import datetime def someMethod currentSecond 61 datetime now second currentMinute 61 datetime now minute c
  • Ubuntu18.04 安装gnome-tweak-tool安装TopIcons Plus | 解决软件图标不显示问题 | 解决坚果云图标不显示问题

    1 安装gnome tweak tool 终端执行命令 xff1a sudo apt install gnome tweak tool 在所有应用程序中搜索 34 tweak 或 34 优化 xff0c 即可启动 2 安装TopIcons
  • 爬虫(一)基础介绍

    文章目录 1 爬虫简介1 1 robots协议1 2 反爬手段1 3 请求组成1 4 响应组成1 5 POST 请求与 GET 请求 2 requests库2 1 GET请求2 2 POST请求2 3 代理 1 爬虫简介 网络爬虫也叫做网络
  • Gradle 和 Gradle Wrapper 到底是什么关系。

    Gradle Wrapper 我们推荐使用 Gradle Wrapper 执行gradle 构建 xff0c xff08 后面简称Wrapper xff09 Wrapper 实质上是一个脚本 xff0c 这个脚本使用申明版本的gradle
  • 【AD16】PCB设计时元器件怎么放到板子背面

    1 首先拖动元器件 2 再按 L 键 3 放置即可
  • C++语言及网络编程书籍整理

    C 43 43 语言及网络编程书籍整理 作者 谢勇 都是我看过或正要看的书 xff0c 晾晾书架 xff0c 希望对后来者也有一点作用 xff0c 当年我也是浪费时间看了一些没有价值的书籍 xff0c 颇为后悔 xff0c 现将精华总结如下
  • Kotlin在Android Studio中安装与配置

    Kotlin的安装与配置 因为本人使用的开发工具是Android Studio xff0c 所以这里只说明一下Kotlin在Android Studio中的安装与配置 Kotli插件的安装 在安装Kotlin插件之前 xff0c Andro
  • Makefile Android.mk 引发的思索(转)

    Makefile Android mk 引发的思索 转至 xff1a https www cnblogs com quansir p 4269951 html 在我们编写 Android 平台 cocos2d x 游戏的时候 xff0c 我
  • Kali Linux Gnome 环境下使用全局菜单

    Kali Linux Gnome 环境下使用全局菜单 2022 09 24 文章目录 Kali Linux Gnome 环境下使用全局菜单1 目标2 预备3 操作3 1 安装3 2 配置3 3 启用3 4 测试3 5 自启 1 目标 Gno
  • 发布jar到本地仓库

    Android Studio 在Module的buill gradle文件中添加插件 apply plugin span class token operator span span class token string 39 maven
  • AOP切面以及@Valid注解执行顺序

    结论 SpringBoot是先执行 64 Valid注解再执行切面 所以无法将AOP的触发位置移动到 64 Valid之前 自定义注解如果想要在 64 Valid校验之前触发 要么通过拦截器 但拦截器对参数的获取较为麻烦 建议使用Contr
  • Android Studio 使用jni调用第三方so

    源码部分 项目需要调用第三方so函数 xff0c 由于需要调用的函数不符合jni规范 xff0c 这里用jni调用编写的native方法 xff0c native方法再调用三方so函数 Android mk LOCAL PATH 61 ca