Le NDK n'est pas natif en soi. Il s'agit dans une large mesure d'un wrapper JNI autour du SDK Android. L'utilisation de NativeActivity vous offre un moyen pratique de gérer certains événements de cycle de vie d'application et d'ajouter votre propre code natif. ALooper, AInputQueue, etc. sont tous des wrappers JNI des homologues Java SDK, certains avec du code supplémentaire privé et inaccessible pour de vraies applications. En ce qui concerne le développement Android, écrire une application entièrement en C++ natif ne suffit pas: vous devrez toujours utiliser l'API Android (dans tous les cas d'applications réels): s, qui sont dans une large mesure pure Java. Que vous les utilisiez à travers des wrappers fournis par le NDK ou des wrappers que vous créez vous-même ne changez pas vraiment cela. Donc, pour répondre à votre question: Non, ça ne vaudrait pas le coup, car vous finissez par écrire des wrappers JNI pour les appels SDK au lieu d'écrire des wrappers JNI sur vos propres méthodes Java qui font la même chose, avec moins de code , code plus simple et code plus rapide. Par exemple, afficher une boîte de dialogue en utilisant "pure C++" implique beaucoup d'appels JNI. Le simple fait d'appeler une méthode Java via JNI qui fait la même chose vous donnera un code plus rapide (un appel JNI), et, sans doute, un code plus facile à maintenir.
Pour bien comprendre ce que vous pouvez faire, vous devez vraiment examiner le code source Android. Commencez avec native_app_glue.c, qui est disponible dans le NDK, puis continuez avec l'implémentation du système d'exploitation de AActivity, ALooper, AInputQueue, etc. Google Code Search est d'une grande aide dans ce domaine. :-)
S'il est facile à faire en Java, et inclut de nombreux appels, appelez une méthode via JNI qui fait tout, plutôt que d'écrire tout le code supplémentaire pour le faire avec plusieurs appels JNI. Conserver autant de votre code C++ existant que raisonnable.
Et si vous créez un jeu OpenGL qui n'a pas besoin de boîtes de dialogue et dont l'interface utilisateur est dessinée à 100% OpenGL. L'utilisation de NativeActivity aurait-elle plus de sens? – Bram
Dans ce scénario, cela aurait parfaitement du sens. –