AndroidでMulti Module対応するときに、そのままトップレベルにFeatureモジュールを追加してもいいのですが、モジュールが増えてくると、管理しにくくなるかなって思っています。
そのため、Featureモジュールは専用のディレクトリを作ってまとめておいたほうが管理が楽かなって気がします。
下のような感じで、 features
ディレクトリにまとめて置きます。
ただ、単純にモジュールをディレクトリに移動しただけでは、エラーがでて使えないので、 settings.gradle
を修正する必要があります。
settings.gradle 修正前
通常は include
にモジュールを並べてるだけですね。これはトップレベルに配置してるから大丈夫で、今回のようにディレクトリに入れてしまうと参照できなくなります。
include ':app', ':feature_one', ':feature_two'
settings.gradle 修正後
トップレベルではないモジュールは以下のように project(':xxx').projectDir
でパスを指定してあげる必要があります。
include ':app', ':feature_one', ':feature_two'
project(':feature_one').projectDir = file('features/feature_one')
project(':feature_two').projectDir = file('features/feature_two')
※追記: 後から知ったのですが、 :features:feature_one
という感じで書けば大丈夫です。毎回projectDirを設定する必要もないです。
settings.gradle 更に修正
これをモジュール毎に記述するのは面倒なので、以下のように書くこともできます。
include ':app'
file('features').eachDir { dir ->
include dir.name
project(":${dir.name}").projectDir = dir
}
features
内のディレクトリを include
に追加しつつ、パスも設定してる感じです。
補足1
ぼくはProject tool windowをいつも Project
で見てるので、フォルダに入れたほうが分かりやすいんですけど、 Android
で見ると、下のように並べられるので、あんまり意味ないかもです。
とはいえ、FinderやGitHubやdiffとかで見るときは分かりやすくなるので、多少は良いかも。
補足2
Android Studio 3.2では、ディレクトリを作って直接そこにモジュールを作ることができないので、一旦トップレベルでモジュールを作って、移動させる必要があります。