我通过以下代码片段在Android上动态加载类。
if(classes.size() > 0) {
// Located classes.load and scan them for interfaces.
DexClassLoader dx = new DexClassLoader(szPath,outdex,null, c.getClassLoader());
for(String sz : classes) {
Class<?> cls = dx.loadClass(sz);
for(Class<?> i : cls.getInterfaces()) {
if(i.getName().contains("IPinPad") == true) {
// This is a PinPad.
return (IPinPad)cls.newInstance();
}
}
}
}
类包含从先前运行代码在dex文件中描述的类列表。目的这个代码是返回实现IPinPad接口声明的对象实例。这一切都很好,但另外我想抓住cls.newInstance()对象的字节代码。我该怎么做?
我一直在玩cls.getClassLoader().getResourceAsStream();
,但它总是返回一个空流,不知道如何指定该类的资源名称。
答案 0 :(得分:0)
您可以使用dexlib2(smali/baksmali的一部分)来加载和读取dex文件中的dalvik字节码。是的,它也应该可以在Android应用中使用。
DexFile dexFile = DexFileFactory.loadDexFile("/blah/blah.dex", android.os.Build.VERSION.SDK_INT);
for (ClassDef classDef: dexFile.getClasses()) {
if (classDef.getType().equals("Lthe/class/to/look/for;")) {
// handle/inspect/process the class as needed
}
}