问题标签 [dexclassloader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1010 浏览

java - Android 类加载器错误

我想在我的 jar 文件中实例化 ScreenX 类并尝试此站点上的所有 solition,但它无法运行。

我有两个文件;

我尝试了闲置代码。

这是我的 plugin.jar 的 ScreenX 类的代码。

package com.example.plugins;

有工作样本吗?请帮忙...

0 投票
1 回答
587 浏览

android - 从 dex 文件运行方法时无法读取资源

我有一个包含代码和资源 ( ResourceBundle) 的 jar 文件。
我用那个 jar 在 android studio 中创建了一个简单的项目,编译它,提取.apk并复制classes.dex到第二个项目。还将提取的 .apk 中的资源复制到第二个项目。

从第二个项目中,我从 .dex 文件中加载了一个类。当从该类(从 dex 文件)运行一个读取资源的方法时,它不会找到它,它会抛出一个异常:

失败的行:

如果我只是运行:

从第二个项目(不是从 dex 中)它可以正常工作 - 将获得资源。

有什么想法吗?

谢谢

0 投票
0 回答
105 浏览

java - 在android中共享进程时出现ClassCastException

我创建了 2 个共享相同进程和用户 ID 的 android 应用程序(应用程序 A 和应用程序 B)。我在两个应用程序中都定义了一个通用活动。GenericActivity 的名称空间和类名在两个应用程序中相同,但内容不同。

所以应用程序A有

并且应用程序 B 有

首先我启动应用程序 A,然后从应用程序 A 启动应用程序 B。我知道,由于两个应用程序的类加载器不同,当启动两个应用程序时,每个类加载器都会有 2 个 GenericActivity 类的副本依次与每个应用程序相关联。到目前为止,一切都很好。

现在我将应用程序都设置为后台,并强行杀死应用程序 A。现在我重新启动应用程序 A。在我的应用程序 AI 中有一个片段,其代码如下

现在问题来了。我在这里得到一个类转换异常。调试后我发现它正在尝试将其转换为应用程序 B 的 GenericActivity,并且由于它是由不同的类加载器加载的不同类,因此它给出了类转换异常。我的理解是,当我强行杀死应用程序 A 并重新启动它时,它应该再次通过其类加载器加载其 GenericActivity 副本。为什么要尝试使用应用程序 B 的 GenericActivity?

0 投票
0 回答
473 浏览

java - 广播接收器的Android DexClassLoader?

我试图动态加载 BroadcastReceiver 类并在这个问题上停留了超过 2 周。它让我发疯,项目快到了。

任何帮助将不胜感激。

我使用这段代码来调用 dex 类加载器:

然后上面的代码调用这个类:

然后这个类 UserRun 调用 MyOnBootReceiver.class

因此 DexClassLoader 成功加载了 UserRun 类,但随后 UserRun 类无法调用 MyonBootReceiver.class。

在 logcat 中,执行 UserRun 类后它不会返回任何错误或任何内容。

它成功表明:

但是这不会加载:

MyOnBootReceiver.class 内容:

我按照本教程来构建这个项目。

http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+blogspot%2FhsDu+%28Android+Developers+Blog%29

我错过了什么吗,理论上这应该有效

这里还有 Manifest.xml:

来自 Shelvin 建议的 LOG CAT(错误):

0 投票
2 回答
2126 浏览

android - java.lang.UnsupportedOperationException:不支持类加载器 - Android 多 dex 问题

我有一个使用大量 JAR 的 Android 应用程序,并且已达到 65K 方法的限制。为了解决这个问题,我使用了支持多 dex 选项的 Android Maven 插件 4.0.0-rc.1。我能够生成包含多个 dex 文件的 APK 文件;classes.dex 和 classes2.dex。

但是,当我在平板电脑上安装并运行此应用程序时,出现以下异常。

我正在使用 PR https://github.com/jayway/maven-android-plugin/pull/425中给出的同一个 Dexter 类。

MiApplication 的片段如下 -

我打印了它用于加载 Dexter 类的类加载器,它似乎正在使用 PathClassLoader。

如果从 DexClassLoader 以外的任何其他地方加载 Dexter 类,则会引发“不支持的类加载器”异常。

如何确保从 DexClassLoader 加载 Dexter 类?以及如何解决这个“不支持的类加载器”问题?

0 投票
3 回答
4202 浏览

android - Android Multidex 列出所有类

我想使用 ApplicationWrapepr 方法在我的应用程序中使用 multidex,如此处所述https://plus.google.com/104023661970539138053/posts/YTMf8ADTcFg

我使用了 --minimal-main-dex 选项以及这样的保留文件:

这导致在我的主 dex 文件中列出的类是可以的。我比使用使用以下代码的库来列出 dexfile 中的所有类,但只获取主“clesses.dex”的条目,而不是所有其他加载的 dex 文件的条目,因为新的 DexFile 只检查“classes.dex” :

目前的单一路径通过以下方式确定:

结果类似于 /data/../myapplicationname.apk

是否有另一种可能列出 dex 文件中的所有类?或者当前在 ClassLoaders 中的所有类?该库对项目至关重要,并在以后使用这种方法通过反射查找组件实现。

EDIT1: 如果发现classes2.dex文件位于:/data/data/com./code_cache/secondary-dexes/com.-1.apk.classes2.dex

但是,当使用带有此路径的 new DexFile() 时,IOEsxception 会抛出消息“无法打开 dexfile”。

0 投票
2 回答
1399 浏览

android - DexClassLoder - 在路径上找不到类

我正在尝试从放置在 sdcard 上的外部 JAR 文件加载类。许多人成功使用了 DexClassLoader

我的步骤:

1)从jar文件创建classes.dex文件:

