1

OSGi バンドルとして小さな EMF プロジェクトを開発しました。今、Apache Felix を使用して Android で使用したいと思います。EMF は、いくつかの標準 Java ライブラリを使用します。java.xml.xxx と同様です。通常、OSGi システム バンドルはこれらをエクスポートします。しかし、私のアンドロイドの場合、次のようになります。

システムバンドル (0)

Bundle-Description = このバンドルはシステム固有です。さまざまなシステム サービスを実装します。

バンドル マニフェスト バージョン = 2

Bundle-Name = システム バンドル

Bundle-SymbolicName = org.apache.felix.framework

バンドル バージョン = 4.1.0.SNAPSHOT

エクスポート パッケージ = org.osgi.framework; バージョン="1.6.0"、org.osgi.framework.launch; バージョン="1.0.0"、org.osgi.framework.wiring; バージョン="1.0.0"、org.osgi.framework.startlevel; バージョン="1.0.0"、org.osgi.framework.hooks.bundle; バージョン="1.0.0"、org.osgi.framework.hooks.resolver; バージョン="1.0.0"、org.osgi.framework.hooks.service; version="1.1.0", org.osgi.framework.hooks.weaving; バージョン="1.0.0", org.osgi.service.packageadmin; バージョン="1.2.0"、org.osgi.service.startlevel; バージョン="1.1.0"、org.osgi.service.url; バージョン="1.0.0"、org.osgi.util.tracker; バージョン="1.5.0"

エクスポート サービス = org.osgi.service.packageadmin.PackageAdmin,org.osgi.service.startlevel.StartLevel,org.osgi.service.url.URLHandlers

提供機能 =

これは、通常のシステム バンドルのシステム バンドル エクスポートとは対照的ではありません ;-) それが役割を果たすかどうかはわかりません: 私は次のように Felix を起動しています:

        Properties configArg = new Properties();
        File chacheDir = this.getFilesDir();
        configArg.setProperty(Constants.FRAMEWORK_STORAGE, chacheDir.getAbsolutePath());
        configArg.setProperty("osgi.shell.telnet.ip", ipadd);
        configArg.setProperty("osgi.shell.telnet.port", "6666");
        Felix felix = new Felix(configArg);

        try{
            felix.start();
            ...

問題は、システム バンドルに含まれていない標準 Java パッケージをどのように取得するかです。

4

1 に答える 1

3

FRAMEWORK_SYSTEMPACKAGES私が見つけた最善の解決策は、Android プラットフォームで利用可能な特定のパッケージに置き換えることです。これらは、

  • android.jarターゲットにしているデバイスの で見つかったすべてのパッケージ
  • とを除いjava.*junit.*
  • ただし、システムがバンドルするすべてのorg.osgi.*パッケージは正常にエクスポートされます。

だから、次のようなもの

String SYSTEM_PACKAGES = 
    "org.osgi.framework;version=\"1.6\"," + 
    // ...
    "android," + 
    // ...
    "javax.crypto," + 
    // ...
    "org.apache.commons.logging";

Map<String, Object> config = new HashMap<String, Object>();
config.put(Constants.FRAMEWORK_SYSTEMPACKAGES, SYSTEM_PACKAGES);
Framework framework = new Felix(config);
framework.start();
于 2012-06-08T12:26:38.457 に答える