tutorial studio ndk español ejecutar cppdroid codigo c# c++ .net android-ndk

c# - studio - ejecutar codigo c en android



Ejecutando código C#desde la aplicación C++(Android NDK) gratis (3)

Ha sido bastante difícil encontrar información sobre cómo lograr esto de forma multiplataforma ...

Solo abordaré el tema de "escribir una vez, correr a todas partes".

Construyo y mantengo una biblioteca, compuesta por un único conjunto de fuentes, que se ejecuta en Windows, Linux, OS X, Windows Phone, Android e iOS. Para hacer eso, tuve que escribir todo en C / C ++ portátil y luego crear archivos DLL u objetos compartidos.

El proyecto usa interoperabilidad .Net para llamar al DLL, y Android usa JNI para llamar al objeto compartido. En iOS, se crea una biblioteca estática en lugar de un objeto compartido.

La DLL o el objeto compartido tiene algunas definiciones específicas de la plataforma. Por ejemplo, debe saber cómo obtener números aleatorios del sistema operativo subyacente. Entonces tendrá una función como:

bool GetRandomNumbers(unsigned char* ptr, size_t size) { #if defined(WIN32) || defined(WIN64) ... #elif defined(__linux___) || defined(linux) ... #elif defined(__ANDROID___) ... #endif }

Por lo tanto, mantenga su lógica de negocios principal portátil y en un archivo DLL u objeto compartido, #define donde debe abstraer las diferencias de plataforma, y ​​estará bien.

En la parte superior de la biblioteca portátil, debes superponer las funciones de la GUI específica de la plataforma.

Si intentas escribir esto en C # y luego lo usas en otras plataformas, solo te estarás causando problemas. La única forma de hacer la portabilidad con un solo conjunto de fuentes es usar C / C ++ portátil.

También he visto gente volver a implementar en todos los idiomas: C y Win32 para Windows, .Net para Windows, C para Linux, Cocoa para OS X, .Net para Windows Phone, Java para Android y CocoaTouch para iOS. Eso crea aproximadamente 6x del trabajo, y los comportamientos nunca son los mismos en todas las plataformas.

Tengo un motor de juegos C ++ que actualmente admite Windows, Linux y Android (NDK). Está construido sobre SDL y usa OpenGL para renderizar.

Una de las limitaciones de diseño de este motor de juego es que el costo de desarrollo debe ser de $ 0.00. Construir el motor sin costo alguno (aparte de las horas hombre), se me debe permitir redistribuir libremente el código del motor y los binarios. y los usuarios deberían poder vender juegos creados usando el motor sin restricciones.

En este momento, estoy usando un lenguaje de scripting interpretado muy lento para la lógica del juego; en realidad funciona bien para escribir código de pegamento y respuestas simples a eventos de UI, pero no mucho más.

Me gustaría reemplazar este sistema con una solución C #: haga que el usuario compile una biblioteca de clase C (DLL) que contenga su lógica de juego, y haga que el lado C ++ ''consuma'' esta DLL y llame a los enganches correspondientes.

Ha sido bastante difícil encontrar información sobre cómo lograr esto de forma multiplataforma. Cada plataforma tiene una forma diferente de hospedar los tiempos de ejecución necesarios. Además, la mayoría de los artículos que he encontrado sugieren el uso de marcos completos que proporcionan abstracciones de plataforma que ya están implementadas en mi motor.

¿Existe actualmente una forma de ejecutar código desde una DLL de C # desde una aplicación Android C ++ basada en NDK sin usar un SDK completamente diferente, y sin tener que desembolsar cientos de dólares por una licencia?

En particular, estoy mirando algunas de las recientes iniciativas de fuente abierta de Microsoft. ¿Hay algo que pueda usar?

EDITAR: para aclarar, Windows y Linux tienen formas bien documentadas de ejecutar el código .net ''de forma gratuita'': esta pregunta se refiere específicamente a llamar al código administrado desde una aplicación Android NDK SIN pagar tarifas de licencia a Xamarin u otro proveedor.


Un popular motor de scripts para juegos es Lua; podrías considerar usar eso, ya que es trivialmente fácil de vincular con C / C ++. Si usas LuaJIT, también es muy rápido en Android (y no mal en iOS).

Una alternativa a considerar es que si construyes tu motor personalizado encima de Cocos2d-X , no solo obtendrás Lua (o JavaScript) de forma gratuita como un motor de scripts conectado, sino que también obtendrás portabilidad para Windows (Win32 y Windows). 8.1 Universal), iOS, Mac y Linux, un IDE (!!) y una gran comunidad de apoyo.

O puede pasar mucho tiempo averiguando cómo integrar C # en su motor.


La respuesta simple es no , lo que estás buscando no existe actualmente. Tendrá que soltar / cambiar los requisitos para encontrar una solución.

Lo más cercano que sé es dot42 , que parece ser compatible con algunos de .net en Android recientemente se puso en github y el sitio principal apagado, pero no hay mención de licencia en el repositorio principal del compilador (he añadido un error para obtener eso actualizado ..)

No está claro si es compatible con la carga dinámica de C # .dll, ya que pretende compilar a DEX. (Pero puede ser gratis, dependiendo de lo que los desarrolladores publiquen como licencia ...)

Xamarin es la única alternativa viable que conozco, pero como saben, solo la edición inicial es gratuita.

Si lo que buscas es una mejor compatibilidad con scripts, soltaré los requisitos compilados y de C # y buscaré algo que funcione bien en Android. Lua es mi solución para este tipo de cosas, pero no lo he usado en Android antes ... y existen muchas otras opciones.