¿Es importante conocer C / C ++ para el desarrollo de Android?

8

¿Es posible usar solo Java (sin C ++ / NDK) para crear aplicaciones de Android buenas, rápidas y hermosas (incluido el desarrollo 3D)?

Cuando busco los requisitos de posición de desarrollador de Android (vacantes), veo que el conocimiento de C / C ++ / NDK es muy importante. Algunas compañías incluso requieren construir sus tareas de prueba usando solo C ++ (OpenGL).

Mi título
fuente
¿Por qué querrías no saber algo? Como al menos es útil , será mejor que pases un par de días y lo aprendas.
SK-logic
¿Alguna vez has tratado de usar OpenGL en Java? Es un verdadero dolor de hacer.
Sulthan

Respuestas:

6

En la mayoría de los casos, no necesita c / c ++ para desarrollar para Android.

Según la descripción general de Android NDK

II No objetivos de Android NDK:

El NDK no es una buena manera de escribir código nativo genérico que se ejecute en dispositivos Android. En particular, sus aplicaciones deben estar escritas en el lenguaje de programación Java, manejar los eventos del sistema Android de manera apropiada para evitar el cuadro de diálogo "La aplicación no responde" o lidiar con el ciclo de vida de la aplicación Android.

sin embargo, c / c ++ es importante si desea utilizar las bibliotecas de c / c ++ existentes.

Ejemplo: Android no tiene un codificador de mp3 incorporado, pero puede usar la biblioteca de código abierto .

Lo mismo podría aplicarse al procesamiento de imágenes en 3D

k3b
fuente
44
Esa es solo la exageración de Google: todos los juegos rápidos y elegantes que tengo en mi teléfono están construidos con el NDK: búscalo tú mismo, obtén Addons Detector (originalmente para mostrar redes publicitarias poco fiables) y mira la sección del kit de herramientas para desarrolladores. Verás que todo lo bueno está construido con el NDK. Ahora, si eso es porque Java apesta o porque todos los mejores desarrolladores usan C / C ++ es discutible.
gbjbaanb
2
@gbjbaanb: los juegos son algo así como un caso especial (tanto en el escritorio como en las plataformas móviles). Por supuesto, en las plataformas móviles son un caso especial más extendido ;-)
Joachim Sauer
@gbjbaanb: es interesante saber que la mayoría de los juegos rápidos se desarrollan en c / c ++. ¿Son estos juegos multiplataforma? (es decir, ¿existe para Android y iPhone?)
k3b
1
El único lenguaje que permite escribir aplicaciones portátiles sigue siendo C ++. Eso es simplemente un hecho. Algunas plataformas móviles tienen Java, algunas tienen CLR, pero ninguna está razonablemente disponible en todas. Por lo tanto, cualquier aplicación compleja tendrá un núcleo C ++. Además, puede tener Java UI para Android.
Jan Hudec
3

Hay muchas aplicaciones en Java. El desarrollo en Java es más rápido y los dispositivos son tan potentes en estos días que la eficiencia no importa cuando la aplicación es principalmente una interfaz de usuario genial para algunos datos extraídos de la red. Cuál es la mayoría de las aplicaciones disponibles. Por lo tanto, ciertamente puede obtener un trabajo en el desarrollo de aplicaciones de Android incluso sin el conocimiento de C ++.

Sin embargo, existen varias razones muy buenas para elegir C ++ para aplicaciones más complejas:

  1. Hasta el día de hoy, C ++ sigue siendo el único lenguaje portátil para todas las plataformas. Algunas plataformas móviles tienen Java, algunas tienen CLI / CLR (.NET), pero ninguna está disponible en todas ellas. Escribir aplicaciones portátiles en C ++ es mucho trabajo, pero es factible y probado por muchos ejemplos.
  2. Java tiene ineficiencia de memoria integrada en el lenguaje. Si observa varias comparaciones, una tarea similar generalmente requiere de 3 a 10 veces más memoria en Java que en C ++. Entonces, si está haciendo algo que necesita muchos datos en la memoria, Java no sería una buena opción (tenga en cuenta que la situación es mucho mejor con CLI / CLR).
  3. Dalvik, la JVM en Android, está bastante por detrás de las mejores JVM como HotSpot. Entonces, si está haciendo algo que realmente necesita potencia informática en bruto, Java no es una buena opción en Android. Sin embargo, hay muy pocas aplicaciones que realmente necesiten tanta potencia. La mayoría de las aplicaciones simplemente se sientan allí y giran sus pulgares el 99% del tiempo esperando que el usuario haga clic en algo y para ese tipo de aplicaciones Java está bien (para la mayoría de ellos, incluso Python estaría bien).

Creo que la primera razón es, con mucho, la más importante.

Jan Hudec
fuente
1
Corrígeme si me equivoco, pero ¿ni siquiera las aplicaciones NDK tienen que compilarse en Dalvik para ejecutarse en dispositivos Android?
Michael K
@MichaelK: Bueno, sí y no. El código nativo es código de máquina nativo, no Dalvik. Pero necesita un poco de pegamento Java y Dalvik se carga y ejecuta ese pegamento (y la parte nativa se carga como biblioteca compartida). El último NDK redujo mucho la necesidad del pegamento, pero no estoy seguro de si completamente.
Jan Hudec
2

Depende de cuán 'nativas' se espera que vayan tus aplicaciones. Parece que, por ahora, muchas aplicaciones deben ser nativas para proporcionar la Ux / UI completa que exigen los usuarios finales. ¿La abstracción de API basada en HTML5 y Java será lo suficientemente buena como para no necesitar que esto avance? Quién sabe :-)

Martijn Verburg
fuente
1

Funciona perfectamente cuando se modifica el código C / C ++, pero cuando se modifica el código Java no se reconstruye automáticamente. Las modificaciones de Java no se envían al emulador o dispositivo.

Brian Parker
fuente