Inizia con la proposizione che un'applicazione ha un'interfaccia utente. Come vuoi che si guardi e si comporti? Hai 4 scelte.
- Android nativo. Stai per scrivere Java, ma puoi estenderlo in C ++ usando NDK.
- HTML5 / Javascript. Probabilmente scriverà Javascript, ma puoi estenderlo usando un server o un wormhole.
- renderer. Puoi scrivere qualsiasi lingua che ti piace perché stai per disegnare i tuoi widget su una superficie di rendering e non saranno nativi.
- Il devkit di qualcuno. Alla fine farà uno dei precedenti. Xamarin, Qpython, QT, ecc. Qualunque cosa.
C'è molto da leggere ad esempio ( link ). Non importa nulla finché non decidi quale tipo di interfaccia utente desideri. Se vuoi essere nativo, stai scrivere Java.
In risposta alle tue domande:
- Sì, è possibile scrivere ed eseguire il codice, in pratica tramite NDK o simili. Non aiuta con l'interfaccia utente.
- Non so, ma una volta arrivato all'NDK puoi fare più cose.
- Ubuntu non è Android. Lo lascerò agli altri.
Riguardo all'NDK, posso dirti che fornisce un ambiente di sviluppo C ++ ragionevolmente completo. La maggior parte (ma non tutte) delle funzionalità di libreria C ++ standard sono fornite, oltre a un set di API che si agganciano alle API del processo Android (in modo che sia possibile scrivere Attività interamente in C ++) e una capacità JNI.
Ci sono API del dispositivo (cose come l'accelerometro e il GPS) a cui è richiesto l'accesso da Java, quindi passiamo a JNI. Potresti essere in grado di accedere ai dispositivi direttamente da C ++, ma mi aspetto che potresti perdere la portabilità (tra i produttori) e le funzionalità di livello superiore.
Sotto ci sono i driver di dispositivo, un HAL, un kernel Linux e altre cose interessanti. Se è lì che vuoi giocare, c'è molto da leggere: link .