1

この状況がどれほど一般的かはわかりませんが、これが私にとってうまくいったことです。問題は次のとおりです。これは正気ですか、それとももっと良い方法がありますか?

tl;dr:

dependencies {
    // remove trailing ':Lib'
    ppath = project.path
    ppath = ppath.substring(0, ppath.length() - 4)
    compile project(ppath + ":jsoup:Lib")
}

メイン プロジェクト OpenKeychain ( https://github.com/open-keychain/open-keychain )
|-Git サブモジュール KeybaseLib ( https://github.com/timbray/KeybaseLib )
 |- Git サブモジュール jsoup ( https://github. com/timbray/jsoup )

ディレクトリ構造は、Android Studio と Gradle の 3 つのプロジェクトすべてに対して設定されています。これは、プロジェクト ルートの下に固有の名前のディレクトリがあり (ライブラリ タイプのプロジェクトには「Lib」を使用するのが好きです)、ソースは root/Lib/src/main/... から始まることを意味します。

open-keychain
|- settings.gradle [1]
|- OpenKeychain
  |- build.gradle [2]
|- extern
  |- KeybaseLib
    |- settings.gradle [3]
    |- Lib
       |- build.gradle [4]
       |- jsoup

OK、問題は、[1]、[2]、[3]、および [4] に何が入るかということです。これにより、open-keychain ルートと KeybaseLib ルートの両方から KeybaseLib と jsoup を gradle-build できますか?

[1]

    include ':extern:KeybaseLib:Lib'
    include ':extern:KeybaseLib:jsoup:Lib'

[2]

dependencies {    
    compile project(':extern:KeybaseLib:Lib')
    ...
}

[3]

include 'Lib'
include ':jsoup:Lib'

[4]

dependencies {
    // remove trailing ':Lib'
    ppath = project.path
    ppath = ppath.substring(0, ppath.length() - 4)
    compile project(ppath + ":jsoup:Lib")
}
4

1 に答える 1

1

Gradle 風のプロジェクト パスを変更しようとするトリックを行う代わりに、モジュールに一貫した単一要素名を付けて、settings.gradle 内のディレクトリを再マップする方が簡単だと思います。

Gradle は単一の settings.gradle ファイルのみをサポートすることに注意してください (ただし、質問を見て、両方を使用するとは想定していないと思いますが、一度に 1 つを使用することを期待しています)。また、プロジェクトに複数の settings.gradle ファイルがある場合に何らかの問題が発生する Android Studio のバグを漠然と思い出します。バグの性質を思い出せず、バグ データベースを検索しても見つかりませんが、悪い動作を見つけた場合は、この回答にコメントを追加してください。

そうは言っても、これがその仕組みです。警告: このコードを実際にテストしたことはありませんが、始めるには役立つはずです。問題がある場合はお知らせください。回答を修正できます。

open-keychain の settings.gradle:

include ':KeybaseLib'
include ':jsoupLib'
project(':KeybaseLib').projectDir = new File(settingsDir, 'extern/KeybaseLib/Lib')
project(':jsoupLib').projectDir = new File(settingsDir, 'extern/KeybaseLib/jsoup/Lib')

KeybaseLib の settings.gradle:

include ':KeybaseLib'
include ':jsoupLib'
project(':KeybaseLib').projectDir = new File(settingsDir, 'Lib')
project(':jsoupLib').projectDir = new File(settingsDir, 'jsoup/Lib')

ここにモジュールの再マッピングに関する関連する質問があります:

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

于 2014-08-12T19:49:26.037 に答える