2012-05-14 18 views
15

I多分これではないので、一般的なセットアップがあります。ビルのAndroidプロジェクト

(> =依存)
のAndroidプロジェクト>のAndroidライブラリプロジェクト1>のAndroidライブラリプロジェクト2
私は別のライブラリプロジェクトに依存しているAndroidライブラリプロジェクトを持っています。

私がEclipseでプロジェクトをビルドすると、everythingsは正常に動作しますが、私のビルドをAntで扱うことはできません。

最初のAntは、classes.jarを生成するAndroidライブラリプロジェクト2をコンパイルし、このファイルをbinフォルダに入れます。
jarファイルがLIBSに含まれていませんbecouseまあ、これはとても奇妙ではありませんそして、Antのは、Androidライブラリプロジェクト1をコンパイルしようとしますが、それは、Androidライブラリプロジェクト2.

からクラスが欠落しているbecouse、私はエラーを取得していますフォルダ。 しかし、project.propertiesではライブラリプロジェクト2に依存関係を作ったので、Antはライブラリプロジェクト1のlibsフォルダにclasses.jarをコピーしないのはなぜですか?

私はAntタスクを使用してファイルをlibsフォルダにコピーするソリューションを考えることができますが、私が望ましくないbuild.xmlを修正する必要があります。

** EDIT

問題は、私はこのjavaファイルは、Rクラスが含まれていませんclasses.jarで見たときにRクラスは、欠落していることです。だから、私の解決策は賢明には機能しません。

+0

同じ問題があります。最近、現在のSDKツールで古いプロジェクトを再コンパイルしようとしましたが、この問題が発生しました。これまでにビルドに使用されたソースコードをマージするのは問題ではありませんでしたが、現在はjarファイルをコンパイルしていて、何らかの理由でRクラスを削除しています。 "答え"のどれも本当の答えではありません。私の場合、私は有料で無料のバージョンのアプリを持っており、2つのプロジェクトと共通のライブラリを持つという推奨パターンを使用しています。トップレベルのプロジェクトが共通ライブラリのすべての依存関係を管理しなければならないという良いパターンとは思えません。 –

答えて

1

antの場合は、ant.propertiesの依存関係の追加をコンパイルします。 例:

android.library.reference.1=../path/to/library 
+1

はい、この参照をしました。これは、通常のAndroidプロジェクトでは動作しますが、ライブラリプロジェクトから別のライブラリプロジェクトへの参照を作成するときは動作しません。 – user1051892

+0

ライブラリプロジェクトにant.propertiesを追加しましたか?また、あなたの参照のlibルートフォルダant.propertiesを作成していない – Tarun

+0

アンドロイドUDPATEプロジェクトに '.'「アンドロイド更新プロジェクト-l『LIB参照』-pを実行して、ライブラリプロジェクトを更新しようとすることができます。私はant.propertiesを追加しました私は別のフォルダ(Androidの普通のプロジェクト)からビルドしているので、蟻がファイルを読み込むかどうかは分かりません – user1051892

1

は、これは非常に脆く、セットアップのように聞こえる - あなたはこのために正当な理由があるかもしれませんが、あなたの代わりにお互いにライブラリの依存を切り離すことができますか?

たとえば、 bridge patternを実装して、両方のライブラリ間の呼び出しを翻訳し、呼び出すAndroidプロジェクトに添付します。このようにして、どちらのライブラリにも依存しないコードがなくなり、依存関係の設定を処理する必要がある唯一のプロジェクトがメインプロジェクトになります。

ライブラリを使用する主な理由の1つは、コードを再利用できるようにすることです。このアプローチは、誰か(あなた、同僚、後継者)がただ1つのライブラリにプラグインして、別のもの。ここで

は、Javaでのブリッジパターンを適用上の別の良い記事です:http://java.dzone.com/articles/design-patterns-bridge

1

さて問題は、Rクラスが欠落していたということでした。
私は2つのライブラリプロジェクト間のRクラスの依存関係を削除しました。
これは修正可能かどうかわかりませんが、それは決して悪い習慣だと思います。

この依存関係がない場合、Antはうまく構築されます。

2

この動作は、ビルドツールのR17の変化によって引き起こされなかった。一言で言えばhttp://tools.android.com/recent/dealingwithdependenciesinandroidprojects

:ライブラリのためのRファイルは、もはやそのライブラリのためclasses.jarにパッケージされています。しかし、親ライブラリ(あなたの例ではproject1)のpareent.Rも '子'ライブラリ(あなたの例ではproject2)のリソース参照を含んでいるので、とにかく子Rを参照する必要はありません。

project1.Rのimport文でProject1の中のすべてのproject2.R-import文を交換して、あなたは問題ないはずです。

0

古い質問が、私のように、他の人がこれに頭を強打される可能性があります...

公式の答えは、具体的に、「それは行うことはできません」されています

ビルド時に、ライブラリーは、最も低い優先順位から最も高い優先順位まで、一度に1つずつアプリケーションとマージされます。 ライブラリは別のライブラリを参照することはできません。また、構築時には、ライブラリとマージする前にライブラリがマージされないことに注意してください。

(公式文書から抜粋:"Referencing a Library Project")。ツールでそれを行うには、「クリーン」な方法がないよう、何でもありということを意味

(と汚い方法が順になっています)。

希望します。

関連する問題