0

我正在将本机 C++ 引擎移植到 Android NDK。在尝试了一些环境和工具之后,我发现最新的 vs-android (0.9) 是最舒服的。我确实有一些问题(有些我可能需要在以后的问题中提出),但现在 - 这是一个:

本机引擎编译为本机共享库。我们希望引擎兼容 android-8 API (android 2.2)。

我们有一些内部使用的测试应用程序。我也将其中一个移植到了 Android,但由于我使用的是本机活动(以及最重要的本机应用程序胶水),它需要 android-9 (2.3)。

我有一些模块项目 - 静态库 - 用于引擎和测试器应用程序。我需要将这些编译为引擎的 android-8 和测试仪的 android-9。除此之外,我们还希望同时支持 arm5 和 arm7。

使用 ndk 构建脚本,我可以很容易地做到这一点。在 MS-Build(vs-android 使用)中,它似乎需要指数级的配置(不要忘记调试/配置文件/发布)。

有没有办法在不创建所有这些配置的情况下做到这一点?这样,例如,当我构建引擎时,它将为 android-8 以及 arm5 和 arm7 编译模块,而当我构建测试器时,它将为 android-9 和 arm5 和 arm7 编译模块,而无需为每个项目和调试、配置文件、发布创建 4 个几乎相同的配置?

我找到了这个,但我不确定如何使用它以及是否可以在这里应用父/子项目的技术。

(告诉我“不要再懒惰了,只需创建配置,尽管事实上无论何时你想更改参数,你都必须在所有配置中更改它”作为评论是可以接受的,但请 - 不要作为答案。 “使用 ndk-build 并手动构建你的 apk 而不是使用 vs-android”也是如此)。

谢谢!

(顺便说一句,有人可以添加一个 vs-android 标签吗?)

编辑: 我想出了一个部分解决方案 - 仅针对 API 级别的问题。请看下面我的回答。

4

1 回答 1

0

好的,这是我找到的部分解决方案(因为没有其他人提出另一个答案)。

这是关于 API 级别的问题。它也适用于任何特定于解决方案的东西。专门针对我的问题 - 对于每个项目(所有静态库、引擎共享库和测试器共享库),我在项目文件中添加了以下内容:

  <Import Condition="Exists('$(SolutionDir)AndroidSolution.props')" Project="$(SolutionDir)AndroidSolution.props" />

然后,每个解决方案都可以通过将名为“AndroidSolution.props”的文件添加到与解决方案文件相同的文件夹中来确定其所有项目所需的参数。一个示例道具文件:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <AndroidAPILevel>android-8</AndroidAPILevel>
    <!-- <AndroidArch>armv7-a</AndroidArch> -->
  </PropertyGroup>
</Project>

这样一来,解决方案中所有项目的 API 级别就确定了,并且可以针对不同的解决方案进行更改。

至于多个 ABI,我在 XML 中添加了以下内容:

<AndroidArch>__ANDROID_ARCHITECTURE__</AndroidArch>
<PlatformToolset>__PLATFORM_TOOLSET__</PlatformToolset>

并使用一个简短的脚本(在每次执行 msbuild 之前多次调用)来替换构建脚本中的两个参数

于 2011-07-31T14:52:21.920 回答