Différences Android (Dalvik + Java vs Old School C ++)

8

Développer sur Android va être différent pour moi, après avoir passé les 10 dernières années à coder des jeux en C ++. Quelles sont les principales différences / pièges / goulots d'étranglement à développer pour Android? Ma grande inquiétude est de passer à Java, que vais-je manquer le plus?

Pour être plus clair: que manquerais-je si je codais le tout en Java par rapport à la façon dont je code normalement C ++ pour les consoles?

Richard Fabian
la source
Le titre pourrait être un peu mieux. Pour être clair, demandez-vous "Quelle est la différence entre C ++ et Java sur le téléphone Android?"
Jesse Dorsey
6
Je pense que si vous utilisez le NDK ( developer.android.com/sdk/ndk/index.html ), vous pouvez écrire la plupart de votre code en C ++.
Chris Howe

Réponses:

6

La principale chose que vous manqueriez probablement serait la gestion explicite de la mémoire. Du côté positif, Java a des informations de type d'exécution et de vrais génériques. Voir également: http://developer.android.com/guide/practices/design/performance.html pour quelques conseils de Google sur la façon de garder votre code Java efficace.

Raymond Chen a récemment évoqué la collecte des ordures et la gestion de la mémoire dans le CLR et ses articles de blog sont excellents pour comprendre comment cela fonctionne. (Je sais que les liens suivants sont pour le CLR, mais ils sont toujours pertinents pour le développement Java). Voir en particulier: http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx et http://blogs.msdn.com/b/oldnewthing/archive/2010/08/10 /10048150.aspx

Cela étant dit, il n'y a pas beaucoup de différence entre Java et C ++, et comme Chris l'a souligné, vous pouvez coder en C / C ++ sur Android à l'aide du NDK.

brett
la source
merci, "vous pouvez coder en C / C ++ sur Android en utilisant le NDK", ouais j'apprécie cela, mais pourquoi s'en tenir à de vieux pistolets tout le temps si quelque chose se révèle réellement meilleur / plus rapide.
Richard Fabian
2
Oh, je vois où tu veux en venir. Java a l'avantage d'avoir une bibliothèque standard massive et une bibliothèque extrêmement compétente pour traiter avec XML. La plate-forme Android étend la bibliothèque standard avec des bibliothèques pour tous les avantages matériels fantaisistes et certaines fonctionnalités supplémentaires côté utilisateur. Java prend également en charge la compilation / vérification incrémentielle des erreurs, de sorte que vous obtiendrez des commentaires sur les erreurs à peu près dès que vous les tapez. Honnêtement, vous ne devriez pas non plus craindre la performance. Ça ne va pas être aussi rapide que C sur du métal nu, mais c'est quand même assez rapide. Je dirais qu'il n'y a pas grand-chose à craindre.
brett
4

Chris Pruett de Google a parlé de l'écriture de jeux en temps réel pour Android dans Google I / O 2009 et à nouveau en 2010 . Il parle entre autres des performances Java sur Android. Il a également créé un jeu, Replica Island , en Java et vous pouvez télécharger le code source pour avoir une idée de l'apparence d'un jeu Java Android. Son blog sur le jeu contient également plusieurs articles perspicaces.

Les pièges typiques sont similaires à ceux de l'écriture dans d'autres langages récupérés , vous utilisez un pool d'objets et allouez des choses à l'avance pour éviter d'avoir le GC exécuté lorsque vous ne le souhaitez pas. Les méthodes sont virtuelles par défaut en Java et il est utile de les marquer comme finales lorsque vous n'avez pas besoin de les remplacer. Le plugin Android Eclipse est livré avec quelques outils pratiques pour vous aider à profiler votre application et à surveiller les allocations de tas.

Firas Assaad
la source
2

Vous vous inquiétez trop. L'API pour OpenGL dans Android, OpenGL-ES, a été délibérément conservée en C. Voir les spécifications OpenGL sur http://www.khronos.org/opengles/ pour plus de détails.

Il est même possible que vous ne manquiez pas grand-chose de C ++. De nombreux développeurs, même le célèbre auteur de programmation Bruce Eckel («Penser en C ++», «Penser en Java»), ont trouvé Java un langage beaucoup plus efficace pour la programmation orientée objet. En grande partie parce que les choses qu'ils ont «manquées» au début se sont avérées ne pas être si importantes après tout.

Cela dit, ce qui me manque le plus, c'est la possibilité de remplacer les opérateurs, pas seulement les méthodes. La syntaxe est vraiment plus maladroite lorsque vous devez définir / remplacer des méthodes au lieu d'opérateurs.

Considérons, par exemple, l'arithmétique des nombres complexes. Il est vraiment élégant en C ++. Ce n'est pas le cas en Java. Mais cela s'avère avoir un impact minimal sur la plupart des projets réels.

Certaines personnes se plaignent de l'incapacité de faire l'héritage multiple. Mais le type d'héritage multiple le plus utile est celui que Java fait avec l '«interface», donc vous ne devriez pas vraiment le manquer autant.

user1800
la source