Родной язык Андроида (как это ясно видно из документации) — это Java. Весь API к платформе предоставлен в виде Java библиотек. Впрочем, на самом телефоне бежит не джава — джававский байткод интерпретируется в родной андроидовский (Dalvik), который и запускается на аппарате. Кроме этого, есть NDK (native development kit) — набор инструментов и библиотек, которые позволяют скомпилировать нейтивный позикс (Линукс) код и прицепить это к аппликации. Соответственно, там может бежать все, что компилируется в нейтевный код, включая интерпретаторы скриптовых языков и виртуальные машины. До недавнего времени, нельзя было создать приложение полностью в нейтивном коде — все равно нужна была обертка из Java, недавно, добавив набор нейтивных библиотек с системными API стало возможно написать нейтивную программу от начала до конца, без Java.
Из вышеперечисленного ясно, что можно писать практически на чем угодно. В реальности же, в большинстве случаев, пишут на Java, иногда цепляют переписанные узкие места и/или сторонние библиотеки на С/С++. Исключения — игры, которые часто пишут целиком или почти целиком на С++.