web-dev-qa-db-ja.com

複数のプロジェクトでAndroid Intent filter Stringsを最適に管理するにはどうすればよいですか?

私のプロジェクトIntentExamplesには、サービスに対応するこのフィルターがあります。

_<intent-filter>
                <action Android:name="biz.rpcodes.apps.intentexamples.START_SERVICE" />
</intent-filter>
_

別のプロジェクトUseExampleServiceには、次のようなものがあります。

_Intent i = new Intent("biz.rpcodes.apps.intentexamples.START_SERVICE");
                startService(i);
_

...この答えによって導かれる: https://stackoverflow.com/a/16439551/5181778

私の質問は次のとおりです。複数のプロジェクトにわたってこれらのインテントフィルター文字列を最適に管理するにはどうすればよいですか?私が今持っている最善の解決策は、Serviceプロジェクトから他のプロジェクトにコピーアンドペーストするクラスを作成することです。

_class ExampleServiceIntents {
public static final String ExampleServiceIntents.START_SERVICE = 
    "biz.rpcodes.apps.intentexamples.START_SERVICE";
...
_

Serviceクラス自体をインポートすることはできますが、new Intent(this, ExampleService.class)ですが、Serviceクラスを独自のプロジェクトに保持したいと考えています。

8
Rick Page

Android共有ライブラリまたはオペレーティングシステム依存のシンボリックリンク。

オプション1:共有Androidライブラリ

正式なAndroid各プロジェクトにインポートされたライブラリ。

長所:タイプセーフ。クロスプラットフォームで、ソース管理と連携します。完全な構文チェックとエディターのサポート。

短所:現在のエディター(Android StudioまたはEclipseとADT)を介してプロジェクトをライブラリーとしてインポートするのは、これを行うための非常に優れたインターフェースを提供していないため、まだ少し面倒です。このタスクを頻繁に行う必要があるが、それほど頻繁ではない場合は、毎回すべてのステップを覚えている場合、これは努力に値しないかもしれません。しかし、それが最初から1度か2度のことであれば、再度実行する必要はありません。それほど悪くはありません。

オプション2シンボリックリンク

各プロジェクトの共通ソースファイルをシンボリックリンクします。その後、両方のプロジェクトでファイルとその変更が表示されるため、同期を保つことができます。

長所:実装がはるかに簡単です。

短所:シンボリックリンクは、ソース管理ツールではうまく機能しません。シンボリックリンクはオペレーティングシステムごとに大きく異なるため、クロスプラットフォームではありません(開発用)。プロジェクトに参加する新しい開発者にとって、一方の変更が他方に自動的に共有されることは明確ではありません。


したがって、シンボリックリンクオプションの方が長所より短所があるため、ほとんどのプロジェクトには共有ライブラリソリューションをお勧めします。ただし、特定のプロジェクトがシンボリックリンクのcons列の機能を必要としない場合は、おそらくそれが簡単です。場合によります。

PS:3番目の完全なAndroidアプリケーションがAndroidデータプロバイダーに文字列値を提供する)を提供するという恐ろしい3番目のオプションがあります。しかし、その時点で共有する必要のある特別な文字列を使用してそのアプリと通信する必要があるため、抽象化のステップを追加するだけで問題は解決していません。

1
Mufasa