¿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?

Robert Gould
fuente
solo si liberas el teléfono AFAIK.
Cogsy
64
¿No es el jailbraking para iPhones?
Robert Gould
1
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
Robert Gould
44
DOOM para Android está escrito en Java code.google.com/p/doom-for-android/source/browse/#svn/trunk
Marco Mustapic

Respuestas:

247

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

Andy Johnson
fuente
55
OK, así que ahora ¿qué hay de C # y .Net -?)
Avi
44
No se puede ver el apoyo .net ocurriera alguna vez
vickirk
16
@Avi mono-android.net
Tomas Andrle
2
Consulte este enlace androidsnippets.wordpress.com/2012/08/30/…
KK_07k11A0585
2
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í .

MannyNS
fuente
1
o 2009, 2010, 2011, 2012 o 2013
Christopher Berman el
19

Normalmente, tienes que:

  1. Instala Google Android NDK. Contiene libs, encabezados, ejemplos de makfile y cadena de herramientas gcc
  2. Cree un ejecutable a partir de su código C para ARM, optimícelo y vincúlelo con las bibliotecas proporcionadas si es necesario
  3. Conéctese a un teléfono usando la interfaz adb proporcionada y pruebe su ejecutable

Si está buscando vender una aplicación:

  1. Construye una biblioteca a partir de tu código C
  2. Cree un código Java simple que usará esta biblioteca
  3. Incruste esta biblioteca en el archivo del paquete de la aplicación
  4. Prueba tu aplicación
  5. Véndelo o distribúyelo gratis
psihodelia
fuente
Soy nuevo en NDK y quiero ejecutar C lan en Android. ¿Tienes algún enlace de referencia?
Parag Chauhan
14

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.

Bagazo
fuente
12

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 :

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.

Andy

Andy Johnson
fuente
44
Votación a favor. El NDK parece ser un compilador oficial para el código nativo de Android ahora. Hacer esta respuesta obsoleta.
unixman83
8

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.

rjmunro
fuente
1
+1 para una alternativa al NDK, a pesar de que el NDK lo hace obsoleto.
tobsen
¿No es nestedvm compatible con más dispositivos?
charo
8

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

Jeegar Patel
fuente
7

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 ++.

joepal
fuente
2
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.
Zuzlx
7

Mirando esto parece que es posible:

"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 ".

barra invertida17
fuente
6

Desde 2009 hay un desarrollo en este asunto.
Necessitas - Qt (marco C ++) para Android Video de
inicio .

zkunov
fuente
Buen punto. Solo como una nota adicional, Necessitas usa el NDK de Android.
Jaime Ivan Cervantes
5

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 :

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.

Android Eve
fuente
2

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.

zergius
fuente
2

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

#include<stdio.h>
int main(){ 
 printf("hello arm!\n");
return 0;
}

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

./prueba

hola brazo!

elahtrebor
fuente
2

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 \

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

Y LOCAL_CPPFLAGS + =-lstdc + +-fexceptionspuede ser compilado

ZhangXuelian
fuente
1

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.

haseman
fuente
-7

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.

destructor
fuente
Bien, por eso escribí "Parece ...". Mira para creer!
barra invertida17