问题标签 [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.
java - Android 类加载器错误
我想在我的 jar 文件中实例化 ScreenX 类并尝试此站点上的所有 solition,但它无法运行。
我有两个文件;
我尝试了闲置代码。
这是我的 plugin.jar 的 ScreenX 类的代码。
package com.example.plugins;
有工作样本吗?请帮忙...
android - 从 dex 文件运行方法时无法读取资源
我有一个包含代码和资源 ( ResourceBundle
) 的 jar 文件。
我用那个 jar 在 android studio 中创建了一个简单的项目,编译它,提取.apk
并复制classes.dex
到第二个项目。还将提取的 .apk 中的资源复制到第二个项目。
从第二个项目中,我从 .dex 文件中加载了一个类。当从该类(从 dex 文件)运行一个读取资源的方法时,它不会找到它,它会抛出一个异常:
失败的行:
如果我只是运行:
从第二个项目(不是从 dex 中)它可以正常工作 - 将获得资源。
有什么想法吗?
谢谢
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?
java - 广播接收器的Android DexClassLoader?
我试图动态加载 BroadcastReceiver 类并在这个问题上停留了超过 2 周。它让我发疯,项目快到了。
任何帮助将不胜感激。
我使用这段代码来调用 dex 类加载器:
然后上面的代码调用这个类:
然后这个类 UserRun 调用 MyOnBootReceiver.class
因此 DexClassLoader 成功加载了 UserRun 类,但随后 UserRun 类无法调用 MyonBootReceiver.class。
在 logcat 中,执行 UserRun 类后它不会返回任何错误或任何内容。
它成功表明:
但是这不会加载:
MyOnBootReceiver.class 内容:
我按照本教程来构建这个项目。
我错过了什么吗,理论上这应该有效
这里还有 Manifest.xml:
来自 Shelvin 建议的 LOG CAT(错误):
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 类?以及如何解决这个“不支持的类加载器”问题?
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”。
android - DexClassLoder - 在路径上找不到类
我正在尝试从放置在 sdcard 上的外部 JAR 文件加载类。许多人成功使用了 DexClassLoader。
我的步骤:
1)从jar文件创建classes.dex文件:
2)将生成的classes.dex文件添加到jar
3)创建DexClassLoader:
4)当我看到里面的 dex 内容时:
5)负载等级:
在这里我得到例外!:
我看到它创建了 app_dex 目录,但它是空的。
请帮忙!!!
android - DexClassLoader,重新加载代码失败,信号 7
我正在尝试构建一个插件系统,其中 DexClassLoader 从其他已安装的包含片段(我的插件)的 apk 中获取代码,并将它们显示在我的主机中。这工作得很好。
我也喜欢让插件可热插拔,这意味着我可以从插件更改代码,安装新的,主机会注意到并加载新代码。如果我是第一次更改代码,这也有效。(虽然我认为不应该,但似乎我对这段代码的理解有误:
)
requiredClass = classLoader.loadClass(fullName);
如果我用同一个插件第二次尝试它,主机会以类似的方式关闭
libc 致命信号 7 (SIGBUS) 位于 0x596ed4d6 (code=2),线程 28814 (ctivityapp.host)
有没有人对 DexClassLoader 的功能有更深入的了解,并且可以告诉我,这里发生了什么?我很坚持这一点。
下面是加载外部代码的方法的完整代码:
提前谢谢了!
java - 从下载的 dex 文件加载类时捕获 ClassNotFound 异常
我正在尝试在我的 android 应用程序中实现热修复机制。谷歌搜索了一段时间后,这是我所做的:
- 我生成了一个
dynamic.jar
包含要修补的类的文件。(我正在使用 Eclipse 和 ADT) - 使用
dx --dex --output=patch.jar dynamic.jar
,我设法创建了一个 jar 文件,其中包含classes.dex
- 在我的 android 代码中,我使用 DexClassLoader 加载了类:(
new DexClassLoader(patchFile.getAbsolutePath(), outputFolder.getAbsolutePath(), null, getClassLoader().getParent()
注意我正在使用 getParent()) - 我已验证
.dex
文件已成功提取outputFolder
- 我通过反射将类加载器更改为我的自定义类加载器。而且我已经验证了自定义类加载器正在工作
- 当我尝试加载课程时,
CUSTOM_LOADER.loadClass(className)
我得到了ClassNotFoundException
所以我想知道有什么问题吗?我曾经DexFile
列出该.dex
文件中的所有类,并且新类就在那里。是否甚至可以从 Internet 下载已编译类的子集?
提前致谢。
java - Android DexClassLoader 错误,“优化的数据目录 .. 不属于当前用户”
我正在尝试制作一个简单的 android 应用程序,它可以在运行时从 SD 卡加载 DEX 文件。
该应用程序有两个活动。第一个活动是一个带有按钮的简单屏幕。按下按钮时,将启动第二个活动,这会导致调用 loadDex() 方法。loadDex() 方法尝试定位 SD 卡上的 jar 文件并将其加载到当前应用程序中。
这是我第一个活动的代码:
这是我的第二个活动的代码(加载 DEX 文件的那个):
调用 DexClassLoader 构造函数时会出现问题。在日志中可以发现以下错误:
这是我认为代表问题的日志中的行:
任何帮助将不胜感激,因为我在网上发现的关于这个问题的信息很少。我正在开发适用于 Android 4.2、Api 17 的应用程序。
提前致谢。