简介:,我试图在运行时从classes.jar内部的classes.dex加载代码。我做了很多研究,花了很多时间在这个问题上,所以我真的需要帮助。
问题:当我的jar包含一个简单的类时,就成功地加载了它。但是,在完全相同的情况下,当我的jar包含相同的类时,只有在该类实现接口之后,加载该类才会出现错误:
在path上没有找到类"com.x.y.z.w.Patch“:DexPathList[zip文件DexPathList nativeLibraryDirectories=/供应商/lib64 64,/system/lib64 64]”
我还得到:
I/dalvikvm:未能解决Lcom/x/y/TestClassImpl;接口4 'Lcom/x/y/TestClassInterface;‘
Environment: -用于尝试加载类的函数:
(DexClassLoader实例).loadClass& (DexFile实例).loadClass。
具体地说:
方法1:
DexFile dx = DexFile.loadDex(jarInternalPath, File.createTempFile("opt", "dex",
context.getCacheDir()).getPath(), 0);
Class<?> targetClass = dx.loadClass(className,
ClassLoader.getSystemClassLoader()); // Error方法2:
DexClassLoader dexClassLoader = new DexClassLoader(jarInternalPath,
dexOutPath.getAbsolutePath(), null, ClassLoader.getSystemClassLoader());
Class<?> targetClass = dexClassLoader.loadClass(className); // Error这是我的打印方法:
try {
DexFile dx = DexFile.loadDex(jarInternalPath, File.createTempFile("opt", "dex",
context.getCacheDir()).getPath(), 0);
// Print all classes in the DexFile
for (Enumeration<String> classNames = dx.entries(); classNames.hasMoreElements();) {
String className = classNames.nextElement();
Log.d(TAG, "Analyzing dex content, fonud class: " + className);
}
} catch (IOException e) {
Log.d(TAG, "Error opening " + jarInternalPath, e);
}第二个项目,我尝试了与所有3个模块相同,1个模块未能以同样的方式工作。
求你了救命!
发布于 2016-07-15 22:16:14
这还不足以负担你的课程。必须更改系统类加载器,以便从dex动态和编程地使用您自己的类。否则,您就不能使用您的接口或类或其他任何东西。
如果您希望动态加载类,那么首先从dexfile或dexclass加载器加载类,然后使用它。
例如,
Class<?> myOwnClass = MyDexClassLoader.loadClass("com.example.my");https://stackoverflow.com/questions/38101183
复制相似问题