Android嵌入式Felix缺少要求osgi.ee

时间:2015-01-16 14:04:42

标签: java android eclipse osgi apache-felix

我试图说服Android上的嵌入式Apache Felix启动外部捆绑包 到目前为止,我已经设法将felix.jar嵌入到自己的APK中并将其作为活动运行。在此活动中,我可以从jar文件安装外部包。不幸的是,每当我尝试继续并启动其中一个捆绑包时,我都会收到以下错误:

启动捆绑包时遇到异常:

Unresolved constraint in bundle com.example.hellofelix [1]:        
Unable to resolve 1.0:             
missing requirement [1.0] osgi.ee;                           
(&(osgi.ee=JavaSE)(version=1.7.0))     

由于com.example.hellofelix是我的测试应用程序的包名称,这表明我的应用程序缺少JavaSE 1.7.0.

约束所需的osgi.ee包

我究竟如何解决这个问题? 我是否必须在我的应用中指定额外导出,导入内容或只添加另一个捆绑包?

我的包的代码:

激活:

package com.example.dictionary;

import java.util.Hashtable;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

import com.example.dictionary.service.DictionaryBundle;

public class Activator implements BundleActivator {

  public void start(BundleContext context) throws Exception {
    Hashtable<String, String> props = new Hashtable<String, String>();
    props.put("Language", "de-en");
    context.registerService(DictionaryBundle.class.getName(), new DictionaryBundleImpl(), props);
  }

  public void stop(BundleContext context) throws Exception {
    // NOTE: The service is automatically unregistered.
  }

} 

接口:

package com.example.dictionary.service;

public interface DictionaryBundle {

    public String translate(String wordToTranslate);

}

实现:

package com.example.dictionary;

import java.util.Hashtable;

import com.example.dictionary.service.DictionaryBundle;

public class DictionaryBundleImpl implements DictionaryBundle {

    private Hashtable<String, String> dictionary;

    public DictionaryBundleImpl() {
        dictionary = new Hashtable<>();

        dictionary.put("ente", "duck");
        dictionary.put("hund", "dog");
        dictionary.put("kuh", "cow");
        dictionary.put("katze", "cat");
        dictionary.put("maus", "mouse");
    }

    public String translate(String wordToTranslate) {
        return dictionary.get(wordToTranslate);
    }

}

MANIFEST.MF:

Manifest-Version: 1.0
Bundle-SymbolicName: com.example.hellofelix
Export-Package: com.example.dictionary.service
Bundle-Name: TestBundle
Bundle-Version: 1.4.2.qualifier
Bundle-ManifestVersion: 2
Bundle-Activator: com.example.dictionary.Activator
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Bundle-Vendor: None

非常感谢!

1 个答案:

答案 0 :(得分:0)

bundle的清单说它需要JavaSE 1.7。并且您的运行时不提供该JRE。所以它无法解决它应该的问题。

您可以更改捆绑包以定位不同的osgi.ee(Android中的那个),或者您可以告诉Felix撒谎并声称osgi.ee是JavaSE 1.7。

即,更改捆绑包中的需求或框架提供的功能。