2017-09-15 17 views
0

私はそれに3つのモジュールを持っているAndroidスタジオのプロジェクトがあります。 A、B、C. AはCに依存し、BはCに依存します。 私はビルド時間を短縮しようとしています。私はassembleRelease/assemblyeDebugタスクを実行するたびにすべてのモジュールをビルドすることに気付きました。 ビルドするたびにモジュールAはAとCをビルドするだけです。Bはそのタスクに依存しないからです。 モジュールAをビルドするたびにモジュールBがビルドされないようにするにはどうすればよいですか?ビルドAndroid Studioのモジュール除外

モジュールAの依存関係:

dependencies { 
    compile project(path: ':c', configuration: 'release') 
    provided files('libs/some-lib.jar') 
} 

モジュールBの依存関係:

dependencies { 
    compile project(path: ':c', configuration: 'debug') 
} 

モジュールCの依存関係:あなたはGradleのを使用する場合は、タスクを実行するためのダイアログを投影し

dependencies { 
    compile files('libs/other-lib.jar') 
} 
+0

どのようにタスクを実行していますか?コマンドラインから、またはAndroidスタジオのGradleダイアログから – jdv

+0

私はgradleダイアログからタスクを実行していました。今はコマンドラインからタスクを実行していて、ビルド時間が大幅に減りました。明らかに、gradleダイアログはビルドしようとしているすべてのモジュールを構築します –

+0

何が起こっているのですか注意してください)Android Studioからサブモジュールタスクを実行することは、実際にプロジェクトのルートからタスクを呼び出すことです。ルートには通常すべてのリファレンスが含まれているため、設定されたビルドツリーにはすべてのモジュールが含まれます。サブモジュールタスクを実行しているAndroid Studioの2番目のインスタンス/ウィンドウを起動すると、そのモジュールとその依存関係に基づいてビルドツリーが作成されます。これは、Gradleログで簡単に確認できます。 – jdv

答えて

0

There is a bug in Android Studio、これらのタスクはルートコンテキストで実行されます。つまり、注意深く見ると、たとえルートレベルで同じタスクを実行したかのように、サブモジュールのタスクでも実行されます。

ソリューション:

  1. コマンドラインのGradleかのGradleラッパーを使用してください。
  2. は常に単純にルートsettings.gradleファイル内の関連モジュール(この場合はB)のinclude文を削除するAndroidのメーカーの2つのインスタンス(すなわち、複数のプロジェクトを開いてい)
+0

私は以下のようなコマンドを使ってコンソールからビルドを始めました:** gradlew a:assembleDebug ** ..ビルド時間が大幅に減りました!ありがとう –

-1

が建物からAndroidのメーカーを停止する必要があります実行しますBは全体のGradleプロジェクトから除外します。モジュールはそのまま残っていますが、コードを変更する予定がある場合は、includeステートメントを再追加する必要があります。また、settings.gradleファイルを変更するには、Androidスタジオが正常に動作するためのGradle Syncが必要です。

+0

これは、モジュールBをプロジェクトの一部にしたくないと言っているようなものです。これはおそらくここでやりたいことではありません。 – jdv

+0

実際に物事がどのように構造化されているかによって大きく左右されます。私の場合、モジュールディレクトリがプロジェクトルート内にある場合、 '' 'include''ステートメントが削除されてもそれがプロジェクトから削除されているとは考えられません。 OPの中核点である少ないビルドで、 – ahasbini

+0

はい、しかし、少なくとも2.xでは、Android Studioは_削除しました。モジュールのリストから削除するかどうか尋ねられます。UIの太字ではなく通常のフォントで表示されます。たとえそれを "削除"せずにモジュールリストに残しておいても、メインプロジェクトには付いていないとしても、あらゆる問題があります。コマンドラインからのGradleはおそらく動作しますが、Android Studioの同期やその他のUIアクティビティでは、そのモジュールは決して見られません。さらに、チームの設定では、このファイルは共有され、調整することであらゆる種類の不必要な混乱を招くことになります。 – jdv

関連する問題