¿Escribir aplicaciones en C o C ++ para Android? [cerrado]
286
Estoy tratando de desarrollar / portar un juego para Android, pero está en C y Android es compatible con Java, pero estoy seguro de que debe haber una forma de obtener una aplicación de C allí, ¿alguien sabe de una manera de lograr esto?
El G1 no permite el acceso a la raíz de forma predeterminada, y existen muchas restricciones con respecto a lo que se puede ejecutar fuera del entorno 'Android'. No tendría muchas esperanzas de encontrar una forma de ejecutar código nativo desde Android.
Cogsy
2
pero descargué DOOM para Android del mercado. Por lo tanto, debería ser factible
para el código .net / c # y Android consulte xamarin
bbqchickenrobot
41
El NDK de Android es un conjunto de herramientas que le permite implementar partes de su aplicación en código nativo, utilizando lenguajes como C y C ++. Para ciertos tipos de aplicaciones, esto puede ayudarlo a reutilizar 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 muestra se pueden encontrar aquí .
No estoy seguro de dónde obtener una descarga simple, pero he oído que puede obtener una copia del NDK del repositorio Git de Google debajo de la rama de donas.
La posición oficial parece ser que esto no es algo que "quieras hacer". Vea este hilo en la lista de desarrolladores de Android. Google prevé que Android se ejecute en una variedad de dispositivos diferentes (CPU, pantallas, etc.). Por lo tanto, la mejor manera de habilitar el desarrollo es usar código administrado (portátil) que se dirija a la máquina virtual Dalvik. Por esta razón, el SDK de Android no es compatible con C / C ++.
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 aplicación de Android.
El marco de la aplicación administrada parece estar en capas sobre estas bibliotecas. La página continúa para enumerar las bibliotecas C / C ++: biblioteca C estándar, medios, 3D, SQL lite y otros.
Entonces, todo lo que necesita es una cadena de compilación que compile C / C ++ en la CPU apropiada (ARM, en el caso del G1). Algunas breves instrucciones 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 / 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 pocas administradas simples.
lo cual es bueno entender el uso de NDK para escribir aplicaciones en cyc ++ para Android.
Si solo desea realizar una compilación cruzada de cualquier juego nativo basado en consola y ejecutarlo en Android, entonces este artículo muestra 3 métodos para lo mismo.
1: compilación estática con una cadena de herramientas independiente
2: compilación cruzada utilizando la cadena de herramientas de Android NDK
3: compilación cruzada utilizando el código fuente AOSP
el enlace es 404 no encontrado. Siempre es una buena idea incluir contenido de la publicación original en la respuesta en caso de que el propietario del sitio gane la lotería, se divorcie de su esposa y se mude a Bahamas.
"el hecho de que solo el lenguaje Java sea compatible no significa que no se puedan desarrollar aplicaciones en otros idiomas. Esto ha sido demostrado 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 nativas de C ++ en la plataforma Android, incluso en este momento todavía hay muchos problemas de visualización y sonido ... etc. Esto incluye el juego S-Tris2 y una demostración de animación en 3D de Edgelib ".
Tenga en cuenta que el NDK no le permite desarrollar aplicaciones solo nativas. El tiempo de ejecución principal de Android sigue siendo la máquina virtual Dalvik.
No conozco un tutorial pero es una buena herramienta de desarrollo: Airplay SDK de Ideaworks Labs. (Recientemente renombrado " Marmelade ") Usando C / C ++ puedes crear aplicaciones para Windows Mobile, iPhones, Android. El único componente que no me gustó fue el compositor GUI, uno defectuoso, pero siempre puedes sustituirlo por el Bloc de notas.
Puede descargar c4droid y luego instalar el complemento GCC e instalarlo en su SD. Desde el shell, solo recorro el directorio donde está el binario GCC y luego lo llamo para hacer un ejecutable a bordo.
Los archivos nativos C / c ++ libstdc ++. * De su Ubuntu son binarios x86 (o x86_64) pero los dispositivos y emuladores de Android son ARM. Por supuesto, esto no funcionará de todos modos, incluso si configura 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, biblioteca estándar de C ++ (incluido STL) y RTTI. Si necesita dicha funcionalidad, use mi distribución NDK personalizada de
Existe un plan para permitir bibliotecas C / C ++ en la próxima versión de Android SDK (¿Coclame Eclair?) Hasta la fecha, no es posible a través del SDK de Java para Android. Sin embargo, puede tomar el proyecto de código abierto ENORME, rodar sus propias bibliotecas y luego flashear su propio dispositivo ... pero cualquiera que quiera usar su biblioteca también tendrá que flashear su compilación personalizada.
@ Backslash17: al leer el artículo y el siguiente enlace con las instrucciones de instalación, todo lo que la empresa comenzó a trabajar es lanzar un ejecutable autocompilado en el emulador, sin pasar por el marco de Android. Una vez que tenga el emulador, puede ingresar a Telnet y tener un shell de Linux. Ejecutar un programa de Linux es trivial, por supuesto. Pero eso no funciona para teléfonos sin jailbreak (también conocido como acceso root) y no se puede entregar en el mercado.
A menos que Google abra otras oportunidades o alguien escriba un compilador personalizado que compila Language X en el código de bytes de Dalvik (Dalvik es la máquina virtual que ejecuta programas de Android), no podrá escribir código nativo.
Respuestas:
Para cualquiera 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 (Native Development Kit) desde aquí: https://developer.android.com/ndk/downloads/index.html
También hay una publicación de blog sobre el NDK:
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html
fuente
El NDK de Android es un conjunto de herramientas que le permite implementar partes de su aplicación en código nativo, utilizando lenguajes como C y C ++. Para ciertos tipos de aplicaciones, esto puede ayudarlo a reutilizar 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 muestra se pueden encontrar aquí .
fuente
Normalmente, tienes que:
Si está buscando vender una aplicación:
fuente
Google ha lanzado un Kit de desarrollo nativo (NDK) (de acuerdo con 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 oído que puede obtener una copia del NDK del repositorio Git de Google debajo de la rama de donas.
fuente
La posición oficial parece ser que esto no es algo que "quieras hacer". Vea este hilo en la lista de desarrolladores de Android. Google prevé que Android se ejecute en una variedad de dispositivos diferentes (CPU, pantallas, etc.). Por lo tanto, la mejor manera de habilitar el desarrollo es usar código administrado (portátil) que se dirija a la máquina virtual Dalvik. Por esta razón, el SDK de Android no es compatible con C / C ++.
PERO, eche un vistazo a esta página :
El marco de la aplicación administrada parece estar en capas sobre estas bibliotecas. La página continúa para enumerar las bibliotecas C / C ++: biblioteca C estándar, medios, 3D, SQL lite y otros.
Entonces, todo lo que necesita es una cadena de compilación que compile C / C ++ en la CPU apropiada (ARM, en el caso del G1). Algunas breves instrucciones 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 / 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 pocas administradas simples.
Andy
fuente
Puede usar nestedvm para traducir C (u otros lenguajes GCC) al código de bytes de Java, y usarlo como base de su puerto. Por ejemplo, vea el puerto de Android de la colección de rompecabezas portátil Simon Tathams .
Espero que este método quede obsoleto por el NDK, pero podría no estarlo si algunas redes o algo no permiten a las personas actualizar sus teléfonos.
fuente
Google ya lanzó Google I / O 2011: trae los 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 entender el uso de NDK para escribir aplicaciones en cyc ++ para Android.
Si solo desea realizar una compilación cruzada de cualquier juego nativo basado en consola y ejecutarlo en Android, entonces este artículo muestra 3 métodos para lo mismo.
1: compilación estática con una cadena de herramientas independiente
2: compilación cruzada utilizando la cadena de herramientas de Android NDK
3: compilación cruzada utilizando el código fuente AOSP
fuente
Tal vez estás buscando esto?
http://www.mosync.com/
Es una capa intermedia para el desarrollo de varias plataformas móviles que usan c ++.
fuente
Mirando esto parece que es posible:
fuente
Desde 2009 hay un desarrollo en este asunto.
Necessitas - Qt (marco C ++) para Android Video de
inicio .
fuente
Echa un vistazo a google ndk group , parece prometedor, la primera versión del NDK estará disponible en el 1S2009.
Actualización: Y se publica http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html
fuente
No estoy seguro de que el NDK proporcione una cobertura completa de la API oficial de Java.
De http://developer.android.com/sdk/ndk/index.html#overview :
fuente
Google acaba de lanzar el NDK que permite exactamente eso.
http://feedproxy.google.com/~r/blogspot/hsDu/~3/2foWz7hwFtE/introducing-android-15-ndk-release-1.html
Se puede encontrar aquí: http://developer.android.com/sdk/ndk/1.5_r1/index.html
fuente
Esta publicación de blog puede ser un buen comienzo: http://benno.id.au/blog/2007/11/13/android-native-apps Desafortunadamente, muchas de las cosas importantes "se dejan como un ejercicio para el lector".
fuente
No conozco un tutorial pero es una buena herramienta de desarrollo: Airplay SDK de Ideaworks Labs. (Recientemente renombrado " Marmelade ") Usando C / C ++ puedes crear aplicaciones para Windows Mobile, iPhones, Android. El único componente que no me gustó fue el compositor GUI, uno defectuoso, pero siempre puedes sustituirlo por el Bloc de notas.
fuente
Puede descargar c4droid y luego instalar el complemento GCC e instalarlo en su SD. Desde el shell, solo recorro el directorio donde está el binario GCC y luego lo llamo para hacer un ejecutable a bordo.
encontrar / -name gcc
/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androideabi-gcc
cat> test.c
./arm-linux-androideabi-gcc test.c -o test
./prueba
hola brazo!
fuente
Estos tres pasos son buenos para tener y almacenar en esta publicación.
1) Cómo portar 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/
fuente
Los archivos nativos C / c ++ libstdc ++. * De su Ubuntu son binarios x86 (o x86_64) pero los dispositivos y emuladores de Android son ARM. Por supuesto, esto no funcionará de todos modos, incluso si configura 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, biblioteca estándar de C ++ (incluido STL) y RTTI. Si necesita dicha funcionalidad, use mi distribución NDK personalizada de
http://crystax.net/android/ndk.php : admite todas las funciones de C ++ enumeradas anteriormente.
¿Por qué hay un error? Referencia indefinida al error de enlace '__cxa_end_cleanup'. Android stlport
hora. Porque no hay un enlace a libstdc + +. A. Muy mal.
Debido a que utiliza alguna biblioteca estática, es necesario vincular el libstdc + + completo. Una lata
http://crystax.net/android/ndk.php aquí para descargar el paquete
fuentes \ cxx-stl \ gnu-libstdc + + \ libs \ armeabi directorio.
Android en su propio soporte libstdc + + es limitado, debe estar vinculado a un completo libstdc + +. A el trabajo.
Agregar archivo en Android.mk
LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \
Y
LOCAL_CPPFLAGS + =-lstdc + +-fexceptions
puede ser compiladofuente
Existe un plan para permitir bibliotecas C / C ++ en la próxima versión de Android SDK (¿Coclame Eclair?) Hasta la fecha, no es posible a través del SDK de Java para Android. Sin embargo, puede tomar el proyecto de código abierto ENORME, rodar sus propias bibliotecas y luego flashear su propio dispositivo ... pero cualquiera que quiera usar su biblioteca también tendrá que flashear su compilación personalizada.
fuente
Respuesta corta: no puedes.
@ Backslash17: al leer el artículo y el siguiente enlace con las instrucciones de instalación, todo lo que la empresa comenzó a trabajar es lanzar un ejecutable autocompilado en el emulador, sin pasar por el marco de Android. Una vez que tenga el emulador, puede ingresar a Telnet y tener un shell de Linux. Ejecutar un programa de Linux es trivial, por supuesto. Pero eso no funciona para teléfonos sin jailbreak (también conocido como acceso root) y no se puede entregar en el mercado.
A menos que Google abra otras oportunidades o alguien escriba un compilador personalizado que compila Language X en el código de bytes de Dalvik (Dalvik es la máquina virtual que ejecuta programas de Android), no podrá escribir código nativo.
fuente