Типичные телефоны, работающие под управлением операционных систем, таких как Android, имеют собственную JVM (виртуальную машину Java). JVM отвечает за обработку так называемого «байт-кода». Вы можете думать о JVM как о виртуальном процессоре, который способен обрабатывать байт-код. Это сложнее, чем это, но я не буду вдаваться в подробности этого.
По сути, у вас есть несколько JVM для разных архитектур ЦП (например, ARM для телефонов и x86 для настольных компьютеров). Эти JVM могут обрабатывать байт-код и таким образом обеспечивать согласованное взаимодействие между устройствами. Однако, если библиотеки, на которые опирается ваше приложение, требуют собственных системных API, это не сработает. Поэтому, если вы пишете обычное старое приложение Java с использованием Swing или SWT, оно не будет работать на Android, поскольку Android не предоставляет эти API (насколько мне известно) для использования. Кроме того, у Android есть очень специфическая настройка того, как работают их приложения, и Android предоставляет собственную реализацию JVM. Это очень отличается от оракулов.
Поэтому, если вы просто кодируете что-то на Java, например, приложение командной строки или простое приложение с пользовательским интерфейсом, вы не сможете заставить это работать на Android, как на своем ПК.