Схема создания приложений для Андроида такова:

Создавать байткод в .class файлах могут
не только компиляторы языка Java, но и компиляторы большого множества других языков. Байткод Java исполняется в среде исполнения Java VM и её аналоге, Dalvik VM:

На портативных устройствах Android установлен runtime Dalvik VM, а на настольных (сегодня это уже размытое понятие) - полноценная Java SE Runtime Environment.
Одно дело - скомпилировать байткод в файл, а другое дело - исполнять инструкции байткода из файла.
Так, Java SE Runtime Environment использует оконную систему низлежащей ОС. В Windows - Windows API, а Linux - X server API. Несмотря на разницу в оконных системах, у них много общего.
А вот на портативных устройствах экраны другие и вместо мыши - касание экрана или перо. Причём, из-за того, что размеры экрана малы, то построение графического интерфейса для настольных и портативных устройств сильно отличается.
Тенденция последних лет - это так называемый "адаптивный дизайн", когда графический интерфейс подстраивается под особенности экрана: автоматически изменяются размеры графических элементов, перескакивают на следущую строку и т.д.
Для написания настольных приложений Delphi подходит.
Для Андроида же можно создавать программы на
Free Pascal в связке с
laz4android.