0

最新の Android NDK (バージョン 8) では、ndk-build追加のcygwinをインストールせずに呼び出すことができます。

私の質問は、これを定期的なネイティブ ビルド用の CruiseControl.Net にプラグインできますか?

Antをビルド方法として使用し、それをccnetサーバー構成に追加する必要がある可能性が最も高いと思います。

質問は次のとおりです。

  • Antコマンドndk-build.cmdから呼び出す方法

  • build.xmlファイルの設定方法は? いくつかのアプローチを試みましたが、すべて失敗しました。可能であれば、いくつかの手がかりを教えていただけますか?

4

4 に答える 4

2

WindowsでCC.netを使用して、build.xmlから直接「ndk-build.cmd」を呼び出そうとすると、同じ問題(CreateProcessの失敗など)が発生しました。これを機能させる方法を見つけたので、自分のソリューションを共有せざるを得ないと感じました。

まず、次のように1行のWindowsコマンドファイルを作成します(「ndkwrapper.cmd」という名前を付けました)。

sh ndkwrap.sh %1 %2 %3

次に、次のように簡単なbashシェルスクリプトを作成します(「ndkwrap.sh」という名前)。

#!/usr/bin/sh
# Wrapper around ndk-build script for Windows
#

NDK_PROJECT_PATH=/cygdrive/c/workspace/agnc_android
export NDK_PROJECT_PATH
/cygdrive/c/Android/android-ndk-r8b/ndk-build $1 $2 $3

もちろん、(ワークスペースとNDKディレクトリの)正確なパスは異なる場合がありますが、特に「/ cygdrive / c」は「C:」を指すことに注意してください。

上記のスクリプトを作成した後のここでの非常に重要な手順の1つは、行末をWindowsからUNIXに変換することです。これは、無料で入手できる「dos2unix.exe」というユーティリティを使用して実行できます。どこで入手したかは覚えていませんが、Windowsに移植されたGNU/Linuxツールのオープンソースパッケージの一部でした。(「Windows用のUNIXファイルユーティリティ」に関するGoogle。)行末を変換しないと、shまたはbashでスクリプトの読み取りに問題が発生し、「\r」に関するあらゆる種類のエラーが発生します...

したがって、たとえば「ndk-build.cmd clean」に相当するものを呼び出すには、「ndkwrapper.cmd clean」と入力して、完全なNDKビルドの準備として、中間および出力のNDK関連のビルドファイルを削除します。

Windows上のCC.netのbuild.xmlファイルで、次のようにNDKmakefileを呼び出すことができます。

<tasks>
  <exec>
    <executable>cmd.exe</executable>
    <baseDirectory>C:\Android</baseDirectory>
    <buildArgs>/C ndkwrapper.cmd clean</buildArgs>
  </exec>

お役に立てれば!

ベン

于 2012-11-02T19:10:30.723 に答える
1

私は、ndk-buildをCCNETタスクとして実行する際の問題も観察しました。しばらく時間がかかりましたが、最後に、ndk-buildパラメーターとして提供HOST_OSして実行する必要があることに気付きました。HOST_ARCH

<exec>
  <executable>cmd</executable>          
  <buildArgs>/C ndk-build HOST_OS=windows HOST_ARCH=x86 -B NDK_PROJECT_PATH=[PROJECT] APP_BUILD_SCRIPT=[ANDROIDMKFILE] NDK_APPLICATION_MK=[APPLICATIONMKFILE] NDK_LOG=1</buildArgs>
  <buildTimeoutSeconds>120</buildTimeoutSeconds>
</exec>

誰もが時間を節約するのに役立つことを願っています。

于 2013-03-01T13:44:14.697 に答える
0

わかりました。ある程度の進歩がありました。ant または nant を介して jni コードをビルドできますが、どちらの場合も、それを cc.net サーバー構成にプラグインすると、奇妙なエラーが発生します。

しかし今、CC.netは私に奇妙なエラーを与えます:

    <builderror>
      <type>NAnt.Core.BuildException</type>
      <message><![CDATA[External Program Failed: G:\\android-ndk-r8b\\ndk-build.cmd (return code was 2)]]></message>
      <location>
        <filename>G:/MYPath/project.build</filename>
        <linenumber>7</linenumber>
        <columnnumber>4</columnnumber>
      </location>
      <stacktrace><![CDATA[   at NAnt.Core.Tasks.ExternalProgramBase.ExecuteTask()
   at NAnt.Core.Tasks.ExecTask.ExecuteTask()
   at NAnt.Core.Task.Execute()
   at NAnt.Core.Target.Execute()
   at NAnt.Core.Project.Execute(String targetName, Boolean forceDependencies)
   at NAnt.Core.Project.Execute()
   at NAnt.Core.Project.Run()]]></stacktrace>
    </builderror>
  </failure>
  <duration>296.40000000000003</duration>
</buildresults>Buildfile: file:///G:/MYPath/project.build
Target framework: Microsoft .NET Framework 4.0
Target(s) specified: build

掃除:

 [echo] Starting Android ndk CLEAN ...
 [exec] Android NDK: Unable to determine HOST_OS from uname -s:     
 [exec] Android NDK: Please define HOST_OS in your environment.    
 [exec] process_begin: CreateProcess(NULL, uname -s, ...) failed.
 [exec] G:/android-ndk-r8b/build/core/init.mk:131: *** Android NDK: Aborting.    .  Stop.

BUILD FAILED - 0 個の致命的でないエラー、2 個の警告

cc.net config の私のプロジェクト:

<project>
    <name>MY_PROJECT_NAME</name> 
    <workingDirectory>PATH_TO_MY_PROJECT</workingDirectory>
    <tasks>
        <nant>
            <executable>G:\nant-0.92\bin\Nant.exe</executable>
            <baseDirectory>PATH_TO_MY_PROJECT</baseDirectory>
            <buildFile>MYPROJECTNAME.build</buildFile>
            <buildArgs>build</buildArgs> 
            <buildTimeoutSeconds>1200</buildTimeoutSeconds>
        </nant>
    </tasks>
</project>

そして私のNAntビルドファイル:

<project name="my name" default="build" basedir=".">
    <description>My project Build Files.</description>
    <target name="clean" description="remove all generated files">
        <echo message="Starting Android ndk CLEAN ..."/>
        <exec program="G:\\android-ndk-r8b\\ndk-build.cmd" failonerror="true"
            basedir="MY PROJECT PATH">
            <arg value="clean" />
        </exec>
        <echo message="Android ndk CLEAN done."/>
    </target>
    <target name="build" description="remove all generated files"  depends="clean">
        <echo message="Starting Android ndk BUILD ..."/>
        <exec program="G:/android-ndk-r8b/ndk-build.cmd" failonerror="true" />
        <echo message="Android ndk BUILD done."/>
    </target>
</project>

私が言ったように、私は自分のプロジェクトで Nant.exe を実行することができ、正しくクリーンアップしてビルドします。cc.net が、Linux で使用される他の ndk-build コマンドを実行しようとしているように見えますが、一部のコマンドが uname として欠落しています。cIが間違っている可能性があることを知っていますか?

于 2012-08-16T09:28:15.693 に答える