如何使用原生库

2024-01-10

例如,我有一个 C++ 库,名为HelperLib。我有一些假设:

  1. 我可以将这个项目编译成 *so 文件。 (通过一些在线教程帮助我在 Android 上构建这个库)。

  2. 我可以在 C/C++ 中使用这个库。通过图书馆网站上的官方教程。

  3. 我对本机库有基本的了解。例如,使用加载本机库System.loadlibrary(),例如调用简单的本机 C 函数。

当我决定在线使用一些 C++ 库时,我经常遇到这些假设。他们提供了如何使用的教程,还有一些提供了如何在 Android 上构建这个库的教程。

但尽管如此,我仍然不知道如何在 Android 上使用这个库。从哪儿开始?在使用这个库之前我应该​​做哪些更多的事情?例如。

///// this is a C++ source file to use library
int main() {
   HelperLib lib = new HelperLib(); // just for example
   lib.initialize();
   /// demo how this library was used
   lib.makeConnection();
   lib.closeConnection();
   return 0;
}

基于上面的代码,我可以将其移植到Android层吗?如何移植?通过调用是不是很简单line-by-line函数作为 C++ 示例?或者我们必须做“别的事情”?这让我很多次感到困惑,很多人说“tutorial port library to Android”,但没有提供调用库函数的有用方法。

请帮助我,根据上述假设,我如何继续使用这个库。有在线教程可以帮助我解决这个问题吗?

谢谢 :)


就这么简单@加布·塞尚 https://stackoverflow.com/users/1631193/评论里已经提到了。

1.我可以将这个项目编译成*so文件。 (通过一些在线教程帮助我在 Android 上构建这个库)。

您需要将 JNI 包装器添加到本机库中。例如,wrapper.cpp:

HelperLib lib;

void Java_com_example_hqt_MainActivity_initialize() {
    lib = new HelperLib();
    lib.initialize();
}

void Java_com_example_hqt_MainActivity_makeConnection() {
    lib.makeConnection();
}

And then

3.我对native库有基本的了解。例如,使用 System.loadlibrary() 加载本机库,调用简单的本机 C 函数。

也就是说,在 MainActivity.java 中:

static {
    Log.d(TAG, "loadLibrary");
    System.loadLibrary("mynativelibrary");
}

public static native void initialize();
public static native void makeConnection();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Init native library
    initialize();
}

public void makeNativeConnection() {
    makeConnection();
}

希望这可以帮助 :)

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

