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