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 的相关文章

随机推荐

  • 在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