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 中的另一个本机库 的相关文章

  • 如何在没有 OpenCv Manager 的情况下运行 OpenCV 代码

    我正在使用 OpenCV4Android 版本 2 4 10 并在 Samsung Galayx GT I9300 上测试我的代码 我遇到的问题是 我必须从 Play 商店下载 Opencv Manager 以便我的 opencv 代码运行
  • 尝试重新打开已关闭的对象:sqlitequery

    所以本质上我查询数据库两次 我不明白这个错误真正来自哪里 因为我没有在任何地方关闭数据库 返回错误的代码是这样运行的 我查了一下 刚刚看到一个像我这样的案例 BeaconHandler pullAllDB new BeaconHandler
  • 如何根据受保护的 String doInBackground 方法中 AsyncTask 的结果调用 Toast.makeText() ?

    我从 AsyncTask 中的数据库中获取数据 如果它为空 我想吐司一个警告文本 我在 AsyncTask 中尝试过 但我了解到它不是在工作线程中调用的 这是我的 doInBackground 方法 protected String doI
  • 枚举

    我试图拥有一组扩展通用接口的枚举 例如 interface Fooable void someCommonMethod enum E1 implements Fooable some enumuerations and a definiti
  • C++ 析构函数:何时释放内存?

    如果我删除一个导致其析构函数被调用的对象 那么内存是在析构函数完成函数中的任何操作之前还是之后被释放 仅当最小派生类子对象被销毁后才会释放内存 所以如果你有 class Base class Derived public Base publ
  • 如何以相同的意图从相机获取全尺寸图片和缩略图

    我一直需要找到这个问题的解决方案 我已经从这个社区搜索并测试了许多解决方案 但任何人都适合帮助我 我有两个活动 第一个活动拍摄一张照片并将其发送到另一个活动 该活动有一个 ImageView 来接收该照片 直到这里我遇到问题 以及一个在数据
  • 使用对象列表构建树

    我有一个带有属性 id 和parent id 的对象列表 我想建造一棵树来连接那些孩子和父母 1 个父对象可以有多个子对象 并且有一个对象将成为所有对象的祖先 实现该功能最快的算法是什么 我使用 C 作为编程语言 但其他语言也可以 像这样的
  • 为什么在 .net 中使用 Invoke on Controls? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 NET不允许跨线程操作 https stackoverflow com questions 2896504 why net does not allow cross thread operat
  • 如何使用 C# 代码使用超链接的 onClick 事件?

    我正在尝试为页面中的超链接添加条件 而不是仅仅使用特定的链接 例如 a href help Tutorial html Tutorial a 我想为不同的用户显示不同的页面 例如 如果用户以管理员身份登录 他们将看到与普通用户不同的链接 我
  • 不幸的是 Project_Name 已停止

    我有一个简单的应用程序 您可以在文本视图中输入文本并按提交 它会在另一个活动中显示文本 然而 当我按下提交时 给我消息 不幸的是 发送已停止 我查看了SO上的其他线程 但是不幸的是 myfirstproject 在 java 中停止工作错误
  • 使用 cudamalloc()。为什么是双指针?

    我目前正在浏览有关的教程示例http code google com p stanford cs193g sp2010 http code google com p stanford cs193g sp2010 学习CUDA 演示的代码 g
  • Android 布局仅使一个视图将自己绘制为横向,但其他所有视图都使用纵向

    我的活动布局中的主要视图元素是 VideoView 我的视频被渲染为设备的横向分辨率 但视频中的所有内容都是横向的 因此仍然需要在设备处于纵向位置时观看 即使我必须将活动设置为android screenOrientation landsc
  • 如何使用现代.fxml和controller.java在javafx 2.x中制作自动完成组合框[重复]

    这个问题在这里已经有答案了 如何使用现代 fxml 和controller java 在 javafx 2 x 中制作一个类似的自动完成组合框 就像制作这个一样 http blog ngopal com np 2011 07 04 auto
  • 如何使用eclipse构建C++应用程序

    我已经从以下位置下载了 Eclipse Juno for C here http www eclipse org downloads download php file technology epp downloads release ju
  • 获取大于某个数字的元素个数

    我正在尝试解决以下问题 数字被插入到容器中 每次插入数字时 我需要知道容器中有多少元素大于或等于当前插入的数字 我相信这两个操作都可以以对数复杂度完成 我的问题 C 库中有标准容器可以解决这个问题吗 我知道std multiset可以在对数
  • Android 使用不同的签名密钥更新市场应用程序

    开发人员使用他的个人密钥库签署了应用程序 但它应该是公司的密钥库 现在是否可以使用公司的密钥库更新市场中的应用程序 并且仍然可以简化对用户的更新 这有什么后果吗 不可以 您必须将该应用程序作为新应用程序发布到市场上 这次是用公司的key签名
  • 确保 MAVEN_HOME 设置正确

    这里是 Java 和 Maven 菜鸟 使用 OSX 10 8 并使用 HomeBrew 安装 Maven 1 如果我说which mvn我会得到这个 usr local bin mvn 2 如果我说echo MAVEN HOME我不会得到
  • C 中的静态和动态绑定(严格来说是 C,而不是 C++)是什么?

    我最初对发布这个问题感到担忧 以免它重复 但即使在谷歌搜索了许多关键字之后 我在 StackOverflow 上找不到任何解释 C 的静态和动态绑定的链接 尽管有 C 的问题和答案 但是都涉及classes以及显然不适合 C 的东西 Sta
  • XmlDocument Save 使文件保持打开状态

    我有一个简单的 C 函数 可以创建一个基本的 XML 文件并保存 private void CreateXMlFile string Filename string Name string Company XmlDocument doc n
  • 带有包含布局的导航抽屉布局

    我认为我的问题实际上很简单 但我不知道如何解决 有一个工作导航抽屉 代码如下

随机推荐

  • 了解与 .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 包装器 我想知道 有什么办法 如何通