Actualizado (para mayor claridad y para reducir la ambigüedad):
Voy a empezar a jugar con las aplicaciones de Android. Estaba planeando escribir en C ++ usando el NDK (ya que tengo más experiencia en C ++ y lo prefiero a Java) pero encontré lo siguiente en la página de Android NDK :
solo debe usar el NDK si es esencial para su aplicación, nunca porque simplemente prefiera programar en C / C ++.
Tenía la impresión de que debería utilizar el idioma que prefiera, siempre que se adapte al trabajo. ¿Alguien podría explicar por qué se recomienda tanto no utilizar C / C ++ para el desarrollo de Android?
Original:
Voy a empezar a jugar con las aplicaciones móviles, específicamente Android, que es el sistema operativo de mi teléfono actual, y me preguntaba si escribir la aplicación en C ++ (o al menos el núcleo, luego envolver en Java) era una opción aceptable.
Algunos antecedentes, soy un estudiante de ciencias de la computación que ha tomado 3 cursos de C ++ (introducción, intermedio, OOP, y estoy tomando un curso STL en la primavera) y solo 1 curso de Java (intermedio). Debido a esto, me siento más cómodo con C ++ y lo prefiero a Java. Encontré lo siguiente en la página de Android NDK :
El uso de código nativo en Android generalmente no resulta en una mejora notable del rendimiento, pero siempre aumenta la complejidad de la aplicación. En general, solo debe usar el NDK si es esencial para su aplicación, nunca porque simplemente prefiera programar en C / C ++.
- Tenía la impresión de que debería utilizar el idioma que mejor se adapte al trabajo, así como uno con el que esté familiarizado.
- Es posible que desee portar la aplicación a otra plataforma móvil, como iOS, que admita C ++ pero no Java.
- Si bien Java es un lenguaje de alto nivel y, por lo tanto, debería acelerar el desarrollo, creo que el desarrollo sería más lento porque tendría que volver a aprender casi todo (ya que solo he tomado una clase sobre el lenguaje)
Cualquier consejo sería muy apreciado.
PD: muchas de las respuestas sobre este tema son de hace años y hay muy pocas respuestas de seguimiento que mencionen que el NDK permite el desarrollo de aplicaciones nativas completas en Android 2.3 y versiones posteriores.
Respuestas:
Piénsalo de esta manera. Tiene la capacidad de utilizar el SDK de Java para crear una aplicación de trabajo completa que aprovecha el 100% de las API disponibles para los desarrolladores. No hay nada que pueda hacer con el NDK que no se pueda hacer con el SDK (desde una perspectiva de API), el NDK solo proporciona un mayor rendimiento.
Ahora mírelo al revés. Si elige escribir una aplicación al 100% en el NDK, aún puede escribir una aplicación completamente funcional, pero está limitado en la cantidad de API de marco a las que puede acceder. No se puede acceder a todo el marco de Android en la capa nativa; la mayoría de las API son solo Java. Eso no quiere decir que todas las API que USTED pueda necesitar no estén disponibles en el NDK, pero no están expuestas ni cerca de TODAS las API.
Más allá de esto, el NDK introduce un código específico de la plataforma que expande el tamaño de su distribución. Para cada arquitectura de dispositivo que pretenda admitir, su código nativo debe estar integrado en archivos .so (uno para armv5, armv7 y x86) todos empaquetados en el mismo APK. Esta duplicación de código ejecutable hace que su aplicación triplique el tamaño (es decir, un "binario gordo") a menos que asuma la tarea de crear APK separados para cada arquitectura cuando distribuya la aplicación. Por lo tanto, el proceso de implementación se vuelve un poco más complicado si no desea que su APK aumente de tamaño significativamente.
Nuevamente, aunque nada de esto le prohíbe hacer lo que elija, señala por qué Google describe Java como el método "preferido" para la mayoría de su código y el camino de menor resistencia. Espero que arroje algo de luz sobre por qué la documentación está redactada como está.
fuente
.so
archivos? Soy consciente de que debe haber una compilación separada de código nativo para cada arquitectura de hardware compatible, por lo que cada.so
archivo tiene una compilación separada..so
para cada arquitectura que haya elegido admitir (esto está controlado por sus archivos MAKE), y todos los archivos se colocarán en el directorio libs / de su APK. Cuando se instala el APK, solo.so
se seleccionará el apropiado , pero todos deben vivir en el APK inicial.Si solo va a desarrollar una aplicación en su vida, use el NDK.
Si su objetivo es aprender el desarrollo de Android con la intención de desarrollar más de una aplicación durante su vida, y desea poder admitirlas todas adecuadamente, es muy probable que lo haga mejor a largo plazo si aprende Java y utilice el SDK de Java de Android en su lugar.
fuente
Los programadores de King usan C ++ para la lógica de su juego. Y parece que les va bien a juzgar por su volumen de ventas.
En mi experiencia, C ++ es para personas que resuelven problemas y Java es para quienes evitan problemas. Me encantan ambos lenguajes, pero C ++ es bastante gratificante cuando escribes un buen código. Sin embargo, puede que solo sean necesarios varios momentos de magia para llegar allí.
También podría recomendar C ++ para los científicos de datos, quienes normalmente harían su trabajo, por ejemplo, con Python o R. C ++ puede hacer lo mismo con un rendimiento igual de bueno o no mejor, pero solo se necesita ser un genio en el lenguaje. Es por eso que nunca había no recomiendo C ++ para el que quiere hacerlo - Yo sólo le daría una mano a mano con el tratamiento que se van a llevar.
fuente
Encontré este interesante artículo en: http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/
C ++ se creó específicamente para la independencia de la plataforma y, como tal, se encuentra en todos los sistemas operativos existentes. Su usuario móvil típico puede saber que las aplicaciones de Android están escritas en Java e iOS en Objective-C, pero lo que muchos no saben es que hay más código C / C ++ en la memoria de sus dispositivos que cualquier otra cosa. C / C ++ impulsa gran parte de la tecnología de los dispositivos pequeños (como el kernel, que interactúa con el hardware, así como las bibliotecas de tiempo de ejecución típicas) y las redes de telecomunicaciones que habilitan estos dispositivos. Más importante para un equipo de desarrollo, es que existen interfaces y bibliotecas C / C ++ para cualquier cosa que necesite hacer en cualquier dispositivo y plataforma. El conjunto de herramientas de Android NDK es un gran ejemplo de compatibilidad completa con C / C ++ que se agregó originalmente a los equipos de desarrollo de juegos para permitirles obtener el mejor rendimiento posible del dispositivo evitando Java y el tiempo de ejecución de Java de Android Dalvik, la máquina virtual en la que El código Java de Android se ejecuta en. Se ha mejorado periódicamente para habilitar todos los servicios de Android.
fuente
Yo diría que use java para la aplicación principal. Pero si tiene algún código c ++ que necesita portar o alguna biblioteca que necesita que esté implementada de manera eficiente en c ++, entonces use ndk para esos bits
fuente
No veo ninguna razón para no usar C ++ para el desarrollo normal de Android.Si tiene una amplia experiencia trabajando en C ++ y con sistemas operativos complejos como Windows o cualquier otro, entonces puede comprender Android rápidamente y no es tan complicado como el otros sistemas operativos son. mientras aprende Java o trabaja sin aprender, ¡sería más frustrante y complejo!
fuente
La consideración más importante es que el código Java compilado se ejecutará en todos los dispositivos Android sin cambios, mientras que el código nativo deberá compilarse para todas las plataformas de destino.
La intención general tanto para Java como para Android es que escriba la mayoría, si no toda, su aplicación en Java y use cosas nativas solo cuando no haya otra opción ... por lo que todo lo relacionado con la escritura de la aplicación se prestará para hacerlo en Java.
Te ahorrarás muchas molestias al hacer un puente entre los mundos nativo y Java escribiendo en Java.
Además, se hará un gran favor si se lanza y aprende Java. No solo su aplicación de Android será mejor, sino que se expondrá a un enfoque significativamente diferente de OO y será un mejor programador para ello.
Agregue a eso el hecho de que evitará una gran cantidad de riesgos de seguridad al escribir en Java.
En mi opinión, esto es una obviedad: use Java.
fuente