prefab
成功运行,但是生成的预制目录中仅包含CMake文件,没有其他资产。我的目标是轻松地与同事共享二进制资产,并将其包含在我的Android版本中。我在做什么错了?
我正在尝试创建一个增强的预制件(尽管Google可能会it gets enough votes制造一个)。我使用Boost-for-Android来构建boost 1.73.0,将相关的include和库复制到 assembly 目录中,并用prefab.json
,module.json
和{ {1}}个文件,然后运行
abi.json
但是结果目录每个abi仅包含两个CMake文件。
prefab --output "/home/developer/workspace/boost-prefab/out/boost/x86_64" \
--build-system cmake \
--platform android \
--abi "x86_64" \
--os-version "21" \
--ndk-version "21" \
--stl "c++_static" \
"/home/developer/workspace/boost-prefab/assembly/boost"
我创建的程序集目录如下(我遵循prefab structure prescribed in the docs):
$ find x86_64 -type f
x86_64/lib/x86_64-linux-android/cmake/boost/boostConfig.cmake
x86_64/lib/x86_64-linux-android/cmake/boost/boostConfigVersion.cmake
boost/prefab.json
modules/filesystem/
module.json
include/boost/...
libs/android.x86_64/
abi.json
libboost_filesystem.a
modules/system/
module.json
include/boost/...
libs/android.x86_64/
abi.json
libboost_system.a
:
prefab.json
{"schema_version": 1, "name": "boost", "version": "1.73.0", "dependencies": []}
:
modules/filesystem/module.json
{"library_name": "libboost_filesystem"}
:
modules/filesystem/libs/android.x86_64/abi.json
我承认我对预制{"abi": "x86_64", "api": 21, "ndk": "21", "stl": "c++_static"}
感到困惑,因为我可以说它只是NDK版本(因为它不是API版本或Android主要版本号),但我不认为那是问题。
我还尝试通过vcpkg生成一个boost预制,但是boost现在无法在vcpkg中构建(有一些PR可以解决这个问题,但是我无法构建它。)无论如何,vcpkg's example的布局也略有不同,在预制件中插入AAR的情况也是如此。
我的目标是拥有一个预先构建的boost存档,我的同事可以轻松地将其导入到他们的Android项目中。
今天结束时,我能够在Android项目中使用Boost的唯一方法是将其构建包含在我的os-version
中,但是如果归结为这一点,预制的优势是什么?我觉得我也integrate conan into my gradle build就好。
答案 0 :(得分:1)
我只是误解了预制文件的用途吗?
仅根据您的下一个问题。它是用于以与构建系统无关的方式分发预构建库的系统。除了“不可知的构建系统”之外,这与您要执行的操作保持一致。
与默认的boost文件相比,确实生成的CMake文件似乎是原始文件,即与在此处创建的预制文件相比,我更喜欢boost CMake文件。
Prefab旨在支持任意构建系统,而无需包编写者关心每个组件的支持。这对于Android很重要,因为尽管有很多人使用CMake,但ndk-build也是官方支持的选项,并且还经常使用其他数十种构建系统。
boost自己的CMake文件将提供哪些功能?如果我们可以通过与构建系统无关的方式来执行此操作,则可以在https://github.com/google/prefab/issues上提出功能请求。
如果无法以构建系统不可知的方式对其进行描述,则Prefab不适合。 vcpkg可能是一个更好的选择。
我应该先尝试创建一个用于增强的AAR吗?
是使用AGP的预制包装的最简单方法。通常,vcpkg是给定现有语料库的最简单路径,但是如您所述,您需要向他们发送补丁(或错误报告),以便首先修复其构建。
或者,https://android.googlesource.com/platform/tools/ndkports/是我们构建当前发布的少数文件的方式。应该很容易检出,添加您自己的端口文件,并构建您的AAR。如果您将补丁程序发送给我们,那么我可能会在测试基础架构启动并运行后将其合并(当前,由于测试是手动的,因此我们无法支持许多软件包)。
最后,我能够在Android项目中使用Boost的唯一方法是将其构建包含在我的CMAKE_FIND_ROOT_PATH中,但是如果归结为这一点,那么预制的优势是什么?
如果使用AAR,则无需这样做。 AGP会为您处理详细信息。预期的用例是用于构建系统以集成预制件,而不是用户必须要做的工作。 AGP已经做到了这一点,但仅在从AAR进行消费时如此。