13

私はJavaとAndroidの開発に非常に慣れていないため、muninのように統計と情報を収集するアプリケーションから始めようとしています。アプリケーションに「プラグイン」をロードできるようにしようとしています。これらのプラグインは既にアプリケーションに含まれていますが、すべてを個別に呼び出す必要はなく、反復処理できるようにしたいと考えています。serviceloader を使用しようとしましたが、META-INF/services を APK に入れることができませんでした。Androidでserviceloaderを使用できるかどうか疑問に思っていますありがとう
編集:java.util.ServiceLoaderについて質問していますが、そうすべきだと思いますが、サービスフォルダーをMETA-INFに取得する方法がわかりませんAPK

4

5 に答える 5

5

この問題に対する未解決のバグ レポートがあります。https://code.google.com/p/android/issues/detail?id=59658を参照してください

于 2013-11-11T22:19:28.073 に答える
4

META-INFフォルダーは、ApkBuilder によって APK から意図的に除外されています。ApkBuilder.java の唯一のコメントは「他のフォルダー (/META-INF など) を除外する必要がある」ですが、他に説明はありません。

ant で META-INF を追加した後でも、META-INF/services/* ファイルの内容を置き換えたり、名前を変更したりすることを拒否する Proguard を使用したい場合は、まだ問題が発生します (それは別の話です。作成者は保持したいと考えています)。プロガードにとらわれない)。

ただし、maven を使用している場合は、両方の問題を解決しようとするhttps://github.com/pa314159/maven-android-plugin (「変更された」という名前のブランチ) を確認することをお勧めします。これは、自分の Android プロジェクト用に 1 か月前に変更した元の「android-maven-plugin」からのフォークです。

また、Proguard-4.7 のパッチも提供します。

これがお役に立てば幸いです。フィードバックは大歓迎です。

于 2012-02-02T15:09:30.667 に答える
3

いくつかの状況でうまくいくかもしれない解決策を見つけました。の代わりに、 NetBeans に付属ServiceLoaderのクラス/ライブラリを使用しています。これは のスーパーセットです。NetBeans 自体は必要なく、Eclipse でも問題なく動作するようです。アプリケーションで使用している機能を Lookup の同等のものに置き換え、org-openide-util-lookup ライブラリを追加する必要があります。次に、次のようなことができます。org.openide.util.LookupServiceLoaderServiceLoader

Lookup lookup = new ProxyLookup(Lookup.getDefault(),
                Lookups.metaInfServices(myClass.getClassLoader(), "services/"));

ServiceLoaderファイルを META-INF/services/ から services/ に移動します。

ProxyLookupのため、これは変更されていない標準の Java 環境で引き続き機能することに注意してください(つまり、そのような場合は引き続き META-INF/services を参照します)。

ライブラリのドキュメントへのリンクは次のとおりです: http://bits.netbeans.org/dev/javadoc/org-openide-util-lookup/org/openide/util/lookup/Lookups.html

アップデート

これで数日間作業した後、うまく機能しているようです.環境(標準のJavaとAndroid)間を移動し、それぞれの場所で適切に動作します. 主な欠点は、ファイルを /services ディレクトリに手動でコピーする必要があることです。

于 2013-12-17T03:32:33.650 に答える
2

可能です。http://developer.android.com/reference/java/util/ServiceLoader.htmlを確認することをお勧めします

于 2011-04-23T01:27:28.090 に答える
-5

ServiceLoader は Java 言語のもので、Android にはあまり関係ありません。使用しないことをお勧めします。ロードする .apk 内のクラスのリストを見つけたいだけの場合、これを行うにはさまざまな方法があります。それらをリストする res/xml の XML ファイルに配置する、リフレクション、注釈を使用するなどです。

于 2011-04-23T02:20:07.017 に答える