OSGi(Felix):更改系统包的标准包,使其在Android上运行
我开发了一个小型EMF项目作为OSGi包。现在我想在android和ApacheFelix上使用它。EMF使用一些标准java库。比如java.xml.xxx。通常,OSGi系统包会导出这些。但在我的安卓系统中,它看起来是这样的:OSGi(Felix):更改系统包的标准包,使其在Android上运行,android,osgi,bundle,packages,apache-felix,Android,Osgi,Bundle,Packages,Apache Felix,我开发了一个小型EMF项目作为OSGi包。现在我想在android和ApacheFelix上使用它。EMF使用一些标准java库。比如java.xml.xxx。通常,OSGi系统包会导出这些。但在我的安卓系统中,它看起来是这样的: Properties configArg = new Properties(); File chacheDir = this.getFilesDir(); configArg.setProperty(Constants.
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();
...
系统包(0)
Bundle Description=此Bundle是特定于系统的;它实现了各种系统服务
捆绑包版本=2
Bundle Name=系统包
Bundle SymbolicName=org.apache.felix.framework
捆绑包版本=4.1.0.0
导出包=org.osgi.framework;version=“1.6.0”,
org.osgi.framework.launch;version=“1.0.0”,org.osgi.framework.willing;
version=“1.0.0”,org.osgi.framework.startlevel;version=“1.0.0”,
org.osgi.framework.hooks.bundle;version=“1.0.0”,
org.osgi.framework.hooks.resolver;version=“1.0.0”,
org.osgi.framework.hooks.service;version=“1.1.0”,
org.osgi.framework.hooks.weaving;version=“1.0.0”,
org.osgi.service.packageadmin;version=“1.2.0”,
org.osgi.service.startlevel;version=“1.1.0”,org.osgi.service.url;
version=“1.0.0”,org.osgi.util.tracker;version=“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平台中提供的特定包替换
FRAMEWORK\u SYSTEMPACKAGES
。这些是,
- 您在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();
字符串系统\u包=
“org.osgi.framework;版本=\“1.6\”,“+
// ...
“安卓,”+
// ...
“javax.crypto,”+
// ...
“org.apache.commons.logging”;
Map config=newhashmap();
config.put(Constants.FRAMEWORK\u SYSTEMPACKAGES,SYSTEM\u PACKAGES);
框架=新的Felix(配置);
framework.start();