144

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

/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でこれを達成する方法を知っている人はいますか?

アップデート

私はより一般的にしようとします:

/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

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


更新: 09-03-19

私は今これを見て、更新しなければなりません...ほぼ6年経った今、私はより賢く、問題は「真実の源」の概念を誤解していたことであると断言できます.

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

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

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

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

4

6 に答える 6

55

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

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

次に、依存関係ツリーにbuilde.gradle (Module: app)を追加する必要があります。この行は次のとおりです。

implementation project(':module2')

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

于 2015-04-13T10:42:10.600 に答える
9

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 がすべてを把握するのに十分なほどスマートだったためだと思います。

于 2014-06-17T05:00:29.297 に答える
8

プロジェクトを右クリック - [Open Module Settings] を選択 - 左ペインで [Modules] を選択 - 上部の [+] 記号をクリック - [Import Module] を選択します。

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

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

于 2013-07-04T23:48:47.747 に答える
-1

イーサンが言ったように、これを settings.gradle に追加すると、外部プロジェクトが Android Studio に追加されます (この例では、親フォルダーにあります)。

project(':../ProjectB/:module1')

次に、プロジェクトの 1 つの依存関係として追加するには、そのプロジェクトの build.gradle に、次のように別の依存関係として追加します (ここのようにグラフィカルに行うこともできます)。

compile project(':../ProjectB/:module1')
于 2015-02-10T08:29:24.270 に答える