LoginSignup
22
13

More than 5 years have passed since last update.

【Android】マルチモジュール 簡単なサンプル

Last updated at Posted at 2018-12-24

この記事は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モジュールを追加する

app/build.gradle
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のものに修正する

app/AndroidManifest.XML

<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

22
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
13