5

Androidプロジェクト間でコードとリソースを共有するための標準的なアドバイスは、ライブラリを使用することです。個人的には、(a)共有コードが大幅に変更された場合、または(b)コンピューターの速度が十分でない場合、これはうまく機能しないことがわかります。

また、複数のAPKをデプロイしたくありません。これは、依存プロジェクト(つまり、Javaビルドパス、[プロジェクト]タブ)を使用する場合に必要と思われます。

一方、Eclipseのリンクされたソース機能(Javaビルドパス、[ソース]タブ、[リンクソース]ボタン)を使用してソースコードのフォルダーを共有することはうまく機能しますが、次の2つの問題があります。

1)同じ手法を使用してリソースを共有することはできません。リソースの親フォルダーへのリンクを作成できますが、問題が発生し、共有リソースがコンパイルされません(ADT 21を使用しています)。

2)それで、共有リソースを各プロジェクトにコピーすることに決めましたが、どちらかのためにこれは機能しません。共有コードは、それを使用するプロジェクトのパッケージ名を知らないため、リソースのコピーをインポートできません。私が使用している解決策は、リソースに動的にアクセスすることですが、リソースの数が増えるにつれて、それは面倒になりました。

したがって、(1)または(2)のいずれかの解決策が必要です。そうでない場合は、ライブラリプロジェクトに戻る必要があります。(または、私が考えていなかった別のオプションがあるかもしれませんか?)

4

1 に答える 1

4

あなたの本当の問題は(2)です。(1)を修正すると、一部のコピーが削除されますが、それでも(2)で問題が発生します。

残念ながら、それは実際には不可能です。ライブラリプロジェクトで複数のパッケージを可能にするためのかなりの凝ったフットワークがあり、ライブラリプロジェクトなしで同じ結果を得る良い方法はありません。プロジェクト内のすべてのものは、コピーされたリソースを含め、res/そのプロジェクトのRクラスを介してアクセスされます。

私が使用している解決策は、リソースに動的にアクセスすることです

を使用してそれをあなたに翻訳しましたgetIdentifier()。それは確かに機能します。もう1つのアプローチは、ホスティングアプリにライブラリコードへのパラメーターとしてリソースIDを提供させることです。これは、AndroidSDK自体が使用するパターンです。これは、実行時にリフレクションベースよりも高速でgetIdentifier()あり、ホスティングアプリにいくらか柔軟性を与えますが、さまざまなプロジェクト固有の値を提供するために、必要に応じてメソッドとコンストラクターに一連のパラメーターを追加することになりRます。

于 2012-11-23T23:01:20.457 に答える