だから私は、開発者が 'CustomDevice' クラスを追加でき、メインプログラムが既存のコードを編集せずにそれらを自動的に実行する拡張可能な Android アプリケーションを構築したいと考えています。
Service Provider インターフェイスについて読んだことがありますが、それは良い方法だと思いました。
そこで私はそれをテストし、カスタム デバイス クラスが実装することが期待される「ICustomDevice」というインターフェイスを作成しました。
ICustomDevice を実装する「DummyDevice」というクラスを作成しました。
DummyDevice と ICustomDevice はどちらも同じパッケージ "CustomDevicePackage" にあります。
したがって、私のメインプログラムでは、次を実行します。
ServiceLoader<ICustomDevice> loader = ServiceLoader.load(ICustomDevice.class);
Iterator<ICustomDevice> devices = loader.iterator();
System.out.println("Does it have devices? " + devices.hasNext());
常に false を返します。これは、「DummyDevice」が見つからないことを意味します。
私のEclipseプロジェクトでは、「src」にMETA-INFというフォルダーを作成し、その下に「services」というサブフォルダーを作成しました。
「Services」には「CustomDevicePackage.ICustomDevice」という名前のファイルがあり、コンテンツ行は「CustomDevicePackage.DummyDevice」です。
私はそれを正しくやっていますか?SPI について私が目にするすべての例は、JARS のロードに関するものです。JAR をロードしていません。同じプロジェクトでクラスを実行しようとしています。この方法は JAR をロードする場合にのみ機能しますか? プログラムで、ローカル サブクラスと外部 JAR のロードを同様にサポートしたいと考えています。