Android 本机库链接到 aar 中的另一个本机库

2024-01-15

我有一个好奇的问题。我有一个 aar 库,其中包含并使用本机 .so 库。现在,我想编写另一个库,它依赖于该库,并且还具有依赖于第一个库中的本机库的本机部分。依赖库同时使用第一个库中的本机代码和 java 包装器。

我想知道,有什么办法,如何通过标准 gradle 依赖项(使用从第一个库复制的头文件)来做到这一点?或者我必须直接从源代码构建第二个库吗?

为什么我需要这个: 我们有一个具有基本功能的多平台库,适用于 android,如 aar。该库可以在标准 Android 应用程序中使用,并且我们在多个项目中使用它,这些项目没有其他本机代码。

但在一个应用程序中,我们想要编写多平台共享应用程序代码,具体取决于该库,并且我希望将这些库分开。

Thanks!


NOTE:这个答案已被弃用,因为 Android Studio 不再提供explored-aar目录。

为了获得更好的解决方案,使用来自aar,检查库androidNativeBundle https://github.com/howardpang/androidNativeBundle

Here https://github.com/WanghongLin/OpenCV4Android是一个基于的可行示例OpenCV,你可以为你做同样的事情first lib.

准备第一个库如下

包装jar, *.so,并导出headers(参见文件OpenCV4Android/opencv/build.gradle在链接的项目中如何将标题附加到 aar)。

You get first.aar例如从建筑物first lib.

在其他项目中使用第一个库

Add the first.aar当您需要时,可以在您的其他项目中使用。

allprojects {
    repositories {
        jcenter()

        flatDir {
            dirs '/path/to/aar'
        }
    }
}

// in your app's build.gradle
dependencies {
    // ...
    compile 'com.example:example-with-header@aar'
    // ...
}

链接到您的本机库first.aar来自您的本机构建系统。

如果你使用CMake,它应该看起来像这样

add_library(first
SHARED
IMPORTED)

set_target_properties(
first
PROPERTIES IMPORTED_LOCATION
../../../../build/intermediates/exploded-aar/org.example/example-debug/jni/${ANDROID_ABI}/libfirst.so
# use find command to figure out the location of the first lib before use it, not sure if it's different in different build environment
# for android studio gradle plugin latest version use
# ../../../../build/intermediates/transforms/mergeJniLibs/debug/folders/2000/1f/main/lib/${ANDROID_ABI}/libfirst.so
)

# also use find command to figure the actual location of the exported header from aar
# this might be different in your environment for different version of gradle plugin
include_directories(build/intermediates/exploded-aar/com.example/example-debug/cpp/include)

target_link_libraries( # Specifies the target library.
                       native-lib

                       # Links the target library to the log library
                       # included in the NDK.
                       first
                       ${log-lib} )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 本机库链接到 aar 中的另一个本机库 的相关文章

  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 没有用于警告的设置器/字段 Firebase 数据库检索数据填充列表视图

    我只是想将 Firebase 数据库中的数据填充到我的列表视图中 日志显示正在检索数据 但适配器不会将值设置为列表中单个列表项中的文本 它只说 没有二传手 场地插入值 这让我觉得我的设置器没有正确制作 但 Android Studio 自动
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 没有支持 FEATURE_CAMERA_EXTERNAL 的 Android 设备

    根据this doc https source android com devices camera external usb cameras一些 Android 设备允许使用 Camera2 API 访问外部 USB 摄像头 我检查了大约
  • 使用 C# 读取 Soap 消息

  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • Dagger 2 中“HasFragmentInjector”的实际用法是什么

    我之前已经实现了 dagger2 v2 2 但现在他们也添加了 dagger android 部分 所以我正在用它创建示例项目 我知道旧的方法论 Provide and Modules and 成分等注释 但从 Dagger 2 8 开始
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp
  • 发布的 Android apk 出现错误“包文件未正确签名”

    我最近将我的应用程序上传到 Android 市场 但是由于错误 下载时它拒绝运行 包文件未正确签名 我首先使用 eclipse 发布了数据包 右键单击导出 创建密钥库然后发布 但它拒绝工作 然后我下载了 keytool 和 jarsigne
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 有没有任何代码可以在android中设置壁纸而无需裁剪和缩放?

    我正在创建一个画廊应用程序 我的第一个应用程序 这是我的代码 Bitmap bmd BitmapFactory decodeStream is try getApplicationContext setWallpaper bmd catch
  • 当我使用 OpenSSL1.1.0g 根据固定的 p 和 g 值创建 Diffie Hellman 密钥协议密钥时,应该执行哪些检查?

    您好 我尝试通过这段代码使用修复 p 和 g 参数来制作 Diffie Hellman Keysanswer https stackoverflow com a 54538811 4706711 include

