【问题标题】:How to load a JAR from Assets folder at runtime如何在运行时从 Assets 文件夹加载 JAR
【发布时间】:2014-07-30 20:55:14
【问题描述】:

如何在运行时从 android 应用程序的 assets 文件夹中加载 jar 文件。从资产文件夹加载是我的要求。有没有办法做到这一点。请帮忙..

【问题讨论】:

  • 您的意思是要在构建 apk 时加载编译时未链接的 jar 文件?
  • jar 文件将在编译期间在资产中可用。但我想根据要求在运行时从资产文件夹中加载它。并非所有的罐子都需要。我想实现一种机制,比如向应用程序添加 jars,比如添加不同的插件
  • 不可能,android 使用 dalvik 不是普通的 jvm...请下次使用 google 查找其他选项,我很确定这是 android 开发人员博客上的一篇文章如何使用动态二进制加载
  • 你有任何工作代码可以从任何外部或内部存储器加载 jar。
  • @Selvin 你能提一下你对我的问题投反对票的原因吗??

标签: android jar runtime


【解决方案1】:

我得到了答案。我在这里添加这个答案。因为这可能对其他人的搜索有所帮助。

有一些步骤可以做到这一点。

  1. 您必须将 JAR 文件的副本复制到应用程序的私有内部存储中。

    1. 使用 android 文件夹中的 dx 工具,您必须生成与 JAR 文件关联的 classes.dex 文件。 dx 工具会在 /android-sdks/build-tools/19.0.1 位置(这个文件是 Dalvik VM 需要的,只是 jar 不能被 dalvik VM 读取))

    2. 使用同样位于同一位置的 aapt 工具命令,您必须将 classes.dex 添加到 JAR 文件中。

    3. 可以使用 DexClassLoader 动态加载此 JAR 文件。

    4. 如果您从任何一个您自己的库中制作 JAR,则每次库源代码发生更改时,您都必须执行此步骤 (1-4)。因此,您可以通过创建 shell 脚本(在 Mac/Linux/Ubuntu 中)或批处理脚本(在 Windows 中)来自动执行这些步骤。你可以参考这个link来了解如何编写shell脚本。

注意:实现此方法的一种情况是,无法将JAR文件直接添加到核心项目的构建路径中,需要在运行时动态加载。在正常情况下,可以将 JAR 文件添加到构建路径中。

请查看此链接以获取详细的代码和实现。

How to load a jar file at runtime

Android: How to dynamically load classes from a JAR file?

【讨论】:

  • 你测试了吗?它不起作用,因为 jar 中的类不是 dalvik 格式...并且您的链接仅显示 1)如何在普通 java 中执行此操作 2)如何加载已经是框架一部分的类 ...
  • 这行得通。这就是我要找的。在将 jar 文件构建到 apk 之前,这些 jar 文件将在 Assets 中可用。
  • 谢谢,在我的应用程序内部文件目录中缓存 jar 和 dex 后,我还加载了它们。 1. 我的应用程序在启动时检查并缓存 dex 和 jar 文件。 2. 然后它使用 DexClassLoader 加载所需的类。 3. 然后它使用java反射来访问成员和方法。这对我来说是必要的,因为我使用仅提供动态链接选项的 LGPL 代码,由于 LGPL 限制,我无法直接在应用程序中实现 jar / java 类。此过程运行良好,但需要付出更多努力
猜你喜欢
  • 2012-06-16
  • 2012-07-28
  • 1970-01-01
  • 2011-09-08
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多