2014-01-05 23 views
34

AndroidプロジェクトをAntからGradleに変換しようとしています。Gradleにsettings.gradleファイルが必要なのはなぜですか?

apply plugin: 'android' 

dependencies { 
    compile fileTree(dir: 'libs', include: '*.jar') 
    compile project(':MyApp-AndroidLibrary') 
} 

私はGradleのビルドを実行します。私はのMyAppにbuild.gradleファイルを追加すると

Workspace 
    MyApp 
    MyApp-AndroidLibrary 

が、私は私のAndroidライブラリプロジェクトを参照したい:

私のEclipseワークスペースは非常に簡単です「パス付きプロジェクト:MyApp-AndroidLibrary」がルートプロジェクトに見つかりませんでした。私はこれを検索し、ワークスペースディレクトリに「settings.gradle」ファイルを設定して、

を追加する必要があることがわかりました。
include ":MyApp" 
include ":MyApp-AndroidLibrary" 

Gradleにsettings.gradleファイルが必要な理由は、私にはあまりにも悪いようです。依存関係で定義したプロジェクトを抽出するだけではないのですか?

また、includeはどういう意味ですか?私はanotoherアプリとワークスペース内の他の共有ライブラリを持っている場合、構造は次のように見えるかもしれ何:

Workspace 
    App1 
    App2 
    Library1(Used by App1 & App2) 
    Library2(Used only by App1) 
    Library3(Used only by App2) 

のみONE settings.gradleファイルがあるので、私はsettings.gradleにそれらのすべてを追加する必要がありました。それは良いにおいがしません。

はい、私は、図書館2をApp1の子ディレクトリにし、図書館3をApp2の子ディレクトリにするように再構成することができますが、Library1はどうですか?

これに関するコメント?

答えて

12

いくつかの質問があります。ここではいくつかのヒントがあります:

  • ':MyApp-AndroidLibrary'settings.gradleで提供される情報に基づいて物理パスにマッピングされます論理プロジェクトパス、です。
  • マルチプロジェクトビルドは任意のディレクトリ構造を持つことができ、settings.gradleで設定されています。あなたが望む場合を除き、ディレクトリを移動する必要はありません。
  • EclipseワークスペースとGradleビルドは別の境界です。同じワークスペースに複数のビルドを作成することができます。
  • ソースからビルドされたライブラリを使用する場合は、それらを同じビルドの一部にするか、別のビルドをビルドすることができます。後者の場合は、アプリケーションの前にライブラリを構築し、MavenまたはIvyリポジトリ経由でアーティファクトを交換する必要があります。これは、CIサーバーと企業のMaven/Ivyリポジトリを使用して自動化できます。あるいは、マシン上でライブラリのビルドを手動で起動し、ローカルのMaven/Ivyリポジトリを使用することもできます。

詳細については、Gradle User Guide、特にマルチプロジェクトビルドの章を参照してください。

+1

多くのユースケースをより簡単にするデフォルト動作(これはほとんどの場合と同じディレクトリ構造に一致します)がない理由はまだわかりません。 – yhpark

+1

Gradleは実際に 'settings.gradle'の情報をプロジェクトの依存関係を特定するのに使用せず、' build.gradle'ファイルに定義されているプロジェクトの依存関係を論理パスから物理パスにマップするだけです。 – sschuberth

+5

'settings.gradle'の情報は、このビルドの一部であるサブプロジェクト、それらの論理パスと物理パス、ビルドスクリプトの名前付け方法などをGradleに伝えます。Gradleには、サブプロジェクトはあります。 –

0

人が(自分や喜んだ人のように)この問題を抱えていて、解決策を見つけることができなかった場合にも。ディレクトリMy-App

移動ファイルsettings.gradleをしてincludeFlat 'MyApp-AndroidLibrary'によってincludeを置き換える:Gradleの現在のバージョンを使用すると、これを行うことができます。これで問題は解決するはずです。

さらに詳しい情報については、Gradle User Guideのthis questionthis sectionを参照してください。