Telefones típicos que executam sistemas operacionais, como o Android, usam sua própria JVM (Java Virtual Machine). A JVM é responsável por manipular o que é conhecido como "bytecode". Você pode pensar na JVM como um processador virtual capaz de processar o bytecode. É mais complexo do que isso, mas não vou entrar em muitos detalhes sobre isso.
Então, basicamente, você tem várias JVMs para diferentes arquiteturas de CPU (como ARM para telefones e x86 para computadores desktop). Essas JVMs podem processar o bytecode e fornecer uma experiência consistente em todos os dispositivos dessa maneira. No entanto, se as bibliotecas em que seu aplicativo se baseia exigirem APIs nativas específicas do sistema, elas não funcionarão. Portanto, se você codificar um aplicativo Java antigo comum usando o Swing ou o SWT, ele não funcionará no Android, já que o Android não fornece essas APIs (que eu saiba) para aproveitar. Além disso, o Android tem uma configuração muito específica para o funcionamento de seus aplicativos e o Android fornece sua própria implementação da JVM. É muito diferente dos oráculos.
Então, se você está apenas codificando algo em Java como um aplicativo de linha de comando ou um aplicativo de interface do usuário simples, não fará isso funcionar no Android como faria no seu PC.