Pourquoi une application Android ne devrait-elle pas être écrite en C / C ++ car vous «préférez simplement programmer en C / C ++»?

Mis à jour (pour plus de clarté et pour réduire les ambiguïtés):

Je vais commencer à bricoler avec les applications Android. J’avais l’intention d’écrire le en C ++ en utilisant le NDK (puisque j’ai plus d’expérience en C ++ et que je le préfère à Java), mais j’ai trouvé ce qui suit sur la page Android NDK :

vous ne devriez utiliser le NDK que si cela est essentiel à votre application – jamais parce que vous préférez simplement programmer en C / C ++.

J’avais l’impression que vous devriez utiliser la langue que vous préférez, à condition que cela corresponde au travail. Quelqu’un pourrait-il expliquer pourquoi il est si fortement conseillé de ne pas utiliser C / C ++ pour le développement Android?


Original:

Je vais commencer à bricoler avec les applications mobiles, en particulier Android, qui est le système d’exploitation de mon téléphone actuel, et je me demandais si l’écriture de l’application en C ++ (ou au moins le kernel, puis en Java) était une option acceptable.

Un peu de fond, je suis un grand informaticien qui a suivi 3 cours C ++ (intro, intermédiaire, OOP, et je prends un cours STL au spring) et seulement 1 cours Java (intermédiaire). Pour cette raison, je suis plus à l’aise avec C ++ et je le préfère à Java. Je suis tombé sur ce qui suit sur la page Android NDK :

L’utilisation du code natif sur Android n’améliore généralement pas les performances, mais augmente toujours la complexité de votre application. En général, vous ne devriez utiliser le NDK que si cela est essentiel à votre application – jamais parce que vous préférez simplement programmer en C / C ++.

  • J’avais l’impression que vous devriez utiliser la langue qui correspond le mieux au travail que vous connaissez.
  • Je peux vouloir porter l’application sur une autre plate-forme mobile, telle que iOS, qui prend en charge C ++ mais pas java
  • Alors que Java est un langage de haut niveau et devrait donc accélérer le développement, je pense que le développement serait plus lent car il faudrait presque tout réapprendre (puisque je n’ai pris qu’un cours sur la langue)

Tout conseil serait très apprécié.

ps: beaucoup de réponses à ce sujet datent d’il y a des années et il y a très peu de réponses de suivi qui mentionnent le NDK permettant le développement d’applications natives complètes sur Android 2.3 et versions ultérieures.

Pense-y de cette façon. Vous pouvez utiliser le SDK Java pour créer une application complète exploitant 100% des API disponibles pour les développeurs. Il n’y a rien que vous puissiez faire avec le NDK qui ne peut pas être fait avec le SDK (du sharepoint vue de l’API), le NDK fournit simplement de meilleures performances.

Maintenant, regardez-le en sens inverse. Si vous choisissez d’écrire une application à 100% dans le NDK, vous pouvez toujours écrire une application entièrement fonctionnelle, mais le nombre d’API de structure auxquelles vous pouvez accéder est limité. Tout le framework Android n’est pas accessible au niveau de la couche native; la plupart des API ne sont que Java. Cela ne veut pas dire que toutes les API dont vous pourriez avoir besoin ne sont pas disponibles dans le NDK, mais nulle part près de TOUTES les API ne sont exposées.

Au-delà de cela, le NDK introduit un code spécifique à la plate-forme qui étend la taille de votre dissortingbution. Pour chaque architecture de périphérique que vous envisagez de prendre en charge, votre code natif doit être intégré aux fichiers .so (un pour armv5, armv7 et x86), tous intégrés dans le même APK. Cette duplication du code exécutable fait que votre application est 3 fois plus grande (c.-à-d. Un «gros binary») à moins que vous n’ayez à créer des fichiers APK distincts pour chaque architecture lorsque vous dissortingbuez l’application. Le processus de déploiement devient donc un peu plus complexe si vous ne souhaitez pas que votre taille de l’APK augmente de manière significative.

