¿Escribir aplicaciones en C o C ++ para Android?

Estoy tratando de desarrollar / portar un juego a Android, pero está en C, y Android admite Java, pero estoy seguro de que debe haber una manera de obtener una aplicación C allí, cualquiera sabe de un buen tutorial sobre el tema ?

¡Gracias!

Para cualquier persona que venga a esto a través de Google, tenga en cuenta que a partir de SDK 1.6 Android ahora tiene un SDK nativo oficial.

Puede descargar el Android NDK (Kit de desarrollo nativo) desde aquí: https://developer.android.com/ndk/downloads/index.html

También hay una publicación en el blog sobre el NDK:
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html

Android NDK es un conjunto de herramientas que le permite implementar partes de su aplicación en código nativo, usando lenguajes como C y C ++. Para ciertos tipos de aplicaciones, esto puede ayudarlo a reutilizar las bibliotecas de códigos escritas en esos idiomas.

Para obtener más información sobre cómo comenzar con el desarrollo nativo, siga este enlace .

Las aplicaciones de ejemplo se pueden encontrar aquí .

Normalmente, tienes que:

  1. Instalar Google Android NDK. Contiene libs, headers, makfile examples y gcc toolchain
  2. Crea un ejecutable desde tu código C para ARM, optimízalo y vincúlalo con las librerías proporcionadas si es necesario
  3. Conéctese a un teléfono usando la interfaz adb proporcionada y pruebe su ejecutable

Si estás buscando vender una aplicación:

  1. Crea una biblioteca desde tu código C
  2. Crea un código Java simple que usará esta biblioteca
  3. Incrustar esta biblioteca en el archivo del paquete de la aplicación
  4. Prueba tu aplicación
  5. Venderlo o distribuirlo gratis

Google lanzó un Kit de desarrollo nativo (NDK) (según http://www.youtube.com/watch?v=Z5whfaLH1-E a las 00:07:30).

Esperemos que la información se actualice en la página de grupos de google ( http://groups.google.com/group/android-ndk ), ya que dice que aún no se ha publicado.

No estoy seguro de dónde obtener una descarga simple, pero he escuchado que puede obtener una copia del NDK del repository Git de Google en la twig donut.

La posición oficial parece ser que esto no es algo que siempre “quieras hacer”. Mira este hilo en la lista de desarrolladores de Android. Google prevé que Android se ejecute en una variedad de dispositivos diferentes (CPU, pantallas, etc.). La mejor forma de habilitar el desarrollo es, por lo tanto, utilizar un código administrado (portátil) que se dirija a la VM Dalvik. Por este motivo, Android SDK no es compatible con C / C ++.

PERO, eche un vistazo a esta página :

Android incluye un conjunto de bibliotecas C / C ++ utilizadas por varios componentes del sistema Android. Estas capacidades están expuestas a los desarrolladores a través del marco de aplicaciones de Android.

El marco de la aplicación administrada parece estar superpuesto a estas bibliotecas. La página continúa para mostrar las librerías C / C ++: biblioteca C estándar, medios, 3D, SQL lite y otros.

Entonces, todo lo que necesita es una cadena de comstackción que compile C / C ++ con la CPU apropiada (ARM, en el caso del G1). Algunas instrucciones breves sobre cómo hacer esto están aquí .

Lo que no sé es dónde encontrar descripciones de las API que proporcionan estas bibliotecas. Supongo que puede haber archivos de encabezado enterrados en el SDK en alguna parte, pero la documentación puede ser incompleta o faltante. ¡Pero creo que se puede hacer!

Espero que sea útil. Para el registro, no he escrito ninguna aplicación nativa de Android, solo unas simples y administradas.

Andy

Puede usar nestedvm para traducir C (u otros lenguajes GCC) en bytecode de Java, y usar eso como la base de su puerto. Por ejemplo, vea el puerto Android de la colección de rompecabezas portátil Simon Tathams .

Espero que este método sea obsoleto por el NDK, pero podría no estarlo si algunas redes o algo así no permiten que las personas actualicen sus teléfonos.

Google ya lanzó Google I / O 2011: llevar juegos C y C ++ a la sesión de Android , que está disponible en http://www.youtube.com/watch?v=5yorhsSPFG4

lo cual es bueno para entender el uso de NDK para escribir aplicaciones en c y c ++ para android.

Si solo quiere cruzar comstackr cualquier juego nativo basado en consola y ejecutarlo en Android, este artículo ha mostrado 3 métodos para el mismo.

1: comstackción estática utilizando una cadena de herramientas independiente

2: comstackción cruzada utilizando la cadena de herramientas de Android NDK

3: comstackción cruzada usando el código fuente AOSP

Tal vez estás buscando esto?

http://www.mosync.com/

Es una capa intermedia para el desarrollo de varias plataformas móviles usando c ++.

Al ver esto, parece que es posible:

“El hecho es que solo el lenguaje Java es compatible no significa que no se puedan desarrollar aplicaciones en otros idiomas. Esto ha sido probado por muchos desarrolladores, hackers y expertos en desarrollo de aplicaciones para dispositivos móviles. Los chicos de Elements Interactive BV, la compañía detrás de Edgelib biblioteca, logró ejecutar aplicaciones C ++ nativas en la plataforma Android, incluso eso en este momento todavía hay muchos problemas en la pantalla y el sonido … etc. Esto incluye el juego S-Tris2 y una demostración de animación en 3D de Edgelib “.

Desde 2009 hay un desarrollo en este asunto.
Necessitas – Qt (framework C ++) para Android
Primeros pasos de video .

Eche un vistazo al grupo google ndk , parece prometedor, la primera versión del NDK estará disponible en 1H2009.

Actualización: Y es lanzado http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html

No estoy seguro de que el NDK proporcione una cobertura completa de la API oficial de Java.

Desde http://developer.android.com/sdk/ndk/index.html#overview :

Tenga en cuenta que el NDK no le permite desarrollar aplicaciones nativas. El tiempo de ejecución principal de Android sigue siendo la máquina virtual de Dalvik.

Puede descargar c4droid y luego instalar el complemento GCC e instalarlo en su SD. Desde el shell simplemente atravieso el directorio donde está el binario de GCC y luego lo llamo para hacer un ejecutable a bordo.

buscar / -name gcc

/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androidabi-gcc

cat> test.c

#include int main(){ printf("hello arm!\n"); return 0; } 

./arm-linux-androidabi-gcc test.c -o test

./prueba

hola arm!

Esta publicación de blog puede ser un buen comienzo: http://benno.id.au/blog/2007/11/13/android-native-apps Lamentablemente, muchas de las cosas importantes son “dejadas como ejercicio para el lector”.

No conozco un tutorial sino una buena herramienta de desarrollo: Airplay SDK de Ideaworks Labs. (Recientemente renombrado ” Marmelade “) Usando C / C ++ puedes construir aplicaciones para Windows Mobile, iPhones, Android. El único componente que no me gustó fue el compositor de la interfaz gráfica de usuario (GUI), uno con errores, pero siempre puedes sustituirlo con el Bloc de notas.

Estos tres pasos son buenos para tener y almacenar en esta publicación.

1) Cómo portar el código c nativo en android

2) http://www.integratingstuff.com/2010/12/12/calling-native-c-code-through-jni-in-android-applications/

