【发布时间】:2014-12-07 23:24:08
【问题描述】:
在 Android 5.0 之前,我能够使用 DexClassLoader 动态加载 DEX 文件并调用 loadClass() 方法,但在最新的 Android 版本中,我得到了 ClassNotFoundException。
这是我正在做的事情:
-
生成 DEX 文件。
../android-sdk/android-sdk-linux_86/build-tools/21.1.1/dx --dex --output=bin/output.dex bin/output.jar -
创建一个 DexClassLoader。
DexClassLoader cl = new DexClassLoader( dexFile.getAbsolutePath(), odexFile.getAbsolutePath(), null, mContext.getClassLoader()); 致电
cl.loadClass("myMethod");
我知道 ART 使用 dex2oat 生成一个由 ART 加载的 ELF 文件,但在第 2 步中,我正在生成一个 ODEX 文件,因此我不需要在 ART 中完成在运行时加载 DEX 文件的操作,谁能帮帮我?
【问题讨论】:
-
为什么需要在运行时加载 DEX 文件? 5.0原生支持多个dex文件。
-
DEX文件有敏感信息,在assets目录下加密。当我需要使用它时,它被解密然后在运行时加载。
-
@garibay 你设法解决了这个问题吗?我遇到了同样的问题,这只适用于我的 Dalvik。
-
这里有什么消息吗?我假设不再可能在较新的 Android 版本上加载动态代码(缺少 OpenDEXfile(byte[] ...)。有人知道不同的解决方案吗?
-
在 android6 marshmallow 上自然是同样的问题。我认为注入代码运行时非常重要的概念,例如基于插件的应用程序,而不仅仅是与 multidex 问题有关。很遗憾在互联网上找不到任何解决方案
标签: android classloader dex android-runtime dex2oat