NDK è anche un SDK
Google è responsabile di questa nomenclatura libera.
Tradizionalmente, tutti i Software Development Kit (SDK) erano in C, pochissimi in C++. Poi arriva Google e rilascia una libreria basata su Java per Android e la chiama SDK.
Finora andava bene.
Tuttavia, poi è arrivata la richiesta di una libreria basata su C/C++ per lo sviluppo. Principalmente dagli sviluppatori C/C++ che miravano allo sviluppo di giochi e alcune applicazioni ad alte prestazioni.
Così, Google ha rilasciato una libreria basata su C/C++. Cosa fare con il nome? Hmm ... l'hanno semplicemente chiamata Native Development Kit (NDK). Ma l'NDK è comunque un kit di sviluppo software.
Prologo.
NDK è progredito con ogni nuova versione in termini di accesso alle risorse del sistema operativo. Così come il numero di applicazioni che sono scritte in C/C++ per Android, con alcune obbligatorie in Java, non per scelta degli sviluppatori ma per insistenza di Google.
Ironicamente, sono i linguaggi collaudati come C e C++ che sono veramente cross platform.
Ti permettono di scrivere applicazioni che possono compilare per Windows, Windows UWP, GNU/Linux, Android, iOS, Mac OS X, BSD, Solaris ecc. senza cambiare una sola riga di codice, se si utilizza una libreria wrapper C/C++ adatta.
Performance
La scelta di Google è discutibile, perché la disponibilità di accessi basati su C/C++ per Windows Mobile e iOS ha dimostrato di avere prestazioni migliori o comparabili con Android anche su telefoni Windows o iOS relativamente poco potenti. Tanto che molti telefoni Android assomigliano a un desktop decente in termini di specifiche e forniscono solo una frazione delle capacità di un desktop.
La prova del nove è l'esistenza di numerose applicazioni per la pulizia della memoria, il raffreddamento della CPU, l'aumento delle prestazioni.
Complessità
Qualcuno ha scritto che C/C++ richiede un codice complesso.
Davvero? Complesso per chi?
Uno "sviluppatore" che gioca con i linguaggi, ha la sua base in Java/C# troverà il C/C++ complesso.
Che dire degli sviluppatori con 10+ anni di C/C++ sotto la cintura?
In tutta onestà, sono gli strumenti di sviluppo di Java ad essere complessi, perché sono mal strutturati e sono una perdita di produttività.
Voterei davvero al ribasso i commenti ignoranti sulla complessità del C++. Ho appena consegnato un'applicazione di rete scritta in C++ usando Qt che gira su tutti i cellulari.
La parte della complessità? La perdita di tempo chiamata Java, con i suoi standard di strumenti incoerenti tra le varie versioni che rendono la sua integrazione con QtCreator un inferno.