Я динамически загружаю классы на Android через следующий код sniplet.Получить Java Bytecode на 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();
, но он всегда возвращает пустой поток, не зная, как указать ресурс для класса.
Вы не можете получить байт-код Java из файла DEX, так как его там нет. Теоретически вы можете получить байт-код Dalvik, хотя в зависимости от вашей конечной цели, вероятно, будет проще просто открыть DEX-файл и прочитать его. – fadden