「別プロジェクトのモジュールを参照するには」の版間の差分
3行: | 3行: | ||
− | AndroidStudioでは、一つのライブラリプロジェクトを別のプロジェクトからインポートすることなく参照することができません。 | + | '''AndroidStudioでは、一つのライブラリプロジェクトを別のプロジェクトからインポートすることなく参照することができません。''' |
同一プロジェクト内にモジュールを並べ、モジュールをアプリやライブラリとみなせばよいのですが、プロジェクトが VCSに登録する | 同一プロジェクト内にモジュールを並べ、モジュールをアプリやライブラリとみなせばよいのですが、プロジェクトが VCSに登録する | ||
10行: | 10行: | ||
本来 ローカルの Maven リポジトリなどを作り、間接参照するのが筋なのかもしれませんが、はっきり言って大袈裟です。 | 本来 ローカルの Maven リポジトリなどを作り、間接参照するのが筋なのかもしれませんが、はっきり言って大袈裟です。 | ||
− | + | アプリやライブラリをプロジェクトとして個別に管理しつつ、'''あるプロジェクトから別のプロジェクト内のモジュールをインポートせずに参照する方法'''を探していたのですが、 | |
まだ実験してから日が浅いので、ひょっとするとまずい点があるかもしれませんが、一応できることが分かったので、その方法を紹介します。 | まだ実験してから日が浅いので、ひょっとするとまずい点があるかもしれませんが、一応できることが分かったので、その方法を紹介します。 | ||
26行: | 26行: | ||
include ':app', ':lib1' | include ':app', ':lib1' | ||
− | など、include メソッドで、ルートプロジェクトに属するプロジェクト(モジュール) | + | など、include メソッドで、ルートプロジェクトに属するプロジェクト(モジュール) を設定します。これをプロジェクトツリーといいます。 |
− | + | この場合、ルートプロジェクトに属するプロジェクト(モジュール)は'''ルートプロジェクトのフォルダの直下'''にある仮定されていますが、 | |
+ | これを以下のように変更すると'''ルートプロジェクトに任意の場所にあるプロジェクト(モジュール)を含めることができます'''。 | ||
include ':app', ':lib1', ':freyja' | include ':app', ':lib1', ':freyja' | ||
53行: | 54行: | ||
− | この後、プロジェクトをビルドすると、プロジェクトにモジュール freyja が加わり、プロジェクトツールウィンドウからも見えるようになります。実際 この時点で freyja | + | この後、プロジェクトをビルドすると、プロジェクトにモジュール freyja が加わり、プロジェクトツールウィンドウからも見えるようになります。実際 この時点で freyja モジュールはプロジェクトの一部になっており、編集も可能です。モジュール freyja はそれを使いたいモジュールから見えるようになります。クラスのインポートなども通常通り行えます。 |
− | + | ライブラリを変更したら、コンパイルしていちいち *.aar を利用しているプロジェクトに配布しなおす必要はなくなります。 | |
− | + |
2015年10月13日 (火) 02:37時点における版
メインページ>コンピュータの部屋#Android>AndroidStudio Tips
AndroidStudioでは、一つのライブラリプロジェクトを別のプロジェクトからインポートすることなく参照することができません。
同一プロジェクト内にモジュールを並べ、モジュールをアプリやライブラリとみなせばよいのですが、プロジェクトが VCSに登録する 単位なのでややこしいことになりそうです。
本来 ローカルの Maven リポジトリなどを作り、間接参照するのが筋なのかもしれませんが、はっきり言って大袈裟です。
アプリやライブラリをプロジェクトとして個別に管理しつつ、あるプロジェクトから別のプロジェクト内のモジュールをインポートせずに参照する方法を探していたのですが、 まだ実験してから日が浅いので、ひょっとするとまずい点があるかもしれませんが、一応できることが分かったので、その方法を紹介します。
とても簡単です。
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 が加わり、プロジェクトツールウィンドウからも見えるようになります。実際 この時点で freyja モジュールはプロジェクトの一部になっており、編集も可能です。モジュール freyja はそれを使いたいモジュールから見えるようになります。クラスのインポートなども通常通り行えます。
ライブラリを変更したら、コンパイルしていちいち *.aar を利用しているプロジェクトに配布しなおす必要はなくなります。