如何在运行时从Assets文件夹加载JAR

6
如何在 Android 应用程序的运行时从 assets 文件夹加载 jar 文件。我的要求是从 assets 文件夹加载。是否有任何方法可以做到这一点。请帮忙...

你的意思是当你构建apk时没有链接编译时未链接的jar文件,你现在想要加载它? - Daniel Hernández Alcojor
在编译期间,JAR文件将可在assets中使用。但是我想根据需要在运行时从assets文件夹加载它们,而不是所有的JAR文件都需要一直存在。我想实现一种机制,类似于添加不同插件来向应用程序添加JAR文件。 - Arundas K V
不可能,Android使用的是Dalvik而不是普通的JVM... 下次请使用谷歌查找其他选项,我很确定在Android开发者博客上有一篇关于如何使用动态二进制加载的文章。 - Selvin
你有任何可用的代码可以从内部或外部存储器中加载jar吗? - Arundas K V
似乎你在阅读理解方面有问题...我写了:“不可能”,而你写道:“你有任何可用的代码吗”... - Selvin
显示剩余2条评论
1个回答

7
我得到了答案。我在这里添加答案,因为这可能对其他正在搜索的人有所帮助。
有几个步骤可以完成这个任务。
  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文件可以添加到构建路径中。

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

如何在运行时加载jar文件

Android:如何从JAR文件动态加载类?


你测试过了吗?它不会工作,因为JAR中的类不是Dalvik格式...而且你的链接只显示了1)如何在普通Java中执行此操作2)如何加载已经成为框架一部分的类... - Selvin
1
这是有效的。这就是我要找的。在构建成APK之前,jar文件将在Assets内可用。 - Arundas K V
谢谢,我也将jar和dex缓存在我的应用程序内部文件目录中后加载它们。1.我的应用程序在启动时检查并缓存dex和jar文件。2.然后它使用DexClassLoader来加载所需的类。3.然后它使用Java反射来访问成员和方法。这对我来说是必要的,因为我使用LGPL代码,它只提供动态链接选项,由于LGPL限制,我无法直接在应用程序中实现jar / java类。这个过程完美地运作,但需要更多的努力。 - Diljeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接