2013-12-23 4 views
8

私はカスタムライブラリに依存するAndroidアプリケーションを作成しています.Gradleはプロジェクト依存関係を使用するときには、私はライブラリのjarファイルをインクルードするためにファイルの依存関係を使用します。私は、API堤防19 SDKを使って自分のアプリとライブラリの両方を構築しています。Gradleにプロジェクト依存のライブラリのクラスのみが含まれているのはなぜですか?

失敗build.gradleからdependenciesセクション:

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
    compile files('libs/MyLibrary.jar') 
} 

Iは、上記dependencies部を使用する場合、そのclasses.dexを抽出することによって確認されるように、MyLibrary.jarのクラスのいずれも、ビルドAPKファイルに含まれていないとデックスダンプを実行しています。私は、すべてのクラスが私が使用しているjarファイルに存在することも確認しました。

私は、次のdependenciesセクションを使用する場合は、すべててMyLibrary内のクラスのは、APKファイルに含まれています:

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
    compile project(':MyLibrary') 
} 

私は、Android Studioの0.4.0、Gradleの1.9を使用している、と私は思いますGradleプラグイン0.7.1。

ここでは何が起こっていますか?私は本当に互換性をテストするAPIレベル18 SDKで私のアプリケーションを構築したいと思いますが、私は私のライブラリのjarファイルを使用することができない限り、私はそれを得ることができません。

+1

+のバージョンのinstreadはありませんか?コンパイル 'com.android。サポート:appcompat-v7:19+ ' – Benoit

+0

jarファイル自体をAPKに入れるか、JARのクラスだけをインクルードしようとしていますか? – superEb

+0

私は瓶からのクラスを含めることのみを試みています。 – Greg

答えて

3

これは私のせいです。私のライブラリのbuild.gradleは、jar出力ファイルにソースファイルのみを含めるように設定されていました。以下はが正しくありませんグレードコードと私にあったのと同じ問題を与えるでしょう。

task jar(type: Jar) { 
    from android.sourceSets.main.java 
} 

This answerは、jarファイルの作成を修正する方法を示しています。それは醜いですが、うまくいくようです。

0

ロングショットのほんの少しですが、Android Studio 0.4.0を使用していない場合にjarファイルを追加したばかりの場合は、プロジェクトを一掃してゼロから再構築してみてください。我々はこのバグを見た:https://code.google.com/p/android/issues/detail?id=63366このバグはローカルのjarファイルではなくMavenからダウンロードされた依存関係を意味します(重要な違いかもしれません)。これはAndroid Studio 0.4.0(具体的には、Gradle Plugin 0.7.0)で修正されました。

+0

私は既にAndroid Studio 0.4.0を使用しています.Gradleプラグイン0.7.1を使用していると思います。使用しているGradleプラグインのバージョンを確認するにはどうすればよいですか?また、私が行った変更のたびに、クリーニングと再構築を試みました。 – Greg

+0

アンドロイドスタジオ0.4.0を使用している場合は、少なくとも0.7.0のプラグインを使用していますので、この特定のバグを打つべきではありません。だから私は何を正確に知っていないが、それは別のものだ。 –

+0

単純なテストケースを作成しようとしましたが、問題を再現できませんでした。 Androidプラグインが複数のdexed sourc.esのAPKをどのようにリンクしているのか(これまでの似たような性質の他の問題報告に基づく)に問題があるかどうか疑問に思い始めましたが、問題がある場合はそれほど簡単ではありません1つは見つけること –

1

Jarタスクには、最終的なjarアーチファクトの依存関係は含まれません。 Gradle documentationからjarタスクの

のjarタスクは、クラスファイルとプロジェクトの リソースを含むJARファイルを作成します。

あなたのプロジェクトにはjarをビルドしているので、すべての依存関係は実行時に提供されることを前提としています。 warとは対照的に、すべての依存関係は通常最終アーティファクトに含まれます。

依存関係を含む「fat jar」を作成する必要がある場合は、特定のプラグイン(たとえば、gradle-fatjar-plugin)を調べます。

+0

私は瓶を作りません、私はAndroidアプリを作成しています。私はそれを構築しようとしている瓶のクラスは含まれていません。 – Greg

+0

いくつかのライブラリに依存関係を宣言しても、明示的に言わない限り、依存関係が展開されて最終的な成果物に含まれることを意味するものではありません。プロジェクトの 'build'ディレクトリを調べて、どこに行くのかを見て、' --info'フラグで 'gradle'を実行しようとします。 – kukido

+0

最後のアーティファクトに何が*含まれているかを制御するにはどうしたらいいですか?他のすべての依存関係にはすべてのクラスが含まれています。この依存関係を 'files'依存関係の代わりに' project'依存関係として宣言すると、そのクラスが含まれます。 – Greg

関連する問題