大規模で複雑な Android ライブラリ プロジェクトを gradle に移行していますが、ライブラリ プロジェクトを大規模プロジェクトに組み込む際に問題が発生しています。これは他の質問で議論されていますが、(私の知る限り)誰もこの問題について投稿していません。いくつかのアプリケーション、多数のサードパーティ ライブラリ、および独自の共有ライブラリがあります。フォルダ構造は次のとおりです。
--Root
-build.gradle
-settings.gradle
|--apps
|--MyApp
|--libraries
|--thirdparty
|--actionbarsherlock
-build.gradle
|--facebook
-build.gradle
|--google-play-services-lib
-build.gradle
|--personal
|--commons
-build.gradle
- AndroidManifest.xml
|--src
|--main, blah blah
|--proprietary
現在、パーソナル/コモンズ ライブラリはすべてのサードパーティ ライブラリ (ABS、Facebook など) に依存しています。各サードパーティの lib は、mavenCentral から取り込める一般的な jar ファイルのみに依存しており、それらのそれぞれは完全にビルドされます。サードパーティを個人ライブラリから分離することが重要であり、それも「ライブラリ」フォルダも実際にはそれ自体が Android プロジェクトではないことも同様に重要です。
(更新: 簡素化するために、基本の build.gradle および settings.gradle ファイル以外のすべてを削除しました。)
少し単純な問題で同様の解決策に従おうとしていることに注意してください。
/root/ フォルダーの settings.gradle ファイルには次のように書かれています。
include ':libraries:personal:commons'
include ':libraries:thirdparty:actionbarsherlock'
include ':libraries:thirdparty:facebook'
include ':libraries:thirdparty:google-play-services-lib'
include ':apps:MyApp'
同じレベル (/root/) の build.gradle ファイルは単純に空です。
編集evaluationDependsOn(':thirdparty:facebook')
:および他のサブプロジェクトへの呼び出しを削除しました。コンパイルすると、同じ答えの依存関係の失敗の問題が発生します。
gradle build
/root/libraries/personal レベルで実行すると (リンクされた例に従って)、最初にすべてのサードパーティ ライブラリが正常にコンパイルされます (万歳!)。次に、実際の Java コンパイル エラーのように見えるものが表示されます: ) 場所: クラス com.personal.commons.dialog.AlertDialogFragment instance.dismissAllowingStateLoss();
ただし、これはリンクの問題であると思われます。これは、(1) コードを変更せずに Eclipse で 1 年以上コンパイルされており、(2) AlertDialogFragment は SherlockDialogFragment を拡張し、それ自体が DialogFragment を拡張し、それdismissAllowingStateLoss()
が定義されている場所であるためです。ただし、クラス定義については文句を言いません
public class AlertDialogFragment extends SherlockDialogFragment {
またはimport com.actionbarsherlock.app.SherlockDialogFragment
ファイルの先頭にあるため、どういうわけかすべてがうまくいっていると考えていますが、依存関係を解決できません。/root/libraries/thirdparty/actionbarsherlock のビルドフォルダを見ると、確かにSherlockDialogFragmentのクラスファイルが出力されています。貧弱なカスタム ライブラリでこれが表示されないのはなぜですか?
私のgradle-fuがまだ弱いため、これまでのところこの問題を解決する試みはすべて失敗しています。私の致命的なエラーがどこにあるか誰か知っていますか?