複数のプロジェクトにわたってAndroid Intentフィルター文字列を最適に管理するにはどうすればよいですか?


8

私のプロジェクト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クラスを独自のプロジェクトに保持したいと考えています。


サービスを別のプロジェクトに保持したいのはなぜですか?これは、アプリがServiceインストールされていない可能性を紹介するだけです。また、これらの定数を含むライブラリをいつでも作成して、各プロジェクトでそのライブラリを使用できます。
Xaver Kapeller 2015年

現在ライブラリがありますが、Android Studioでライブラリをインポートするのは面倒です。通常、Android Studioは何かを壊すので、ファイルを1つずつ貼り付けてコピーします。(別の質問/問題はありますが)さらに、これらのアプリは社内にあり、要件を制御できます。これはGoogle Playストアなどには当てはまりません。さらに、同じコードを実行する3つのアプリすべてを必要としないため、いくつかの点で設計のために1つのプロセスのキューにある要求。(説明がたくさんあります)
Rick Page

それらをインポートするのはどのように面倒ですか?クラスを自分でコピーしてから、完全に機能するモジュールをコピーすることで、さらに多くのことを破ります。そして、なぜ、SonarQubeやArtifactoryのようなMavenサーバーを使用して社内ライブラリをホストしないのですか?ライブラリをインポートすることは、他のMavenプロジェクトをインポートすることと同じです。build.gradleに1行追加します。
Xaver Kapeller 2015年

「もっともっと壊そう」はい、完全に。しかし、モジュールを使用するための唯一の方法は、それらをインポートすることでした。その場合、Android Studioがすべてのファイルをコピーします。「... mavenサーバー」提案ありがとうございます。これについて調べます。
リック・ページ

回答:


1

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

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

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

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

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

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

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

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

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


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

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


プロバイダーに関する興味深いアイデア。しかし、一歩後退、私は同意します。現在のエディターが共有Androidライブラリを「実行するのに非常に優れたインターフェースを提供していない」ことを認識し、長所と短所をありがとうございます。
リック・ページ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.