41

この質問はhttps://softwarerecs.stackexchange.com/questions/27841/plugins-architecture-for-an-android-appに移動しました


オープンソースアプリ用のプラグインシステムを実装したいのですが、それは非常に大きくなり、少数のユーザーだけが必要とする多くの機能を備えているためです。userAはfeature7とfeature24を必要とし、userBはfeature39とfeature24を必要とするため、さまざまなアプリをリリースすることは適切なソリューションではありません。

プラグインアーキテクチャの良い例はどこにありますか?

これが私がプラグインにできることを望んでいることです:

たとえば、プラグインの1つが特定の画面にボタンを追加する必要があり、このボタンをクリックすると、アプリのデータベースの値が増加します。私の知る限り、これはコンテンツプロバイダーとインテントでは実行できません。

コアアプリのコードがいたるところにたくさんのフックがある複雑なものになるのは避けたいです。

プラグインの形式は、SDカード上のファイル、アプリ、またはその他のものである可能性があります。

4

3 に答える 3

9

いくつかの主要なIoC機能を備えたRobo-guiceのように機能するフレームワークを作成しました。(ビュー/サービスなどをロードするボイラープレートコードを削減します...)

しかし、その核心は、あなたの問題の解決策であると私は信じています。それは、ファイルだけでなく「res」を含む個別のAPK「プラグイン」ファイルをロードする機能<layouts>.xmlです。ファイルは、その<layouts>.xmlAPK内のクラスによって個別に拡張できます。つまり、CustomView(独自のアプリを膨らませる<layout>.xml)を元の/親アプリにロードできます。これはすべて、プラグインAPKでUIがどのように拡張されたかを親アプリAPKが認識せずに実行されます。

意味の例:マッピングアプリがあります。フレームワークは、「アドオン機能」プラグインの「コントラクト」に一致するインストール済みAPKを動的にスキャンし、それに固有のUIをフローティングパネルとしてアプリのビューにロードします。

Androidには、これを実現するために必要な組み込みAPIがすべてではないにしてもほとんどあるため、Androidのプラグインフレームワークは実行可能だと思います。

これらは、Android用のプラグイン開発のこの分野でのあなたの友達です:

  1. PackageManager(スキャンインストールパッケージ、別名プラグイン)
  2. DexClassLoaderClassNotFoundException正しいところで使用しないと苦痛になりますClassLoader
  3. Javaリフレクション
于 2012-08-12T09:48:17.460 に答える
7

プラグイン アーキテクチャの良い例はどこにありますか?

Google の Roman Nurik は、オープン ソース アプリのダッシュ クロックに優れたプラグイン フレームワークを実装しました。プラグイン自体は、 APIでDashClockExtensionクラスを拡張するサービスであり、独自のリソースを持つ完全に独立した APK ファイルとしてインストールされます。AIDL を介して通信プロトコルを定義するのは非常に手間のかかる作業ですが、素晴らしくクリーンで、非常にうまく機能します。

プラグインの 1 つは、特定の画面にボタンを追加する必要があり、このボタンをクリックすると、アプリのデータベースの値が増加します。

プラグインによって変更できるメイン レイアウトの部分は、コア アプリによって事前に定義され、通信プロトコルを介して公開される必要があります。プラグインが任意のレイアウトを膨らませて、それをメイン アプリに送信できるようにする必要があります。メイン アプリはそれを独自のレイアウトの事前に割り当てられた領域内に配置できます。

于 2015-06-27T02:12:07.137 に答える