gpt4 book ai didi

android - 嵌入式 Felix,在 android-app 中运行无法解析 org.osgi.framework

转载 作者:行者123 更新时间:2023-11-29 00:46:36 25 4
gpt4 key购买 nike

我无法弄清楚为什么会发生以下情况:

我正在从一个小型 android 应用程序运行一个嵌入式 apache felix。我在启动框架后以编程方式安装了 2 个包,但都没有进入“已解决”状态。因此 Bundle“MyBundle1”导入“MyBundle2”。

这是 Logcat 告诉我的:

05-17 20:21:56.514: ERROR/MainActivity(384): org.osgi.framework.BundleException:    
Unresolved constraint in bundle de.xy.MyBundle1 [1]: Unable to resolve 1.11: missing
requirement [1.11] package; (package=de.xy.MyBundle2) [caused by: Unable to resolve 2.0:
missing requirement [2.0] package; (&(package=org.osgi.framework)(version>=1.5.0))]

我完全理解错误消息所说的内容(呃...org.osgi.framework 在 1.5+ 版本中无法解决)但我无法弄清楚为什么会发生这种情况。为什么框架不能解决“他自己”?!我尝试使用 adb shell 独立运行相同的 felix.jar ,并且两个包都可以工作。当然,felix.jar 是最新的 (3.2)

感谢您的建议!

丹尼尔

FelixSetup

    m_configMap = new StringMap(false);
try {
m_cache = File.createTempFile("felix-cache", null);
} catch (IOException ex) {
throw new IllegalStateException(ex);
}
m_cache.delete();
boolean mkdirs = m_cache.mkdirs(); // works (=true)
m_activator = new HostActivator(); // implements BundleActivator
List list = new ArrayList();
list.add(m_activator);
m_configMap.put(FelixConstants.LOG_LEVEL_PROP, "1");
m_configMap.put(BundleCache.CACHE_ROOTDIR_PROP, ".");
m_configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
m_configMap.put(FelixConstants.FRAMEWORK_STORAGE, m_cache.getAbsolutePath());
m_felix = new Felix(m_configMap);
try {
m_felix.start();
} catch (BundleException ex) {
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
}

不知道是不是和之前的问题有关:

05-18 08:52:59.149: VERBOSE/out(363): Problem creating boot delegation class loader:      java.lang.reflect.InvocationTargetException
05-18 08:52:59.209: VERBOSE/out(363): ERROR: Error parsing system bundle export statement: (java.lang.IllegalArgumentException:A header cannot be an empty string.)

05-18 08:52:59.209: VERBOSE/out(363): java.lang.IllegalArgumentException: A header cannot be an empty string.

我安装并启动包

myBundle1= bundleContext.installBundle("file:/data/felix/MyBundle1.jar"); 
myBundle2= bundleContext.installBundle("file:/data/felix/MyBundle2.jar");

myBundle1.start();

他们之前被 dx'ed 并移动到/data/felix 与 adb push

我在 android 应用程序中使用的相同代码也适用于常规 java 控制台应用程序。

最佳答案

我觉得您构建框架的方式还不错。你可以考虑

  • 用特定于 Android 的列表替换 FRAMEWORK_SYSTEMPACKAGES,如果您的 bundle 将例如使用 Activity ),或
  • 不使用临时文件,而是指向某个您知道存在的目录。

我们过去成功使用过 3.0.1,我确实认为您发布的错误消息与它有关。您可以尝试该版本的 Felix,如果可行,您可能已经在 Felix 中发现了回归,然后您可以将其报告给 users@felix.apache.org。

关于android - 嵌入式 Felix,在 android-app 中运行无法解析 org.osgi.framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6036920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com