Encore une fois, bien que rien ne vous empêche de faire ce que vous choisissez, cela montre pourquoi Google décrit Java comme la méthode “préférée” pour la majorité de votre code et le chemin de moindre résistance. J’espère que cela permet de comprendre pourquoi la documentation est libellée telle quelle.

Si vous ne développez qu’une application dans votre vie, utilisez le NDK.

Si vous souhaitez apprendre le développement Android avec l’intention de développer plusieurs applications au cours de votre vie – et que vous souhaitez pouvoir les prendre en charge de manière appropriée – vous aurez probablement de meilleurs résultats à long terme si vous apprenez Java et utilisez plutôt le SDK Java d’Android.

Les programmeurs chez King utilisent C ++ pour leur logique de jeu. Et ils semblent bien se débrouiller à en juger par leur chiffre d’affaires.

D’après mon expérience, C ++ est destiné aux résolveurs de problèmes et Java est destiné à éviter les problèmes. J’aime les deux langues, mais C ++ est très gratifiant lorsque vous écrivez un bon code. Cependant, cela peut prendre plusieurs moments de magie pour y arriver.

Vous pouvez également recommander les scientifiques de C ++ for Data, qui devraient normalement faire leur travail, disons, par Python ou R. C ++ peut faire la même chose avec de bonnes ou moins bonnes performances, mais il suffit d’être un génie du langage. C’est pourquoi je ne recommanderais jamais C ++ à celui qui veut le faire – je me contenterais de donner une idée de la situation dans laquelle ils se trouvent.

J’ai trouvé cet article intéressant de: http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/

C ++ a été conçu spécifiquement pour l’indépendance de la plate-forme et se trouve en tant que tel sur chaque système d’exploitation existant. Votre utilisateur mobile typique peut savoir que les applications Android sont des applications Java et iOS écrites en Objective-C, mais beaucoup ignorent qu’il y a plus de code C / C ++ en mémoire sur vos périphériques qu’autre chose. C / C ++ pilote une grande partie de la technologie des petits périphériques (tels que le kernel, qui interagit avec le matériel, ainsi que les bibliothèques d’exécution typiques) et les réseaux de télécommunication qui activent ces périphériques. Plus important encore, pour une équipe de développement, il existe des interfaces C / C ++ et des bibliothèques pour tout ce que vous devez faire sur n’importe quel périphérique et plate-forme. Le jeu d’outils Android NDK est un excellent exemple du support C / C ++ complet qui a été ajouté à l’origine aux équipes de développement de jeux pour leur permettre d’obtenir les meilleures performances possibles en évitant Java et le runtime Android Java Dalvik, la machine virtuelle sur laquelle Le code Java Android est exécuté. Il a été régulièrement amélioré pour permettre à tous les services Android.

L’intention générale pour Java et Android est que vous écrivez la majorité sinon toute votre application en Java et n’utilisiez les éléments natifs que lorsqu’il n’y a pas d’autre option … donc tout ce qui concerne l’écriture de l’application se prête à Java.

Vous vous épargnerez beaucoup de difficultés en reliant les mondes natif et Java en écrivant en Java.

De plus, vous vous ferez une grande faveur si vous franchissez le pas et apprenez Java. Non seulement votre application Android sera-t-elle la meilleure, mais vous vous exposerez à une approche différente de l’OO et vous serez un meilleur programmeur.

Ajoutez à cela le fait que vous éviterez tout un tas de risques de sécurité en écrivant en Java.

Dans mon esprit, ceci est une évidence – utilisez Java.

Je ne vois aucune raison de ne pas utiliser C ++ pour le développement normal d’Android. Si vous avez une grande expérience du C ++ et des systèmes d’exploitation complexes comme Windows ou tout autre, vous pouvez rapidement saisir Android et ce n’est pas aussi compliqué que le d’autres OS sont. tout en apprenant le java ou en travaillant sans apprendre cela serait plus frustrant et complexe!

Je dirais utiliser java pour l’application principale. Mais si vous avez besoin de code c ++ à mettre en place ou de bibliothèque dont vous avez besoin qui soit efficacement implémentée en c ++, utilisez alors ndk pour ces bits