0

ネイティブC++エンジンをAndroidNDKに移植しています。いくつかの環境とツールを試した後、最新のvs-android(0.9)が最も快適であることがわかりました。私はそれにいくつかの問題を抱えています(将来の質問でいくつか尋ねる必要があるかもしれません)が、今のところ-ここに1つあります:

ネイティブエンジンは、ネイティブ共有ライブラリにコンパイルされます。エンジンをandroid-8API互換(android 2.2)にする必要があります。

内部で使用するテスターアプリケーションがいくつかあります。そのうちの1つを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つのほぼ同じ構成を作成しますか?

私はこれを見つけましが、それをどのように使用するか、そしてここで親/子プロジェクトの手法を適用することが可能かどうかはわかりません。

(「パラメーターを変更するときはいつでも、すべての構成でパラメーターを変更する必要があるという事実にもかかわらず、怠惰になるのをやめて構成を作成する」ように私に言っても、コメントとして受け入れられますが、答えとしてではありません。同じことが'vs-androidを使用する代わりにndk-buildを使用してapkを手動でビルドする')にも当てはまります。

ありがとう!

(ところで、誰かがvs-androidタグを追加してくれませんか?)

編集: 私は部分的な解決策を思いつきました-APIレベルの問題に対してのみ。以下の私の答えを参照してください。

4

1 に答える 1

0

OK、これが私が見つけた部分的な解決策です(他の誰も別の答えを思い付いていないので)。

これは、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 に答える