【发布时间】:2020-11-27 10:16:32
【问题描述】:
我有一个包含 3 个模块层的模块化应用程序架构。
底部的核心库模块和顶部的应用程序库模块和我的应用程序。每个都构建自己的本机共享库。但不仅是java代码,其中的C++代码也是相互依赖的。
所以我的“application.so”必须链接到“library.so”和“core.so”,另一方面,“library.so”必须链接“core.so”,就像您对任何分层架构的期望一样。
我可以在文件系统中看到共享的库最终都位于同一个构建目录中,但我找不到使它们相互链接的方法。 “find_library”是行不通的。而且仅仅在“target_link_libraries”中命名它们也行不通。
编辑:使用
buildFeatures {
prefabPublishing true
}
prefab {
infosqueezer {
headers "src/main/cpp/include"
}
}
我能够生成一个 aar。但我无法将它包含到另一个模块中。调试和发布 aar 都在“library/build/output/aar/”目录中生成。这些模块在同一个项目中,所以我只需要以某种方式通过文件引用。
我正在使用
implementation project(path: ':library')
但它不拾取so文件。此外,AAR 不包含 find_package 命令查找链接库所需的任何“libraryConfig.cmake”或“library-config.cmake”。
而且整个预制过程似乎很糟糕。我只想拆分项目源代码以减少编译时间和依赖关系。 Prefab 添加了如此多的内容,这无疑是一个分发独立库的好主意,但对于内部库来说太过分了。
我需要的只是一种在另一个模块中引用生成的“library.so”文件的方法。
我知道它是 Android,但它们真的让一切变得如此糟糕吗?
【问题讨论】:
-
您可能想详细说明您的配置与Native dependencies with AARs的不匹配之处
-
@MorrisonChang 谢谢你的链接,这可能是答案。不幸的是我不明白。这是非常缺乏记录的。我如何使用预制件?我了解其中的 cmake 部分,但不了解如何设置预制件。有分步教程吗?
-
由于预制件是新的:android-developers.googleblog.com/2020/02/… 你最好的选择可能是示例项目github.com/android/ndk-samples/tree/main/prefab
-
谢谢,哇,这是 20 天前的示例代码。并且不同于其他地方提到的记录在案的 gradle 选项。所以它仍在开发中,API 不稳定。我的警告灯亮着,当我使用最前沿的早期采用者的东西时,我有足够的项目流血至死。那么之前设置模块间 NDK 依赖的方法是什么?
-
很抱歉让您走下预制路径。对于内部库,请查看developer.android.com/ndk/guides/prebuilts
标签: android android-ndk linker shared-libraries