Per programmare un'app servono praticamente le stesse competenze che servono per programmare un'applicazione desktop. Devi conoscere il linguaggio di programmazione richiesto, come funziona l'ambiente (es: da cosa è composta 1 app android), saper progettare, ...
Sono tutte cose che si imparano studiando e si affinano con la pratica.
Nel caso di una applicazione android a livello di linguaggi di programmazione devi conoscere sicuramente Java e quelle 2/3 cose di XML che sono richieste per i layout e i file di configurazione. Se hai la necessità di creare un'applicazione critica dal punto di vista delle performance è necessario usare gli strumenti forniti dal NDK, per cui devi conoscere anche C/C++. Se ti serve una parte grafica impegnativa devi studiarti le OpenGL.
A livello di ambiente, invece, devi studiare tutte le componenti base del mondo android (es: cosa sono le activity e come si usano, gli intent, il manifest, ecc), tutte cose che puoi studiare sulla documentazione ufficiale e/o sui libri.
Di HTML, CSS e PHP non ne hai bisogno per quanto riguarda l'app android pura, se mai possono servirti per la parte server. Di SQL puoi averne bisogno: all'interno delle app puoi usare un database embedded (SQLite) oppure puoi sfruttare dei database esterni (MySQL, SQL Server, e chi più ne ha più ne metta), che puoi accedere tramite web services.