如何使用原生库 的相关文章

  • 本地管理的广播接收器泄漏?

    当应用程序被系统杀死时 本地 即使用 LocalBroadcastManager 管理 BroadcastReceiver 是否有可能泄漏 我需要它的具体用例是我想在活动的 onCreate onDestroy 中注册 注销 Broadca
  • Fresco:滚动 RecyclerView 后图像消失

    我有一个 Horizo ntal RecyclerView 每个项目都有一个使用 Facebook Fresco 图像库加载到其中的图像 然而 虽然正确的图像最初是在屏幕上滚动一点时加载的 但当 RecyclerView 进一步滚动时 它就
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • Android 两个 Activity 之间的共享元素转换不起作用

    在我的应用程序中 我尝试使用新引入的活动之间共享的元素 如果共享元素具有固定位置 例如 android layout gravity top 但是当视图被锚定时问题就出现了 我的第一个活动如下所示
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • 如何获取Android中的所有主屏幕?

    我是安卓开发新手 我知道每个主屏幕都是启动器中的一个工作区 我想获取屏幕上所有应用程序图标的所有位置信息 那么有没有办法获取这些屏幕对象及其图标信息的列表 ADD 我更期待的是应用程序图标和屏幕之间的关系 例如 我想要某个应用程序图标的位置
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • Android:选择 EditField 上焦点上的所有文本

    我试图让 Android 在获得焦点时选择 EditText 字段中的所有文本 我在布局中使用此属性 在两个字段上 android selectAllOnFocus true 我不确定这是否相关 但为了将光标移动到第一个可编辑字段 前面 还
  • 带有工具提示的搜索栏 android

    Hi All 我正在尝试使用工具提示自定义 android 搜索栏 如给定的图像 有没有办法在搜索栏中添加带有拇指的文本视图 或任何其他想法 Thanks 我们可以通过拇指的界限来做到这一点 并在seekbar的progressChange
  • 在 VideoView 开始播放之前,TextView 不会显示

    我编写了一个android应用程序 它有两个视图 TextView上方的VideoView 位于ScrollView内部 我遇到了一个问题 直到VideoView开始播放视频 TextView才显示 并且我有一个黑屏 这可能需要很长一段时间
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • Android SDK WebView调用Activity

    我试图在单击 WebView 组件内的链接时启动活动 我的Webview已加载到里面Main java我想启动SubActivity java当点击网站内的链接时Main java 另外 如何将参数传递给此活动 Example inspec
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi
  • Android:我的应用程序太大并给出“无法执行 dex:方法 ID 不在 [0, 0xffff]: 65536”?

    我正在尝试将我的应用程序与 Box Dropbox 和 Google Drive 集成 所有这 3 项服务都需要许多第 3 方 jar 此外 我的应用程序已经需要一些第三方 jar 现在 当我尝试从 Eclipse 运行我的应用程序时 出现
  • FCM 主题是否适合更多用户?

    我对使用主题消息有点困惑 我的场景是根据通知触发一些作业 请帮助我更多地了解这一点 如果我们正在处理大量用户 则可以使用 FCM 主题向用户发送通知 我们可以只使用数据消息和主题消息吗 使用主题发送的消息是否保证送达 我在 FCM 文档中看
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 使用 PDFBox 在 Android 中创建 PDF

    我正在尝试通过我的 Android 应用程序创建 PDFPDFBoxapi 但出现以下错误 java lang NoClassDefFoundError org apache pdfbox pdmodel PDDocument 我已经将以下
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • init CBCentralManager:表达式类型不明确,没有更多上下文

    尝试在 Swift 4 2 项目中初始化 CBCentralManager 获取评论中显示的错误 import CoreBluetooth class SomeClass NSObject CBCentralManagerDelegate
  • 在 Visual Studio 上部署到 Windows Phone 10 失败

    发生了很多事情 我不知道从哪里开始 说真的 这不是更简单吗 编辑 这里有人知道我如何联系微软来告诉这个吗 或者甚至 有人可以告诉他们这个问题吗 我有最后一个 Windows 10 桌面 还有 Windows Phone 10 0 10512
  • 从 Facebook 返回的奇怪访问令牌

    我一直在开发 Facebook 应用程序 并且已经使用 Facebook Graph Toolkit 几个月了 一直以来 我的代码都在工作 我可以获得访问令牌 我可以使用它们来检索 Facebook 用户详细信息 发布新闻源等 现在 新的问
  • 如何在所有浏览器上从 javascript 变量下载文本?

    我需要一个函数将 javascript 变量中的字符串下载到文本文件 5 7MB 中 该功能应该跨浏览器工作 我尝试过制作这样的下载功能 但它在 Chrome 上不起作用 FireFox 会打开 保存 对话框 但 Chrome 不会 另外
  • IncationTargetException.getCause() 何时为 null?

    根据javadocs http docs oracle com javase 7 docs api java lang reflect InvocationTargetException html getCause 28 29 Invoca
  • Hibernate 使用 JPA 存储库获取配置文件

    我正在使用 Hibernate 和 JPA 存储库 我想知道为什么我无法设置 FetchProfiles 并将它们与这样的存储库一起使用 entityManager unwrap Session class enableFetchProfi
  • 在ABAP中使用自定义消息引发异常

    我正在编写一个通过 RFC 调用的函数 我想找到最简单的方法来在 ABAP 中使用自定义消息引发异常 如果这可以尽可能短地完成 并且可以在一行上完成 那就太好了 我希望它用于调试 而不是用于运行生产代码 背景 过去我使用Python编程语言
  • 从给定的一组单词组成一个有意义的句子[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开发一个程序 需要根据给定的单词集创建一个语法正确的句子 在这里 我将向程序传递一个字符串列表的输入 我的输出应该是用这些单词和
  • 将矩形分割成恰好包含 1 个点的较小矩形,最大化荒地面积

    给定一个包含 P 个点的矩形 R 与轴正交 点是自然数 地块是一个矩形 其中 完全在R内部 边与轴正交 里面正好包含一个点 它的边必须与 R 的边相邻或包含 P 中的点 Find an algorithm to find all possi
  • 转移/减少野牛的冲突

    我是新来的Bison我在转移 减少冲突方面遇到麻烦 我正在尝试从文件加载到array data struct data char name 50 char surname 50 int year data 1000 这是我的野牛代码的一部分
  • 新 Fedora 27 中 /usr/bin/python3“_Py_CoerceLegacyLocale”中的符号查找错误

    感谢您的耐心等待 这个问题在互联网上的任何地方都没有得到解答 我无法找到任何有关如何解决它的线索 问题是 jv xp usr bin python3 usr bin python3 symbol lookup error usr bin p
  • 获取正在运行的进程列表并终止特定进程

    我正在执行以下代码 ActivityManager actvityManager ActivityManager this getSystemService ACTIVITY SERVICE List
  • NSPredicate 使用正则表达式检查字母数字

    我想在 Objective c 中使用正则表达式检查字符串 我的代码 NSString regexAmazonOrder a zA Z0 9 NSPredicate predicateAmazonOrder NSPredicate pred
  • UIButton 标题中的断线

    下面的按钮中显示的是地址 我的问题是地址非常长 如何在按钮标题中的两个变量之间获取断线 NSString sitz map kordinate herkunft NSString strasse map kordinate strasse
  • IIFE void function() 与 (function()) 中使用 void 与用括号括起来的区别

    创建模块的常见做法是将它们包装在括号中 这样就不会泄漏模块外部的任何变量 当连接等时 还有void运算符 计算给定表达式并返回undefined 参见MDN https developer mozilla org en US docs We
  • git-filter-repo 不读取我的邮件映射文件

    继续我之前的问题 https stackoverflow com questions 66614236 push to github mistakenly done by another github account 66614340 no
  • 在浏览器布局中为响应式图像保留空间(防止回流)

    我一直在进行更改以使我的网站更具响应性 总的来说 一切进展顺利 然而 我遇到了一个问题 之前 我总是在 img 元素上使用 height 和 width 属性 以便在布局中预留空间在浏览器加载图像时用于图像 这可以防止在浏览器加载和计算图像
  • 迭代链表

    我正在开发一个具有一些遗留代码的应用程序 这里有一个链表 代码在 while 循环中使用迭代器迭代该链表 LinkedList ll grammarSection getSectionsAsLinkList Iterator iter ll
  • 跟踪 z3::optimize unsat_core

    如何正确追踪z3 optimize未饱和核心 Z3 C z3 optimize当我添加时没有找到预期的解决方案不饱和核心跟踪 基于这些examples https github com Z3Prover z3 blob 9df6c10ad8
  • 如何使用原生库

    例如 我有一个 C 库 名为HelperLib 我有一些假设 我可以将这个项目编译成 so 文件 通过一些在线教程帮助我在 Android 上构建这个库 我可以在 C C 中使用这个库 通过图书馆网站上的官方教程 我对本机库有基本的了解 例