別プロジェクトのモジュールを参照するには

提供: tknotebook
2015年10月13日 (火) 10:00時点におけるNakamuri (トーク | 投稿記録)による版

移動: 案内検索

メインページ>コンピュータの部屋#Android>AndroidStudio Tips


AndroidStudioでは、ライブラリプロジェクトを別のプロジェクトからインポートすることなく参照することができません。

同一プロジェクト内にモジュールを並べ、モジュールをアプリやライブラリとみなせばよいのですが、プロジェクトが VCSに登録する 単位なのでややこしいことになりそうです。

本来 ローカルの Maven リポジトリなどを作り、間接参照するのが筋なのかもしれませんが、はっきり言って大袈裟です。

アプリやライブラリをプロジェクトとして個別に管理しつつ、あるプロジェクトから別のプロジェクト内のモジュールをインポートせずに参照する方法を探していたのですが、 まだ実験してから日が浅いので、ひょっとするとまずい点があるかもしれませんが、一応できることが分かったので、その方法を紹介します。

とても簡単です。

以下では FreyjaLibrary プロジェクトの freyja モジュールを参照する例を示します。

settings.gradleを変更する

まずモジュールを参照する側のプロジェクトの settings.gradle を変更します。

settings.gradle はビルドプロセスの初期化を行う部分ですが、プロジェクトに属するモジュールを決定するのに 用いられています。

#本来、Gradle では モジュールのことを プロジェクトと呼び、AndroidStudio のプロジェクトは、複数プロジェクトをまとめるルートプロジェクトです。

通常、settings.gradle には

 include ':app', ':lib1'

など、include メソッドで、ルートプロジェクトに属するプロジェクト(モジュール) を指定します。これをプロジェクトツリーといいます。

この場合、ルートプロジェクトに属するプロジェクト(モジュール)はルートプロジェクトのフォルダの直下にある仮定されています。

これを以下のように変更すると、任意の場所にあるプロジェクト(モジュール)をプロジェクトツリーに含めることができます

include ':app', ':lib1', ':freyja'
project(':freyja').projectDir = new File(settingsDir, '../../libs/FreyjaLibrary/freyja')

因みに settingsDir は setteings.gradle の在るフォルダ(ルートプロジェクトのあるフォルダ)です。 絶対パスでモジュールの場所を指定してもかまいませんが、たいていは相対的に決めた方が便利でしょう。

モジュールの build.gradleを変更する

あるモジュールが、settings.gradle に追加したプロジェクト(モジュール)を使いたい場合、 そのモジュールの build.gradle の dependencies に以下の行を追加します。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:design:23.0.1'
    compile project(':freyja')
}

追加したのは compile project(':freyja'); です。

この操作は、追加したモジュールが別プロジェクトの場合、IDE の Project Structure のDependencies タブでは何故かできないので注意してください。


この後、プロジェクトをビルドすると、プロジェクトにモジュール freyja が加わり、プロジェクトツールウィンドウやProject Structureからも見えるようになります。 実際 この時点で freyja モジュールはプロジェクトの一部になっており、編集も可能です。

モジュール freyja はそれを使いたいモジュールから見えるようになり、クラスのインポートなども通常通り行えます。

これで、ライブラリを変更しても、ライブラリをコンパイルして、 *.aar を利用しているプロジェクトに配布しなおす必要はなくなります。