3) http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/

Archivos Native C / c ++ libstdc ++. * De tu Ubuntu son binarios x86 (o x86_64) pero los dispositivos Android y los emuladores son ARM. Por supuesto, esto no funcionará de todos modos, incluso si configuras el soname correcto. Esta es una manera muy ingenua que no lleva a ninguna parte. Android tiene un soporte muy limitado de C ++ lo que significa que no hay excepciones, la biblioteca estándar de C ++ (que incluye STL) y RTTI. Si necesita dicha funcionalidad, use mi distribución NDK personalizada de

http://crystax.net/android/ndk.php : admite características completas de C ++ enumeradas anteriormente.

¿Por qué hay error? Referencia indefinida al error del enlace “__cxa_end_cleanup”. Android stlport

hora. Porque no hay un enlace a libstdc + +. A. Muy mal.

Debido a que usa una biblioteca estática, es necesario vincular el libstdc + + completo. Una lata

http://crystax.net/android/ndk.php aquí para descargar el paquete

directorio sources \ cxx-stl \ gnu-libstdc + + \ libs \ armeabi.

Android en sí mismo El soporte libstdc + + es limitado, debe estar vinculado a una libstdc + + completa. A el trabajo.

Agregar archivo en Android.mk LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \

  $ (LOCAL_PATH) / libs / liblua.a \ `$ (LOCAL_PATH) / libs / libstdc + +. A` 

Y se pueden comstackr LOCAL_CPPFLAGS + =-lstdc + +-fexceptions

Existe un plan para permitir bibliotecas C / C ++ en la próxima versión SDK de Android (¿Eclair codificado?) Hasta la fecha, no es posible a través del Android SDK Java. Sin embargo, puedes obtener el enorme proyecto de código abierto, hacer tus propias librerías y luego flashear tu propio dispositivo … pero cualquiera que quiera usar tu biblioteca también tendrá que flashear tu comstackción personalizada.

Respuesta corta: no puedes.

@ Backslash17: Mirando el artículo y el siguiente enlace con las instrucciones de instalación, todo lo que la compañía comenzó a trabajar es lanzar un ejecutable auto comstackdo en el emulador, sin pasar por el marco de android. Una vez que tenga el emulador, puede hacer telnet y tener un shell de Linux. Ejecutar un progtwig de Linux es trivial, por supuesto. Pero eso no funciona para teléfonos sin jailbreak (también conocido como acceso raíz) y no se puede entregar en el mercado.

A menos que Google abra otras oportunidades o alguien escriba un comstackdor personalizado que comstack Language X en bytecode de Dalvik (Dalvik es la máquina virtual que ejecuta los progtwigs de Android) no podrá escribir código nativo.