Следует ли мне избегать создания классов и их компиляции во время выполнения в Android?

Допустим, у меня есть приложение, которое более или менее похоже на редактор и исполнитель того, что было создано с помощью функции редактора. Я думал о двух путях: я могу либо разработать алгоритм и структуру для выполнения своей работы, либо я могу буквально написать и скомпилировать во время выполнения файл .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 быть более сложным и/или менее эффективным, и вообще какие-либо плюсы и минусы.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Генерация кода во время выполнения запрещена в Play Store. Вы можете загружать сценарии в песочнице, например Javascript, но не можете загружать или компилировать собственный код во время выполнения. Если вас поймают на этом, ваше приложение будет удалено. Это политика безопасности Google, направленная на снижение риска вредоносных программ и троянских коней.

Фактически, в целом компиляция кода во время выполнения на любой платформе почти наверняка является неправильным выбором. Звучит как кошмар отладки. Иногда вы можете загружать расширения с помощью системы плагинов, но вы не будете компилировать их вживую.

Что вы имеете в виду под «но вы бы не собирали его вживую»? Приложение с архитектурой плагинов обычно загружает и компилирует код среды выполнения рекламы, я ошибаюсь?

zaxunobi 16.04.2024 18:37

@JadeKush Нет, обычно вы предварительно компилируете его один раз и загружаете байт-код/скомпилированный код библиотеки. Вы бы не скомпилировали его на клиенте. Нет смысла усложнять клиент компилятором.

Gabe Sechan 16.04.2024 18:46

Другие вопросы по теме