随机推荐

  • 了解与 .NET 的 HttpWebRequest 的 SSL 连接

    我似乎无法理解这个问题 我正在使用 HttpWebRequest 尝试将一些数据发送到另一个站点 我试图找出配置防火墙的最佳方法 但我不知所措 通过观察 NetMon 跟踪 它似乎忽略了我告诉它的内容 我看到从请求中发出的 HTTP 标头
  • leveldb-go 示例,文档

    LevelDB Go http code google com p leveldb go 是LevelDB在Go语言中的移植 LevelDB Go 通常被称为 Go 应用程序的本机替代方案 网站没有示例 也没有文档 我应该通过阅读源代码来学
  • 从基础到派生的“dynamic_cast”

    是的 我知道沮丧使用dynamic cast无法编译 如果Base不是多态的 但我的问题不是这个 class Base public virtual void bar cout lt lt bar n class Derived publi
  • Java 中的模块化:顶级类与嵌套类

    我读过的Java教程 喜欢使用嵌套类来演示一个概念 一个特性或用途 这导致我最初实现了一个我创建的示例项目 主活动类中有很多嵌套类 它可以工作 但现在我得到了一个巨大的整体 java 文件 我发现这有点不方便 我现在打算分解为多个 java
  • 如何查明哪些inotify 手表已注册?

    我将 inotify 监视限制设置为 1024 我认为默认值是 128 尽管如此 yeoman Guard 和 Dropbox 不断失败 并告诉我提高 inotify 限制 在此之前 我想知道是什么消耗了我所有的手表 我的 Dropbox
  • 如何使用带模板的结构和类

    使用此代码 只是一类测试 typedef unsigned short UInt16 template
  • 获取 Java 中自纪元以来的天数、周数和月数

    我正在尝试获取自 Java 纪元以来的天数 周数 月数 Java Calendar 类提供了诸如calendar get Gregorian Calendar DAY OF YEAR 或Calendar get Gregorian Cale
  • 在 iPhone 应用程序中记录调试信息的最佳方法是什么?

    是否有某种标准方法或有人写过一些东西 允许您记录消息并将其显示在 iPhone 屏幕上的小滚动部分或 iPhone 模拟器中的单独窗口中 更新 对于像我这样不知道的菜鸟 请使用如下所述的 NSLog 方法 并确保选择 Run gt Cons
  • Unicorn 不关闭数据库连接

    我正在使用 Rails 3 2 unicorn postgres DB 我有一个问题 unicorn 如何处理数据库连接 我的理解是 unicorn主进程分叉X子进程 每个子进程建立数据库连接 在before fork中关闭 在after
  • uitableview + 导航控制器从所选元素设置标题

    我有一个UINnavigationController处理导航UITableView 当我从表中选择一行时 我需要显示在UINavigationController为上一个菜单中选定的项目添加标题 细胞的标签是从外部读取的xml填充的行UI
  • 在搜索表单中 POST 或 GET?

    我创建了一个搜索表单来查找 MVC 网站上的帖子 表单类型应该是 POST 还是 GET 我知道正在获取可以为搜索添加书签等等 使用 GET 有什么缺点吗 谢谢你 米格尔 虽然GET是更传统的数据查询解决方案 在很多情况下GET太有限 无法
  • 刚刚从 IPython 提示符安装后出现“没有名为 sqlalchemy 的模块”

    我无法导入 sqlalchemy 我搜索并发现了一些解决方案 例如安装flask或flask sqlalchemy等 这些都没有帮助 我缺少什么 有时 您需要重新启动ipython让它找到新安装的模块 我相信这适用于添加到的模块sys pa
  • 您的CPU不支持VT-x

    我已经创建了 AVD 但是当我尝试运行 android 程序时 它显示 错误 您的CPU不支持VT x 我在 BIOS 中启用了虚拟化技术 但当我尝试运行 Android 程序时仍然出现此错误 有两种情况 使用VMware 进入 WM gt
  • 部分回发后 jQuery 不工作

    我在外部文件中有下面这个 jquery 函数 因此 在部分回发后 jquery 无法正常工作 我需要在部分回发时从服务器端加载 jquery 有人可以告诉我我需要在这段代码中调用什么以及如何加载jquery jQuery function
  • 获取 Domino 服务器会话超时 - XPage

    如何在 XPages SSJS 中获取 Domino 服务器的会话超时 我想提示用户在会话过期之前保存他 她的数据 谢谢 仅当用户向服务器发出请求时 服务器才与用户通信 因此 如果用户没有请求 服务器就无法向用户发送信息 例如 用户从服务器
  • 如何在 Android 运行时更改当前主题 [重复]

    这个问题在这里已经有答案了 我创建了一个 PreferenceActivity 允许用户选择他想要应用于整个应用程序的主题 当用户选择主题时 将执行以下代码 if getApplication setTheme R style BlackT
  • 如何在 Azure 应用服务中插入具有 1:n 关系的实体

    我需要使用 Azure 应用服务建立 1 n 关系 我按照这个教程 http shellmonger com 2016 05 27 30 days of zumo v2 azure mobile apps day 26 relationsh
  • 使用压缩生成的损坏的 docx

    首先我要说的是 我在这里创建了一个帐户 因为为了尝试解决这个问题 我一直在用头撞墙 所以就这样吧 另外 我已经看到这个问题了here https stackoverflow com questions 13566468 how to com
  • 在 Android 中的自定义视图上添加按钮

    我有以下课程 public class GameActivity extends Activity Override public void onCreate Bundle savedInstanceState super onCreate
  • Android 本机库链接到 aar 中的另一个本机库

    我有一个好奇的问题 我有一个 aar 库 其中包含并使用本机 so 库 现在 我想编写另一个库 它依赖于该库 并且还具有依赖于第一个库中的本机库的本机部分 依赖库同时使用第一个库中的本机代码和 java 包装器 我想知道 有什么办法 如何通