Android Multi Moduleでのフォルダ構成

Kenji Abe
4 min readJan 5, 2019

--

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では、ディレクトリを作って直接そこにモジュールを作ることができないので、一旦トップレベルでモジュールを作って、移動させる必要があります。

参考

--

--

Kenji Abe
Kenji Abe

Written by Kenji Abe

Programmer / Gamer / Google Developers Expert for Android, Kotlin / @STAR_ZERO

No responses yet