【问题标题】:OSGi (Felix): Change standard packages of system bundle to make it run on AndroidOSGi (Felix):更改系统包的标准包以使其在 Android 上运行
【发布时间】:2012-06-12 10:39:26
【问题描述】:

我开发了一个小型 EMF 项目作为 OSGi Bundle。现在我想在带有 Apache Felix 的 android 上使用它。 EMF 使用一些标准的 java 库。像 java.xml.xxx。通常 OSGi 系统包会导出这些。但在我的 android 案例中,它看起来像这样:

系统包 (0)

Bundle-Description = 此捆绑包是系统特定的;它实现了各种系统服务。

Bundle-ManifestVersion = 2

Bundle-Name = 系统包

Bundle-SymbolicName = org.apache.felix.framework

捆绑版本 = 4.1.0.SNAPSHOT

Export-Package = 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;版本="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 包。

【问题讨论】:

    标签: android osgi bundle packages apache-felix


    【解决方案1】:

    我找到的最佳解决方案是将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();
    

    【讨论】:

      猜你喜欢
      • 2016-12-10
      • 2017-01-19
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      • 2018-09-11
      • 2010-12-09
      • 1970-01-01
      • 2021-06-17
      相关资源
      最近更新 更多