Escribir aplicaciones en C o C++ para Android? [cerrado]


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

Gracias!

 271
Author: Robert Gould, 2009-06-16

20 answers

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.

Puedes descargar Android NDK (Native Development Kit) desde aquí: https://developer.android.com/ndk/downloads/index.html

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

 236
Author: Andy Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-29 05:26:39

El Android NDK es un conjunto de herramientas que te permite implementar partes de tu app en código nativo, utilizando lenguajes como C y C++. Para ciertos tipos de aplicaciones, esto puede ayudarlo a reutilizar bibliotecas de código 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í.

 40
Author: MannyNS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-11 13:16:55

Normalmente, tienes que:

  1. Instalar Google Android NDK. Se contiene libs, encabezados, makfile ejemplos y cadena de herramientas gcc
  2. Construye un ejecutable a partir de tu código C para ARM, optimizarlo y vincularlo con libs proporcionadas si es necesario
  3. Conectarse a un teléfono usando proporcionado adb interfaz y probar su ejecutable

Si está buscando vender una aplicación:

  1. Construye una biblioteca a partir de tu código C
  2. Crear código Java simple que usa esto biblioteca
  3. Incrustar esta biblioteca en la aplicación archivo de paquete
  4. Prueba tu app
  5. Venderlo o distribuirlo de forma gratuita
 17
Author: psihodelia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-06 16:47:49

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

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

No estoy seguro de dónde obtener una descarga simple para ello, pero he oído que se puede obtener una copia del NDK desde el repositorio Git de Google bajo la rama donut.

 14
Author: Marc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-18 15:03:56

La posición oficial parece ser que esto no es algo que nunca "querrías hacer". Ver 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, echa un vistazo a esta página:

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

El framework de aplicaciones administradas parece estar en capas encima de estas bibliotecas. La página continúa con una lista de las bibliotecas de C/C++: biblioteca estándar de C, media, 3D, SQL lite y otras.

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

Lo que no se es dónde encontrar descripciones de las API que proporcionan estas bibliotecas. Supongo que puede haber archivos de encabezado enterrados en el SDK en algún lugar, pero la documentación puede ser incompleta/falta. Pero creo que se puede hacer!

Espero que eso sea útil. Para que conste, no he escrito ninguna aplicación nativa de Android, solo algunas simples administradas.

Andy

 12
Author: Andy Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-16 15:45:15

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

Espero que este método sea obsoleto por el NDK, pero podría no estar en si algunas redes o algo no permiten a la gente actualizar sus teléfonos.

 8
Author: rjmunro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-27 23:25:36

Google ya ha lanzado Google I/O 2011: Trayendo Juegos de C y C++ a Android sesión 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 desea compilar cualquier juego nativo basado en consola y ejecutarlo en Android, entonces este artículo ha mostrado 3 métodos para el mismo.

1: Compilación estática usando standalone cadena de herramientas

2: Compilación cruzada usando la cadena de herramientas de Android NDK

3: Compilación cruzada usando el código fuente de AOSP

 8
Author: Jeegar Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-03 07:09:13

Tal vez usted está buscando esto?

Http://www.mosync.com/

Es una capa intermedia para desarrollar para varias plataformas móviles utilizando c++.

 7
Author: joepal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-11 23:22:10

Mirando esto parece que es posible:

"el hecho de que solo se soporte el lenguaje Java no significa que no pueda desarrollar aplicaciones en otros lenguajes. Esto ha sido demostrado por muchos desarrolladores, hackers y expertos en desarrollo de aplicaciones para móviles. Los chicos de Elements Interactive B. V., la compañía detrás de la biblioteca Edgelib, logró ejecutar aplicaciones nativas de C++ en la plataforma Android, incluso que en este momento todavía hay muchos problemas en la pantalla y el sonido etc etc. Esto incluye el juego S-Tris2 y una demostración de animación 3D de Edgelib."

 7
Author: backslash17,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-29 05:42:35

Desde 2009 hay un desarrollo en este asunto.
Necessitas - Qt (C++ framework) para Android
Introducción vídeo .

 6
Author: zkunov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-02 08:29:18

Echa un vistazo a google ndk group parece prometedor, la primera versión del NDK estará disponible en 1H2009.

Actualizar: Y se libera http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html

 5
Author: Gordon Freeman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-26 08:29:12

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 permitirle desarrollar solo nativo aplicación. Primaria de Android el tiempo de ejecución sigue siendo el Dalvik virtual equipo.

 5
Author: Android Eve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-20 02:35:17
 3
Author: Alexander Stolz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-26 13:28:14

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

Find / - 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.prueba c-o

./ test

Hola brazo!

 3
Author: elahtrebor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-19 16:12:55

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

 2
Author: Krzysiek Goj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-16 15:41:19

No conozco un tutorial pero una buena herramienta de desarrollo: Airplay SDK de Ideaworks Labs. (Recientemente renombrado "Marmelade") Usando C/C++ puede crear aplicaciones para Windows Mobile, iPhones, Android. El único componente que no me gustó fue el compositor GUI - uno con errores, pero siempre se puede sustituir con el Bloc de notas.

 2
Author: zergius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-01 23:04:48
 2
Author: YumYumYum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:31

Archivos nativos de C/c++ libstdc++.* desde su Ubuntu son x86 (o x86_64) binarios, pero los dispositivos Android y emuladores son ARM. Por supuesto, esto no va a funcionar de todos modos, incluso si va a establecer soname correcto. Este es un camino muy ingenuo 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++ (incluyendo STL) y RTTI. Si necesita dicha funcionalidad, use mi distribución NDK personalizada de

Http://crystax.net/android/ndk.php - es compatible con todas las funciones de C++ enumeradas anteriormente.

Why is there error: undefined reference to '__cxa_end_cleanup' link error. Android stlport

Tiempo. Porque no hay enlace a libstdc + +. A. Tan mal.

Debido a que utiliza alguna biblioteca estática, es necesario vincular el libstdc + +completo. A. Can

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

Sources \ cxx-stl \ gnu-libstdc + + \ libs \ armeabi directory.

Android por su cuenta, el soporte de libstdc + + es limitado, debe estar vinculado a un libstdc +completo +. Trabajo.

Añadir 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 + +-fexceptions se pueden compilar

 2
Author: ZhangXuelian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-05 04:02:15

Hay un plan para permitir bibliotecas de C / C++ en la próxima versión del SDK de Android (Nombre en clave Eclair?) Hasta la fecha, no es posible a través del Android Java SDK. Sin embargo, puede tomar el ENORME proyecto de código abierto, rodar sus propias bibliotecas y luego flashear su propio dispositivo...pero cualquiera que quiera usar su biblioteca tendrá que flashear su compilación personalizada también.

 1
Author: haseman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-17 19:49:57

Respuesta corta: No puedes.

@Backslash17: Mirando a través del artículo y el siguiente enlace con las instrucciones de instalación, todo lo que la empresa consiguió trabajar es lanzar un ejecutable autocompilado en el emulador, sin pasar por el marco de Android. Una vez que tenga el emulador puede telnet y tener un shell de linux. Ejecutar un programa linux allí 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 compile el lenguaje X en Dalvik bytecode (Dalvik es la máquina virtual que ejecuta programas Android) no podrá escribir código nativo.

 -7
Author: buster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-16 15:55:17