web-dev-qa-db-fra.com

Pourquoi une application Android ne devrait-elle pas être écrite en C / C ++ parce que 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 Android. Je prévoyais d'écrire le C++ en utilisant le NDK (puisque j'ai plus d'expérience en C++ et que je le préfère à Java), mais je suis tombé sur le en suivant sur le page Android NDK :

vous ne devriez utiliser le NDK que s'il est essentiel pour 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, tant qu'elle convient à votre travail. Quelqu'un pourrait-il expliquer pourquoi il est si fortement déconseillé d'utiliser C/C++ pour le développement de 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 du moins le noyau, puis l'emballage en Java) était une option acceptable.

Quelques antécédents, je suis une majeure en informatique qui a suivi 3 cours de C++ (intro, intermédiaire, POO et je prends un cours de STL au printemps) et seulement 1 Java cours (intermédiaire) Pour cette raison, je suis plus à l'aise avec le C++ et le préfère à Java. Je suis tombé sur ce qui suit sur le page Android NDK :

L'utilisation de code natif sur Android n'entraîne généralement pas d'amélioration notable des performances, mais augmente toujours la complexité de votre application. En règle générale, vous ne devez utiliser le NDK que s'il 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 de votre choix ainsi que celle que vous connaissez bien
  • Je souhaiterais peut-être porter l'application sur une autre plate-forme mobile, telle que iOS, prenant en charge C++ mais pas Java.
  • Alors que Java est un langage de haut niveau et devrait donc accélérer le développement, j’ai le sentiment que le développement serait plus lent car je devrais tout réapprendre (étant donné que je n’ai suivi qu’un seul cours sur le langage)

Tout conseil serait grandement apprécié.

ps: beaucoup de réponses à ce sujet datent d'il y a quelques années et très peu de réponses de suivi mentionnant le NDK permettant le développement d'applications natives complètes sur Android 2.3 et plus récent.

79
Logan Besecker

Pense-y de cette façon. Vous avez la possibilité d’utiliser le SDK Java) pour créer une application pleinement opérationnelle qui tire parti de 100% des API disponibles pour les développeurs. Vous ne pouvez rien faire avec le NDK. le SDK (du point de vue de l’API), le NDK ne fournit que des performances supérieures.

Maintenant, regardez à l'envers. 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é. L’ensemble de la structure Android n’est pas accessible au niveau de la couche native; la plupart des API sont Java seulement. Cela ne veut pas dire que toutes les API VOUS n'est peut-être pas disponible dans le NDK, mais est loin d'être TOUS les API sont exposées.

Au-delà de cela, le NDK introduit un code spécifique à la plate-forme qui augmente la taille de votre distribution. Pour chaque architecture de périphérique que vous souhaitez prendre en charge, votre code natif doit être intégré dans des fichiers .so (un pour armv5, armv7 et x86), tous regroupés dans le même fichier APK. Cette duplication de code exécutable rend votre application 3 fois plus grande (c'est-à-dire un "gros binaire"), sauf si vous vous chargez de créer des APK distincts pour chaque architecture lors de la distribution de l'application. Ainsi, le processus de déploiement devient un peu plus laborieux si vous ne voulez pas que votre fichier APK grandisse de manière significative.

Encore une fois, alors que rien de tout cela ne vous empêche de faire ce que vous choisissez, cela indique pourquoi Google décrit Java comme méthode "préférée" pour la majorité de votre code et le chemin de moindre résistance. J'espère que cela explique pourquoi la documentation est libellée comme telle.

98
Devunwired

Si vous ne voulez développer qu'une seule application dans votre vie, utilisez le NDK.

Si vous souhaitez apprendre à développer Android avec l'intention de développer plus d'une application au cours de votre vie - et que vous souhaitez pouvoir les prendre en charge correctement - vous aurez très probablement de meilleurs résultats à long terme. exécutez-vous si vous apprenez Java et utilisez plutôt le SDK Java d'Android.

23
Isaac

Les programmeurs de King utilisent C++ pour leur logique de jeu. Et ils semblent bien se porter à leur chiffre d’affaires.

D'après mon expérience, C++ est destiné aux personnes qui résolvent des problèmes et Java est destiné aux personnes qui évitent les problèmes. J'adore les langages, mais C++ est très enrichissant lorsque vous écrivez un bon code. la magie pour y arriver.

Vous pouvez également recommander C++ aux scientifiques de données, qui effectueraient normalement leur travail avec, par exemple, Python ou R. C++ peut faire la même chose avec une performance aussi bonne ou non meilleure, mais cela suffit. C’est la raison pour laquelle je n’aurais jamais non recommandé C++ à celui qui veut le faire - je ne ferais que donner un aperçu de la gâterie dans laquelle ils se trouvent pour.

8
JAkerblom

Je dirais que utilisez Java pour l'application principale. Mais si vous avez du code c ++ dont vous avez besoin pour le portage ou une bibliothèque dont vous avez besoin et qui est efficacement implémenté en c ++, utilisez ndk pour ces bits

3
Dan

La considération la plus importante est que le code compilé Java) sera exécuté sur tous les appareils Android inchangé, alors que le code natif devra être compilé pour toutes les plates-formes cibles.

L'intention générale pour Java et Android est que vous écrivez la majorité sinon la totalité de votre application dans Java et utilisez les choses natives que quand il n'y a pas d'autre option ... donc, tout en écrivant l'application se prêtera à le faire en Java.

Vous vous épargnerez beaucoup d’aggravation en établissant un pont entre les mondes natif et Java en écrivant en Java.

De plus, vous vous rendrez un grand service si vous plongez dans le vent et apprenez Java. Non seulement votre application Android sera meilleure, mais vous vous exposerez à une approche sensiblement différente de OO et vous serez un meilleur programmeur. il.

Ajoutez à cela le fait que vous échapperez à de nombreux risques de sécurité en écrivant en Java.

Dans mon esprit, c'est une évidence: utilisez Java.

3
Lawrence Dol

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

C++ a été construit 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 Android les applications sont écrites Java et iOS dans Objective-C, mais ce que beaucoup ne savent pas, c’est qu'il y a plus Le code C/C++ en mémoire sur votre périphérique est plus que toute autre chose.Le C/C++ gère l'essentiel de la technologie des petits périphériques (comme le noyau, qui interagit avec le matériel, ainsi que des bibliothèques d'exécution typiques) et des réseaux de télécommunication qui les permettent. Le plus important pour une équipe de développement, c’est qu’il existe des interfaces et des bibliothèques C/C++ pour tout ce que vous devez faire sur tous les appareils et plates-formes. Le Android NDK est un excellent exemple de Support C/C++ ajouté à l'origine pour les équipes de développement de jeux afin de leur permettre d'optimiser les performances de l'appareil en évitant Java et le Android = Java runtime Dalvik, la machine virtuelle sur laquelle Android Java est exécuté. Le code est exécuté. Il a été régulièrement amélioré pour Android s ervice.

3
Moussa D.

Je ne vois aucune raison de ne pas utiliser C++ pour le développement normal Android, si vous avez une vaste expérience de travail en C++ et avec un système d’exploitation complexe tel que Windows ou tout autre, vous pouvez alors saisir = Android rapidement et n’est pas aussi compliqué que les autres systèmes d’exploitation. En même temps que l’apprentissage Java ou travailler sans le savoir serait plus frustrant et complexe!

2
shaarang