「別プロジェクトのモジュールを参照するには」の版間の差分

提供: tknotebook
移動: 案内検索
(settings.gradleを変更する)
(settings.gradleを変更する)
 
(1人の利用者による、間の17版が非表示)
10行: 10行:
 
本来 ローカルの Maven リポジトリなどを作り、間接参照するのが筋なのかもしれませんが、はっきり言って大袈裟です。
 
本来 ローカルの Maven リポジトリなどを作り、間接参照するのが筋なのかもしれませんが、はっきり言って大袈裟です。
  
アプリやライブラリをプロジェクトとして個別に管理しつつ、'''あるプロジェクトから別のプロジェクト内のモジュールをインポートせずに参照する方法'''を探していたのですが、
+
実はAndroidStudioのGUIの操作だけでは不可能ですが、Gradleのファイルをわずかに変更するだけで、プロジェクトにまたがるモジュールの参照は可能です。
まだ実験してから日が浅いので、ひょっとするとまずい点があるかもしれませんが、一応できることが分かったので、その方法を紹介します。
+
  
とても簡単です。
+
しかもとても簡単です。
  
 
以下では '''FreyjaLibrary''' プロジェクトの '''freyja''' モジュールを参照する例を示します。
 
以下では '''FreyjaLibrary''' プロジェクトの '''freyja''' モジュールを参照する例を示します。
24行: 23行:
 
用いられています。
 
用いられています。
  
#本来、Gradle では モジュールのことを プロジェクトと呼び、AndroidStudio のプロジェクトは、複数プロジェクトをまとめるルートプロジェクトです。
+
settings.gradleは AndroidStudioでは プロジェクトツールウィンドウが Android View の場合、Gradle Scripts の中にありますので
 +
それを変更してください。
  
通常、settings.gradle には
+
 
 +
通常、settings.gradle では
  
 
 include ':app', ':lib1'
 
 include ':app', ':lib1'
  
など、include メソッドで、ルートプロジェクトに属するプロジェクト(モジュール) を設定します。これをプロジェクトツリーといいます。
+
など、include メソッドで、プロジェクトに属するモジュールを指定します。これをプロジェクトツリーといいます。
  
この場合、ルートプロジェクトに属するプロジェクト(モジュール)は'''ルートプロジェクトのフォルダの直下'''にある仮定されています。
+
この場合、プロジェクトに属するモジュールは'''プロジェクトのフォルダの直下'''にあると仮定されています。
  
これを以下のように変更すると'''、任意の場所にあるプロジェクト(モジュール)をルートプロジェクトに含めることができます'''。
+
これを以下のように変更すると'''、任意の場所にあるモジュールをプロジェクトツリーに含めることができます'''。
  
 
  include ':app', ':lib1'''', ':freyja''''
 
  include ':app', ':lib1'''', ':freyja''''
 
  '''project(':freyja').projectDir = new File(settingsDir, '../../libs/FreyjaLibrary/freyja')'''
 
  '''project(':freyja').projectDir = new File(settingsDir, '../../libs/FreyjaLibrary/freyja')'''
  
因みに settingsDir は setteings.gradle の在るフォルダ(ルートプロジェクトのあるフォルダ)です。
+
ちなみに、gradle ではモジュールのことを project、プロジェクトのことを root project といいます。
絶対パスでモジュールの場所を指定してもかまいませんが、たいていは相対的に決めた方が便利でしょう。
+
つまり '''project(':freyja')''' はモジュールを指してます。
 +
 
 +
'''settingsDir''' は setteings.gradle の在るフォルダ(プロジェクトのあるフォルダ)です。
 +
絶対パスでモジュールの場所を指定してもかまいませんが、たいていは settingsDir に対する相対で指定した方が便利でしょう。
  
 
==モジュールの build.gradleを変更する==
 
==モジュールの build.gradleを変更する==
  
あるモジュールが、settings.gradle に追加したプロジェクト(モジュール)を使いたい場合、
+
あるモジュールが、settings.gradle に追加したモジュールを使いたい場合、
そのモジュールの build.gradle の dependencies に以下の行を追加します。
+
そのモジュールの build.gradle の dependencies に以下の太字の行を追加します。
  
 
  dependencies {
 
  dependencies {
52行: 56行:
 
     compile 'com.android.support:appcompat-v7:23.0.1'
 
     compile 'com.android.support:appcompat-v7:23.0.1'
 
     compile 'com.android.support:design:23.0.1'
 
     compile 'com.android.support:design:23.0.1'
     compile project(':freyja')
+
     '''compile project(':freyja')'''
 
  }
 
  }
  
追加したのは compile project(':freyja'); です。
+
追加したモジュールが別プロジェクトの場合、'''IDE の Project Structure のDependencies タブでは何故か編集できない'''ので注意してください。
 
+
直接ファイルを編集して下さい。
この操作は、追加したモジュールが別プロジェクトの場合、IDE の Project Structure のDependencies タブでは何故かできないので注意してください。
+
 
+
  
 
この後、プロジェクトをビルドすると、プロジェクトにモジュール freyja が加わり、プロジェクトツールウィンドウやProject Structureからも見えるようになります。
 
この後、プロジェクトをビルドすると、プロジェクトにモジュール freyja が加わり、プロジェクトツールウィンドウやProject Structureからも見えるようになります。
65行: 67行:
 
モジュール freyja はそれを使いたいモジュールから見えるようになり、クラスのインポートなども通常通り行えます。
 
モジュール freyja はそれを使いたいモジュールから見えるようになり、クラスのインポートなども通常通り行えます。
  
ライブラリを変更したら、コンパイルしていちいち *.aar を利用しているプロジェクトに配布しなおす必要はなくなります。
+
これで、ライブラリを変更しても、ライブラリをコンパイルして、 *.aar を利用しているプロジェクトに配布しなおす必要はなくなります。

2015年11月9日 (月) 23:21時点における最新版

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


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

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

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

実はAndroidStudioのGUIの操作だけでは不可能ですが、Gradleのファイルをわずかに変更するだけで、プロジェクトにまたがるモジュールの参照は可能です。

しかもとても簡単です。

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

settings.gradleを変更する

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

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

settings.gradleは AndroidStudioでは プロジェクトツールウィンドウが Android View の場合、Gradle Scripts の中にありますので それを変更してください。


通常、settings.gradle では

 include ':app', ':lib1'

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

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

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

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

ちなみに、gradle ではモジュールのことを project、プロジェクトのことを root project といいます。 つまり project(':freyja') はモジュールを指してます。

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

モジュールの 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')
}

追加したモジュールが別プロジェクトの場合、IDE の Project Structure のDependencies タブでは何故か編集できないので注意してください。 直接ファイルを編集して下さい。

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

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

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