Я разрабатываю игру для Android с LibGDX, и динамически загружается множество классов, в версии релиза apk я не могу их загрузить, используя:
Class.forName(className);
Я получаю ClassNotFoundException
, анализируя apk, который я увидел, что имя классов в файле dex упрощается только до одной буквы, я думаю, поэтому я не могу загрузить. Проект LibGDX состоит из двух частей: ядра и андроида, первая выполняет загрузку, которую я хочу, и у меня нет программных приложений Android, он действительно является депо к проекту андроида, который будет работать внутри действия и использовать функциональные возможности из ядра.
В проекте Android я могу загрузить классы, используя этот пример кода, в onCreate:
try {
Class clazz = Class.forName("game.ui.TreasureChest");
TreasureChest chest = (TreasureChest)clazz.newInstance();
chest.update(0.0f);
}catch(Exception ex){
Log.v("loadClassses", "exception: " + ex.getMessage());
}
Этот код не дает мне никаких исключений, по-видимому, в двух проектах используются загрузчики различных классов, и версия для Android специализирована для этих файлов dex.
Этот код не будет работать:
Class clazz = Class.forName("game.ui.TreasureChest", true, this.getClass().getClassLoader());
Почему это происходит?
В документации для Android сказано, что первый пример эквивалентен второму, поэтому не должно быть исключения.
Есть другое решение для меня, чтобы загрузить эти классы?
Я думал об интерфейсе, где проект Android будет реализован для загрузки заданного класса по имени, но ни один из вариантов метода forName не работает в интерфейсе.