2)将生成的classes.dex文件添加到jar

3)创建DexClassLoader:

4)当我看到里面的 dex 内容时:

5)负载等级:

在这里我得到例外!:

我看到它创建了 app_dex 目录,但它是空的。

请帮忙!!!

0 投票
1 回答
284 浏览

android - DexClassLoader,重新加载代码失败,信号 7

我正在尝试构建一个插件系统,其中 DexClassLoader 从其他已安装的包含片段(我的插件)的 apk 中获取代码,并将它们显示在我的主机中。这工作得很好。

我也喜欢让插件可热插拔,这意味着我可以从插件更改代码,安装新的,主机会注意到并加载新代码。如果我是第一次更改代码,这也有效。(虽然我认为不应该,但似乎我对这段代码的理解有误:

)

requiredClass = classLoader.loadClass(fullName);如果我用同一个插件第二次尝试它,主机会以类似的方式关闭

libc 致命信号 7 (SIGBUS) 位于 0x596ed4d6 (code=2),线程 28814 (ctivityapp.host)

有没有人对 DexClassLoader 的功能有更深入的了解,并且可以告诉我,这里发生了什么?我很坚持这一点。

下面是加载外部代码的方法的完整代码:

提前谢谢了!

0 投票
0 回答
415 浏览

java - 从下载的 dex 文件加载类时捕获 ClassNotFound 异常

我正在尝试在我的 android 应用程序中实现热修复机制。谷歌搜索了一段时间后,这是我所做的:

  1. 我生成了一个dynamic.jar包含要修补的类的文件。(我正在使用 Eclipse 和 ADT)
  2. 使用dx --dex --output=patch.jar dynamic.jar,我设法创建了一个 jar 文件,其中包含classes.dex
  3. 在我的 android 代码中,我使用 DexClassLoader 加载了类:(new DexClassLoader(patchFile.getAbsolutePath(), outputFolder.getAbsolutePath(), null, getClassLoader().getParent()注意我正在使用 getParent())
  4. 我已验证.dex文件已成功提取outputFolder
  5. 我通过反射将类加载器更改为我的自定义类加载器。而且我已经验证了自定义类加载器正在工作
  6. 当我尝试加载课程时,CUSTOM_LOADER.loadClass(className)我得到了ClassNotFoundException

所以我想知道有什么问题吗?我曾经DexFile列出该.dex文件中的所有类,并且新类就在那里。是否甚至可以从 Internet 下载已编译类的子集?

提前致谢。

0 投票
1 回答
2201 浏览

java - Android DexClassLoader 错误,“优化的数据目录 .. 不属于当前用户”

我正在尝试制作一个简单的 android 应用程序,它可以在运行时从 SD 卡加载 DEX 文件。

该应用程序有两个活动。第一个活动是一个带有按钮的简单屏幕。按下按钮时,将启动第二个活动,这会导致调用 loadDex() 方法。loadDex() 方法尝试定位 SD 卡上的 jar 文件并将其加载到当前应用程序中。

这是我第一个活动的代码:

这是我的第二个活动的代码(加载 DEX 文件的那个):

调用 DexClassLoader 构造函数时会出现问题。在日志中可以发现以下错误:

这是我认为代表问题的日志中的行:

任何帮助将不胜感激,因为我在网上发现的关于这个问题的信息很少。我正在开发适用于 Android 4.2、Api 17 的应用程序。

提前致谢。