web-dev-qa-db-ja.com

Android studioはbuild.gradleに外部プロジェクトを追加します

次の設定のサンプルプロジェクトがあります。

/root
  + Pure Java Lib
  + Android Test Lib
  + Android Test Project

Test Project」は「Test Lib」に依存しています、最後は 'Pure Java Lib'に依存しますプロジェクトのコンパイルとこのセットアップの起動は問題なく動作します。

私は今、以前のEclipseワークスペースをインポートしてAndroidスタジオで作業することを考えています。問題はプロジェクトのセットアップが異なることであり、この方法を維持したいと思います。

たとえば、前の例を使用する場合:

/root
  + Android Test Lib
  + Android Test Project

/Some Other folder (another repository for example)
  + Pure Java Lib

多くの構成を試しましたが、親フォルダー( 'root'のスコープ外のプロジェクトを参照する方法を見つけられませんでした例)。

多くのプラットフォーム/モジュールでは、「..」を使用してフォルダ内を上に移動できますが、これは私にとってはうまくいきませんでした。おそらく、間違って使用したのでしょう。

誰もGradleでこれを達成する方法を知っていますか?

UPDATE

私はもっ​​と一般的にしようとします:

/C:/

  /Project A
    + Module 1 - Pure Java
    + Module 2 - Android Test Lib
    + Module 3 - Android Test Project

  /Project B
    + Module 1 - Pure Java
    + Module 2 - Pure Java
    + Module 3 - Pure Java

プロジェクトBプロジェクトAのモジュール1を使用したいと思います。


更新:09-03-19

私はこれを見たので、更新しなければなりません...ほぼ6年後、今日は賢明です、そして、問題は「真実の源」の概念を誤解していたと間違いなく言うことができます。

ライブラリへの参照を1つ持つことは、概念を持つのにうれしいことですが、「真実の源」のように見えるかもしれませんが、実際の「真実の源」は、各プロジェクトがそのライブラリを使用しているコードのバージョンになります。ライブラリ自体にはバージョンがあります。多くのバージョンと「真実の源」は、ライブラリを使用しているプロジェクトに関連しています。

正しい方法は、ほとんどの開発者が気に入らないものを使用することです。これはgitサブモジュールです。各プロジェクトでソースを複製すると、各プロジェクトが異なるバージョンのコードを使用する可能性が高くなります。

ただし、すべてのプロジェクトがすべてのライブラリの最新かつ最高のバージョンを使用することを目指す必要があります。これはそれ自体が課題です。

これがライブラリソースを使用してプロジェクトを開発する正しい方法である理由は、これがスケールするためです...それぞれ独自のライブラリ構成を持つ数百のプロジェクトを持つことができます。

132
TacB0sS

Some Other Folderがgradleプロジェクトであると仮定すると、settings.gradleファイルに次のようなものを追加できます。

include ':module1'
project(':module1').projectDir = new File(settingsDir, '../Project B/Module 1')
216
Ethan

ファイルに入れる必要がありますsettings.gradleこの行:

include ':module2'
project(':module2').projectDir = new File(settingsDir, '../Project 2/Module2')

次に、dependenciesツリーのbuilde.gradle(モジュール:アプリ)に次の行を追加する必要があります。

compile project(':module2')

またはProject Structure>app>DependenciesAddをクリックして、3 Module Dependenciesを選択しますそしてモジュールを選択します

43
Dario Bruzzese

Gradle 1.10では(これが有効な他のバージョンがわからない)これは、ここで与えられた応答に基づいて思いついたものです http://forums.gradle.org/gradle/topics/reference_external_project_as_dependancy

APIライブラリプロジェクト、共通ライブラリプロジェクト、メインアプリプロジェクトがあります。それぞれがスタンドアロンの開発プロジェクトであり、2つのライブラリは複数のアプリ間で共有されることを意図しています。

共通プロジェクトのsettings.gradleで:

def apiLibDir = file('../Android-api/Android-api-lib')
def rootProjectDescriptor = settings.rootProject
settings.createProjectDescriptor(rootProjectDescriptor, 'Android-api-lib', apiLibDir)
include ':Android-api-lib'

次に、メインアプリプロジェクトsettings.gradleで:

def apiLibDir = file('../Android-libs/Android-api/Android-api-lib')
def rootProjectDescriptor = settings.rootProject
settings.createProjectDescriptor(rootProjectDescriptor, 'Android-api-lib', apiLibDir)
include ':Android-api-lib'

def commonLibDir = file('../Android-libs/Android-common/Android-common-lib')
settings.createProjectDescriptor(rootProjectDescriptor, 'Android-common-lib', commonLibDir)
include ':Android-common-lib'

各build.gradleファイルでは、他のプロジェクトの依存関係と同様に、settings.createProjectDescriptorで指定した名前でそれらを参照するだけです。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':Android-api-lib')
    compile project(':Android-common-lib')
}

これはうまくいくようです。 APIライブラリを定義する複数のDEXファイルに対してもエラーをスローしませんでした。それはすべて同じビルドプロセスの一部であり、Gradleはそれをすべて把握するのに十分スマートだったからです。

9
alphonzo79

プロジェクトを右クリック-「モジュール設定を開く」を選択-左ペインで「モジュール」を選択-上部の「+」記号をクリック-「モジュールのインポート」を選択.

モジュールをインポートした後。現在のプロジェクトの依存関係として追加する必要があります。

左ペインで「モジュール」を選択したままプロジェクトをクリックします-依存関係タブで「Go」をクリックし、下部にある「+」記号をクリックします-3番目のオプション「モジュール依存関係」を選択します。プロジェクトを正しくインポートすると、現在のプロジェクトに依存関係として追加できるすべての利用可能なモジュールを表示します。

9
Varundroid

メインAndroidのディレクトリの外にあるカスタムJavaおよびAndroidライブラリをどのように参照しますか?)プロジェクト?

そこで自分の質問に答えます。コアでは、私の答えは@Ethanの(現在のスレッドで選択された答えの著者)gradle coding insightを使用しています。しかし、私の答えは、他のいくつかの落とし穴をナビゲートし、ステップごとの詳細な例を提供します。

1
John Bentley