如何使用vs-android构建多个Android平台(可能还有ABI)?

时间:2011-07-27 14:21:51

标签: android visual-studio-2010 msbuild android-ndk vs-android

我正在将原生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个几乎相同的配置?

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

(告诉我'停止懒惰,只是创建配置,尽管无论何时你想要更改参数,你都必须在所有配置中更改它'作为评论是可接受的,但请 - 不要答案。同样适用于'使用ndk-build并手动构建你的apk而不是使用vs-android'。

谢谢!

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

修改 我想出了一个部分解决方案 - 仅针对API级问题。请参阅下面的答案。

1 个答案:

答案 0 :(得分: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执行前多次调用)来替换构建脚本中的两个参数