2017-01-21 4 views
2

Androidアプリ用のbuild.gradleと、さまざまなサブタスク用のhelper.gradleファイルがあります。これらのヘルパータスクの中には、シェルスクリプトを呼び出すものがあります。このアプリはLinuxとMacのマシンだけで開発されているので、シェルスクリプトは正常に動作します。Android用Gradleクロスプラットフォームビルドスクリプト

私は最近、Windows開発マシンをミックスに追加しました。そして、シェルスクリプトを呼び出す際にgradleビルド設定が失敗しています。

ある時点で、私はCygwinを起動してWindowsマシンで起動しますが、自分のアプリケーションをコンパイルするオプションは何ですか?

  1. それぞれのプラットフォームで呼び出されるhelperTask1_LinuxタスクとhelperTask1_Windowsタスクを効果的に使用する方法はありますか?
  2. シェルスクリプトを呼び出すための "gradle"方法はありますか?それで、私のgradleファイルはより高いレベルでステップを定義していますか?ここで
+1

1試行([オペレーティングシステムの検出] http://stackoverflow.com/questions/228477/how-do-i-programmatically-determine-operating-system-in- java)とそれに応じた分岐。それがどれだけうまくいくのか分かりませんが、試してみる価値があります。 2.スクリプトが何であるか分からず、あなたのアプリケーションに関して「より高いレベル」が何であるかわからないので、誰もが答えることが難しいでしょう。 – CommonsWare

+0

Gradleはより宣言的なものにしようとしています - 私は、グラブルビルドプロセスにヘルパータスクを追加することについて考えるベストプラクティスの方法があるかどうか疑問です。シェルスクリプトを直接呼び出すことは、よりハッキリで十分だと感じます。 - gradleはもはやプラットフォームに依存しません。 – FishStix

答えて

1

が、私はこれをやっている方法です:

  1. プロパティ 'ant.condition.os' を定義。プロパティの値はOSによって異なります。
  2. スイッチのvalueプロパティを使用して、WindowsスクリプトまたはLinuxスクリプトを呼び出します。

ant.condition(property: "os", value: "windows") { os(family: "windows") } 
ant.condition(property: "os", value: "unix" ) { os(family: "unix") } 

task myTask() { 
    switch (ant.properties.os) { 
     case 'windows': 
      commandLine 'cmd', '/c', 'myscript.cmd' 
      break; 
     case 'unix': 
      commandLine './myscript.sh' 
      break; 
    } 
}