15

私はおそらくこれはあまり一般的ではないセットアップを持っています:

(> = 依存関係)
Android プロジェクト > Android ライブラリ プロジェクト 1 > Android ライブラリ プロジェクト 2
したがって、別のライブラリ プロジェクトに依存する Android ライブラリ プロジェクトがあります。

Eclipse でプロジェクトをビルドしているとき、すべて正常に動作しますが、ビルドを Ant で動作させることができません。

まず、Ant は Android ライブラリ プロジェクト 2 をコンパイルし、classes.jar を生成して、このファイルを bin フォルダーに配置します。
次に、Ant は Android ライブラリ プロジェクト 1 をコンパイルしようとしますが、Android ライブラリ プロジェクト 2 のクラスが欠落しているため、エラーが発生します。

jarファイルがlibsフォルダーに含まれていないため、これはそれほど奇妙ではありません。しかし、project.properties でライブラリ プロジェクト 2 に依存関係を作成したのに、Ant が classes.jar をライブラリ プロジェクト 1 の libs フォルダーにコピーしないのはなぜですか?

Ant タスクを使用してファイルを libs フォルダーにコピーする解決策を考えることはできますが、それでは、好みではない build.xml を変更する必要があります。

** 編集

問題は、R クラスが見つからないことです。classes.jar を見ると、この Java ファイルには R クラスが含まれていません。したがって、私の解決策はおそらく機能しません。

4

5 に答える 5

1

antをコンパイルするには、ant.propertiesに依存関係を追加します。例えば:

android.library.reference.1=../path/to/library
于 2012-05-14T10:03:18.937 に答える
1

これは非常に脆弱なセットアップのように思えます。これには十分な理由があるかもしれませんが、代わりにライブラリの依存関係を互いに切り離すことはできますか?

例えば; ブリッジ パターンを実装して両方のライブラリ間の呼び出しを変換し、呼び出し元の Android プロジェクトにそれらをアタッチさせます。このように、どちらのライブラリにも他方に依存するコードはなく、依存関係のセットアップを処理する必要がある唯一のプロジェクトはメイン プロジェクトです。

ライブラリを使用する主な理由の 1 つは、コードを再利用可能にすることです。このアプローチにより、誰か (あなた、同僚、後継者など) が 1 つのライブラリだけをプラグインして、他のライブラリの独自の実装を作成できるようになります。

Java でのブリッジ パターンの適用に関する別の優れた記事: http://java.dzone.com/articles/design-patterns-bridge

于 2012-05-14T10:15:49.237 に答える
1

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

この依存関係がなければ、Ant は正常にビルドされます。

于 2012-05-15T09:48:01.943 に答える
0

古い質問ですが、私のように、他の人はこれに頭を悩ませているかもしれません...

公式の答えは、具体的には「それはできません」です。

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

(公式ドキュメントから抽出:「ライブラリプロジェクトの参照」)。

つまり、ツールを使用してそれを行うための「クリーンな」方法がないため (そしてダーティな方法が適切です)、何でも構いません。

それが役に立てば幸い

于 2014-11-25T20:32:03.530 に答える