如何将本地库加载到本地android代码中? (安卓工作室)

2024-03-30

我有一个 C 语言库,名为mylib在文件夹中jniLibs/your_architecture/mylib.so

在 Java 中,要加载库,您只需在源代码中键入该代码:

static {
  System.loadLibrary("mylib");
}

但是如何在本机 C 代码中(在 Android Studio 中)加载该库? 我补充说,该库不使用 JNI 约定,它是一个普通的共享库。


如果这可以帮助某人,这里如何在本机代码 c/c++ 中加载库:

1 -避免java.lang.UnsatisfiedLinkError: dlopen failed:将其添加到 build.gradle 中android堵塞 :

sourceSets {
    main {
        jniLibs.srcDirs = ['src/main/jniLibs']
    }
}

假设你的lib文件位于

src/main/jniLibs/{架构}/

(取决于你在哪里jniLibs文件夹,就我而言,它位于app/src/main/但最多的时候是在app/)


2 -在您的 CMakeList 中,将您的库添加为SHARED and IMPORTED通过添加以下块:

add_library(mylib SHARED
            IMPORTED
            )

3 -添加目标属性以找到您的库mylib.so通过添加以下块:

set_target_properties( mylib PROPERTIES 
IMPORTED_LOCATION 
${PROJECT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/mylib.so
)

我们在这里后退 (/../) 因为我们认为 CMakeLists.txt 位于

src/main/cpp/

不然的话,大部分时间都在app/文件夹,在这种情况下,我们不需要后退。

所以我们必须回到main/在进入之前jniLibs/


4 -添加你的库mylib到您的目标链接库:

target_link_libraries(native-library-jni
                      ..
                      ..
                      mylib
                      ..
                      ..
                      )

5 - Finally, to call methods of your lib mylib.so, you have to create/copy-past the header containing these methods signatures and include it in your source file : #include "mylib.h"

您现在可以调用您的方法[namespace::]method(args...)


Extra links :

项目源目录 https://cmake.org/cmake/help/v3.3/variable/PROJECT_SOURCE_DIR.html

CMAKE_SOURCE_DIR https://cmake.org/cmake/help/v3.3/variable/CMAKE_SOURCE_DIR.html

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

如何将本地库加载到本地android代码中? (安卓工作室) 的相关文章

  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • onBackPressed 隐藏 不破坏 Activity

    我知道如何取消后退按键 以便活动 主窗口保持可见 public void onBackPressed return 我的目标是隐藏该活动 但是 在没有完成它的情况下 您如何在 onBackPressed 事件中做到这一点 即我想达到 onP
  • NoClassDefFoundError:无法解析:Landroid/support/v7/appcompat/R$styleable

    新手尝试完成 Google 提供的我的第一个应用程序教程 在这个致命异常的过程中 我确实导入了很多随机包来消除许多事情的 无法解析 错误 例如 ActionBarActivity EditText Fragment LayoutInflat
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • C# 中条件编译符号的编译时检查(参见示例)?

    在 C C 中你可以这样做 define IN USE 1 define NOT IN USE 1 define USING system 1 system 1 IN USE 进而 define MY SYSTEM IN USE if US
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • 为什么拆箱枚举会产生奇怪的结果?

    考虑以下 Object box 5 int int int box int 5 int nullableInt box as int nullableInt 5 StringComparison enum StringComparison
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • Android ScrollView fillViewport 不工作

    我有一个简单的布局 名称位于顶部 按钮位于屏幕底部 或者超出该按钮 以防我添加更多项目 所以我使用带有 LinearLayout 的 ScrollView 如下所示
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • Jenkins 声明性管道:如何重命名“声明性:后操作”步骤?

    我有一个声明式管道 如下所示 pipeline stages post success failure 它导致最后一步的创建 称为 声明性 后置操作 Q 如何重命名 声明性 操作后 步骤 我想要一个有意义的名称 例如 发送电子邮件通知 UP
  • UIButton 上的 iOS NSAttributedString

    我在用着iOS 6 所以属性字符串应该很容易使用 对吗 嗯 没那么多 我想做的事 使用自定义子类UIButton 它没有做任何定制的事情titleLabel 我想要一个多行属性标题 即 第一行全部大写 我意识到这不是属性的一部分 Bolde
  • git diff - 仅显示远程上的新内容

    我在 github 上有一个本地存储库和一个远程存储库 由于商业原因 它们不同步 我已经在我保留的本地上做了很多工作 现在我手动将远程的所有新内容添加到我的本地 没有分支机构 当我使用该命令时 git diff color master o
  • 向 JsonOutputFormatter 构造函数提供 ArrayPool 对象

    从 net RC2 升级到 RTM 后 我发现我需要向派生自 ArrayPool 的 JsonOutputFormatter 构造函数提供一个参数 我如何获得这个对象 我手动新建 JsonOutputFormatter 因为我需要配置 Re
  • Quartz API 和 Joda Time API 之间有什么关系吗?

    是否可以在 JodaTime 中创建一个日期 然后让 Quartz 使用 JodaTime 对象安排作业 我们可以给 Quartz API 一个Period jodaPeriod 以便在一天中的特定时间段内运行任务吗 这两个 API 是否相
  • C++ char 数组输入 - 解释

    我有一个练习 编写一个程序 接收一个句子 然后从每个单词中取出第一个字母并创建一个新单词 我的代码 int main char str new char 50 for int i 0 i lt 50 i str i NULL cin gt
  • 预提交钩子文件暂存以进行提交

    如果您在 Git 中有一个用于创建 或修改 文件的预提交挂钩 那么该文件是否需要暂存才能提交 例如 如果我有一个预提交挂钩来创建某些代码的缩小版本 我是否需要git add那个缩小版本可以包含在提交中吗 是的 您必须自己将文件添加到索引中
  • 是否可以通过 Pip 安装部分 Python 包?

    我有一个被许多项目使用的内部实用程序库 从实用程序库中提取的代码中的项目之间有相当多的重叠 但随着库的增长 任何单个项目获得的不会使用的额外内容也会增加 如果该库仅包含 python 那么这不会成为问题 但该库也捆绑在二进制文件中 Exam
  • 一行中两个等号?

    有人可以解释一下这是做什么的以及它如何是合法的 C 代码吗 我在这段代码中找到了这一行 http code google com p compression code downloads list http code google com
  • 如何在一台服务器上部署nodejs api和vuejs应用程序

    我开发了 Node Rest api 和 vuejs Web 应用程序 我正在尝试将这两个项目部署到一台运行 ubuntu 的 aws 服务器上 两个应用程序都有不同的端口 我尝试为 api 配置 api example com 为 vue
  • XML-RPC 方法可以在 Python 中按名称(作为字符串)调用吗?

    在 python 中 调用 XML RPC 方法涉及调用代理对象上的方法 from xmlrpclib import ServerProxy print ServerProxy https example com rpc api hello
  • 隐藏的 YouTube 播放器失去了方法

    我正在使用 javascript 控制嵌入式 youtube chromeless 播放器 并且我想偶尔通过设置 display none 来隐藏它 然而 当我再次向播放器展示时 它失去了 YouTube 方法 例如
  • .NET MVC3 Razor (VB!) 扩展未在视图中导入?

    我的扩展未导入到我的 vbhtml 视图中 我似乎在某个地方遗漏了一些东西 有人可以帮忙吗 模块 vb Imports System Runtime CompilerServices Namespace Areas Admin Models
  • Arel、联接和 Rails 查询

    我最近被一个问题困扰了一段时间 并找到了 Arel 的方法 它看起来应该允许我在查询中执行 OR 操作 作为起点 我需要将现有的 Rails 3 查询转换为 Arel 这就是我遇到问题的地方 以下范围和查询按我的预期工作 它向我提供与特定用
  • 如果 std::map 被清除,是否确保内存被释放

    If a std vector vec被清除vec clear 分配的内存不得立即释放 这size向量的值将为零 但capacity将 可以不变 这是一种非常有益的行为 因为可以清除一个大向量并为其分配新值 而不需要昂贵的内存解除 分配 内
  • 从 CGRect 中减去 CGRect——其中最大的一块不包含另一个

    我怎样才能减一CGRect来自另一个 我想要结果R1 R2是 R1 中不与 R2 相交的最大子矩形 实施例1 R2 R1
  • 括号中的 Console.log 错误

    每次我尝试使用 console log 时都会遇到这种错误 错误 意外的控制台语句 无控制台 console log 名称 is a 年龄 岁数 工作 谁已婚 isMarried 36 错误 控制台 未定义 no undef console
  • 新的 Voided Purchasing API 的用例是什么

    谷歌刚刚推出无效购买 API https developers google com android publisher voided purchases Google Play 作废购买 API 允许您撤销对与用户已作废的购买相关的应用内
  • 如何将 Thymeleaf 显示的字符串大写到页面中?

    我正在开发一个使用 Thymeleaf 作为模板引擎的 Spring MVC 应用程序 并且我正在尝试将页面中显示的一些字符串大写 在我的页面上有这样的内容 li class com nav item a href class com na
  • 如何将本地库加载到本地android代码中? (安卓工作室)

    我有一个 C 语言库 名为mylib在文件夹中jniLibs your architecture mylib so 在 Java 中 要加载库 您只需在源代码中键入该代码 static System loadLibrary mylib 但是