Я пытаюсь загрузить файл .jar, скомпилированный без Android SDK (поэтому классы не объединяются в dex). Я провел много часов, пробуя все возможные способы (Javassist, системный загрузчик классов по умолчанию...), и только сейчас я обнаружил, что мне нужно использовать DexClassLoader, но (логически) он может загружать только декодированные классы. Есть ли способ загрузить неиндексированный класс? В основном я думаю, что нет, потому что Android работает на Dalvik, который может запускать только dex.
я использовал
URLClassLoader child = new URLClassLoader(new URL[]{file.toURI().toURL()}, BotLoader.class.getClassLoader());
return Class.forName(className, true, child);
но это работало только с классами, включенными или скомпилированными с проектом.
я также использовал
DexClassLoader classLoader = new DexClassLoader(
pathToJar, tmp.getAbsolutePath(), null, BotLoader.class.getClassLoader());
return classLoader.loadClass(className);
но я понятия не имею, как получить optimizedDirectory
.
Если я не могу использовать неиндексированные классы, может кто-нибудь сказать мне, как я могу преобразовать мои существующие классы (.class в .jar) в новый пакет jar?
Спасибо.