我试图说服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.
我究竟如何解决这个问题? 我是否必须在我的应用中指定额外导出,导入内容或只添加另一个捆绑包?
我的包的代码:
激活:
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
非常感谢!
答案 0 :(得分:0)
bundle的清单说它需要JavaSE 1.7。并且您的运行时不提供该JRE。所以它无法解决它应该的问题。
您可以更改捆绑包以定位不同的osgi.ee(Android中的那个),或者您可以告诉Felix撒谎并声称osgi.ee是JavaSE 1.7。
即,更改捆绑包中的需求或框架提供的功能。