【问题标题】:Android: Loading external Jar files via ClassLoaderAndroid:通过 ClassLoader 加载外部 Jar 文件
【发布时间】:2012-11-11 21:18:23
【问题描述】:

我有一个需要能够加载外部 Jar 文件的 Android 应用程序。我知道罐子的位置。

我一直在玩 Android API 提供的 PathClassLoader 类,但无济于事。我在 Activity 中使用以下代码:

String jarPath = "/sdcard/jars/testjar.jar";

PathClassLoader myClassLoader = new PathClassLoader(jarPath, ClassLoader.getSystemClassLoader());

        try
    {
        Class<?> clazz = Class.forName("com.test.Class1", true, myClassLoader);
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }

在实例化 PathClassLoader 实例时,Dalvik 向 LogCat 打印一条消息,告诉我它找不到“classes.dex”文件。之后,“Class.forName”会抛出“ClassNotFoundException”。

我正在尝试找到一种无需“classes.dex”文件即可从外部 Jar 文件加载类的方法。 Jar 文件不包含这个文件,但是当其他应用程序在类路径中使用 Jar 构建时,Dalvik 可以非常愉快地加载类。

简单地说:如何在不需要“classes.dex”的情况下从外部 Jar 文件中加载类?

非常感谢, P

更新 Dalvik 记录的消息是

压缩包不错,但是里面没有classes.dex,同目录下也没有有效的.odex文件

【问题讨论】:

    标签: android jar classloader


    【解决方案1】:

    有一个工具叫做“dx”,这个工具可以将Java Binary Code 转换成Android Dalvik Binary 代码。在 Android 中,无法识别 Java 二进制代码。

    【讨论】:

      【解决方案2】:

      我发现了解决方案。可能是我发这个问题太仓促了。

      当然需要 .dex 文件,因为这正是 Dalvik 执行的内容。

      为了解决我的问题,我对外部 Jar 文件进行了 dex 处理,因此它们现在包含自己的“classes.dex”。幸运的是,这是我们持续集成环境的一部分,所以一旦我们检查并构建了 Android 库,通过 dx.exe 的额外中间步骤会生成“classes.dex”并最终允许我在运行时从 Jar 加载类-时间。

      【讨论】:

      • 嗨@protectedmember,我也有类似的情况。你能告诉我这样做的步骤吗?我实际上已经使用 dex2jar 将 apk 转换为 jar 文件。现在,当我使用 dexclassloader 加载此类时,会出现 Zip is good, but no classes.dex inside, and no valid .odex file in the same directory 之类的错误。
      猜你喜欢
      • 2012-12-06
      • 1970-01-01
      • 2013-04-15
      • 2011-04-10
      • 2014-12-30
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      相关资源
      最近更新 更多