この記事はand factory Advent Calendar 2018 Day 24の記事になります。
前日は@tsumuchan の「【Realm】忘れがちなcloseは、拡張関数のuseを使うと便利【Kotlin】」でした。
きっかけ
Androidアプリを配信する方法として、従来のアプリをインストールする方法以外にも、インストールせずにアプリを試すことができるInstant Appや、アプリ全体ではなくユーザが必要としている機能毎にインストールができるDynamic Deliveryなど発表されています。これらを実現させるためにはアプリを複数のモジュールに分割する必要が出てきました。
また、上記の配信が不要でも、今後Androidアプリが高度化する上で、依存性を限られた部分に閉じ込めるコードを維持するために複数モジュールはありなのかと考えています。
ここでは、サンプルアプリを作成して、簡単な複数モジュールを動すところまでを書きたいと思います。
動作環境
Android Studio 3.2.1
サンプルコード
作成手順
アプリを新しく作成する
新しくアプリを作成して起動すると Hello World という文字が表示されると思います。
libraryモジュールを追加する
- [File] -> [new] -> [New Module] -> Android library を選択してnextを押します
- 名前はmylibraryを指定します。ディレクトリパスを適当な場所を指定して追加してください。
appモジュールの依存設定にlibraryモジュールを追加する
dependencies {
implementation project(":mylibrary") // この記述を追加
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
libraryモジュール内にActivityを作成する
- libraryモジュールのsrc/main/java/パッケージ名/LibActivity(※1)を追加します。
AndroidStudioが用意しているメニューからActivityを生成するとレイアウトファイルの用意やAndroidManifest.xmlの変更もやってくれるので便利です。
※1: appモジュールと同じ名前でActivityを追加すると上手く動かないです。おそらく名前が重複するとappモジュールのファイルを優先してビルドしているのかもしれません。
動作確認のためTextViewを追加する
- libraryモジュールのMainActivityのレイアウトXMLに動作確認用のTextViewを追加してください。
appのマニフェストのアプリ起動時に表示されるActivityをlibraryのものに修正する
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name="jp.yiwaisako.simple_multi_module_sample.mylibrary.LibActivity">
// 上のようにパスを変更
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
動作確認
アプリを起動してlibraryモジュールに追加したActivityが表示されていれば問題ないと思います。
まとめ
libraryモジュールを作成してActivityを立ち上げるまでを記載しました。ここまでは簡単に試すことができるので、複数モジュールを試すには良いかと思います。
ただ、DaggerやBuild.gradleの効率的な記載などハードルもありますので、自分なりに良い方法が見つかったら追記していきたいと思います。
参考
Multiple application modules in one Android project
https://medium.com/mindorks/multiple-application-modules-in-one-android-project-36e86ceb8a9
How modularization can speed up your Android app’s built time
https://medium.freecodecamp.org/how-modularisation-affects-build-time-of-an-android-application-43a984ce9968
annict-android
https://github.com/kgmyshin/annict-android
multi-module-no-susume
https://speakerdeck.com/kgmyshin/multi-module-no-susume