Допустим, у меня есть приложение, которое более или менее похоже на редактор и исполнитель того, что было создано с помощью функции редактора. Я думал о двух путях: я могу либо разработать алгоритм и структуру для выполнения своей работы, либо я могу буквально написать и скомпилировать во время выполнения файл .java.
Чтобы лучше понять, о чем я говорю, я приведу упрощенный пример. В первом случае я создам несколько экземпляров SpecialMove для каждого создания пользователя:
public class SpecialMove{
private String name;
private Type type;
private int damage;
...
}
Во втором случае классы, расширяющие SpecialMove, будут написаны и скомпилированы во время выполнения:
public class SpecialMove{
protected Type type;
protected int damage;
...
}
//this class will be written into a separate file and compiled at runtime
public class FireBall extends SpecialMove{
protected Type type;
protected int damage;
...
}
Раньше я предпочитал использовать второй сценарий, но это было приложение для настольного компьютера. Поскольку я не очень разбираюсь в Android, я хотел бы спросить вас, может ли создание байт-кода Dalvik быть более сложным и/или менее эффективным, и вообще какие-либо плюсы и минусы.
Генерация кода во время выполнения запрещена в Play Store. Вы можете загружать сценарии в песочнице, например Javascript, но не можете загружать или компилировать собственный код во время выполнения. Если вас поймают на этом, ваше приложение будет удалено. Это политика безопасности Google, направленная на снижение риска вредоносных программ и троянских коней.
Фактически, в целом компиляция кода во время выполнения на любой платформе почти наверняка является неправильным выбором. Звучит как кошмар отладки. Иногда вы можете загружать расширения с помощью системы плагинов, но вы не будете компилировать их вживую.
@JadeKush Нет, обычно вы предварительно компилируете его один раз и загружаете байт-код/скомпилированный код библиотеки. Вы бы не скомпилировали его на клиенте. Нет смысла усложнять клиент компилятором.
Что вы имеете в виду под «но вы бы не собирали его вживую»? Приложение с архитектурой плагинов обычно загружает и компилирует код среды выполнения рекламы, я ошибаюсь?