web-dev-qa-db-ja.com

Android ANTスクリプトを使用したNDKビルド

Android NDKビルドにANTスクリプトを使用できますか?はいの場合はどのようにですか?いいえの場合はなぜですか?

わからない

21
Sachchidanand

次のように、ndk-buildターゲットから-pre-buildを呼び出します。

<target name="-pre-build">
    <exec executable="${ndk.dir}/ndk-build" failonerror="true"/>
</target>

<target name="clean" depends="Android_rules.clean">
    <exec executable="${ndk.dir}/ndk-build" failonerror="true">
        <arg value="clean"/>
    </exec>
</target>

次に、ndk.dirファイルからNDKディレクトリを指すようにlocal.propertiesを設定するか、コマンドラインで設定します。私はこれをします:

ant -Dsdk.dir=/home/dg/apps/Android-sdk-linux_x86-r11/ -Dndk.dir=/home/dg/apps/Android-ndk-r6b release

これでantを実行すると、ネイティブコードが自動的にビルドされます。さらに、「ant clean」を実行すると、ネイティブコードがクリーンアップされます。

更新しました:failonerror="true"タスクに<exec>を追加しました---これにより、makeが失敗した場合にantが中止されます。それがないと、すぐに実行され、無効なバイナリを含むAPKが生成されます。良くない!

43
David Given

他の人が述べたように、build.xmlに追加するものは次のとおりです。

<target name="-pre-build">
    <exec executable="${ndk.dir}/ndk-build" failonerror="true"/>
</target>

<target name="clean" depends="Android_rules.clean">
    <exec executable="${ndk.dir}/ndk-build" failonerror="true">
        <arg value="clean"/>
    </exec>
</target>

local.propertiesファイルでndk.dirを定義します:ndk.dir = C:\ EclipseWorkspace\Android-ndk-r8d

これを実行した後に言及したい状況では、このターゲットオーバーライドに対してANTを実行しているときに、「%1は有効なWin32アプリケーションではありません」というエラーが発生します。私の場合、NDK R8dにアップグレードし、次の行を更新して、ndk-build.cmdをフェッチする必要がありました(このバージョンのndkは、Windowsおよびcygwin経由で実行できます。

exec実行可能ファイル= "$ {ndk.dir}/ndk-build .cmd" failonerror = "true"

9
j2emanue