【问题标题】:Android shared library which is not JNI based不基于 JNI 的 Android 共享库
【发布时间】:2010-04-22 17:51:04
【问题描述】:

我正在为不使用本机代码 (JNI) 的 Android 应用程序开发一个库。我曾尝试在我的 Android 项目中将库作为外部 jar 提供,但此方法不包括 apk 中的库内容,因此在模拟器或设备中运行时会引发类未找到错误。我还尝试将库创建为本身的 Android 项目,这确实有效,但仅适用于公共静态属性(而不是方法)。由于库和应用程序都位于单独的 apk 中,我可以看到 VM 注意到对库的引用并可以读取一些属性,但是当尝试在库中实例化类时,即使我可以读取,我也会找不到类它的公共静态属性(非常令人沮丧!!)。

我意识到 Davlik 字节码与 Java 字节码不同,但我什至无法找到有关如何解决 Android 中看似非常简单的问题的好信息。我现在正在研究旧的 PlatformLibrary 的东西,但我不相信这会起作用,因为该示例已从 Android 站点中删除:(

如果可以的话,请帮助我,如果我在此之前找到答案,我会分享它。

安卓万岁!

【问题讨论】:

标签: java android


【解决方案1】:

我尝试将库作为 我的 Android 项目中的外部 jar 但这种方法不包括 apk 中的库内容,因此 运行时抛出类未找到错误 在模拟器或设备中。

将 JAR 放入您的libs/ 目录,它会自动包含在 APK 中。

我的一本书中的sample project 显示了以这种方式使用 BeanShell JAR。此外,my GitHub page 上所有以“cwac-”开头的 GitHub 存储库都是旨在构建 JAR 以通过 libs/ 目录包含在 Android 项目中的项目。

【讨论】:

  • 我最近才发现这是针对每个项目执行此操作的一种方法,但它不允许与 Text-to-Speech 库使用的共享类型相同。
  • 然后通过单独的 APK 尝试远程服务。或通过单独的 APK 提供内容提供商。或通过单独的 APK 广播 Intents。或者修改固件并使用您自己的库构建您自己的设备。 PlatformLibrary 用于通过 C/C++ 和 JNI 修改操作系统,这正是您的问题主题所说的您不想要的。
  • 是的,PlatformLibrary 在这种情况下对我们不起作用,我认为 Intent 可能是我们必须走的路。
猜你喜欢
  • 2014-03-22
  • 2017-03-22
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 2014-01-22
  • 1970-01-01
相关资源
最近更新 更多