2011-12-06 13 views
9

Actualmente estoy usando Monodroid para desarrollar una aplicación de Android. Soy bastante nuevo en aplicaciones de teléfono, así que estoy confundido sobre un par de cosas:Biblioteca de C# .dll en la aplicación de Android

  1. ¿Qué es, por definición, una biblioteca de Android? Utilizo la plantilla Mono para crear la biblioteca de Android: Crear un Mono para Android Class Library => escribir el código y compilarlo en .dll => ejecutar con emulator desde Visual Studio y funciona bien en el emulador. ¿Pero el archivo .dll es una biblioteca de Android? ¿O es convertido por Mono antes de trabajar en el emulador y la biblioteca de Android 'REAL' debería ser JAR?

  2. ¿Puedo utilizar directamente mi .dll escrito escrito en C# para hacer esta aplicación? Lo intenté en Mono al hacer referencia directamente en mi aplicación de Android y está compilando, sin errores. Pero cuando el emulador ejecuta esta aplicación, queda trabada (todavía no hay error): ¿cuál es la forma correcta de usar C# .dll en el proyecto de la aplicación Android?

Soy consciente de que hay bastantes par de una serie de temas discutiendo el enlace entre C# y androide y sobre mono pero después de leer todavía no puede moverse con esta biblioteca de referencia problema por lo que si alguien pudiera ofrecer cualquier sugerencia/pensamientos serían más apreciado

Respuesta

3
  1. La DLL generada se compila en el Mono for Android profile, que se basa en Moonlight (implementación de Mono de Silverlight). En tiempo de ejecución, el código .NET se ejecuta directamente contra el tiempo de ejecución Mono que se ejecuta como part of your application. Cuando el código .NET subclasifica algo del lado de Java (por ejemplo, Java.Lang.Object), Mono para Android genera callable wrappers para gestionar la comunicación entre los tiempos de ejecución.
  2. Técnicamente puede usar una DLL .NET normal en su aplicación Mono para Android, pero yo no lo recomendaría. El perfil expuesto por Mono para Android es mucho más pequeño que el del .NET Framework completo (y ni siquiera es completamente equivalente al de Silverlight), por lo que si su DLL hace referencia a un método que no se encuentra en Mono para Android, su la aplicación se bloqueará. En su lugar, recomendaría crear una biblioteca de clases separada para su aplicación, y compartir archivos fuente en proyectos mediante el enlace de archivos. Mi blog post here contiene un ejemplo de cómo hacerlo.
+0

¡Gracias por su respuesta aquí! Entonces, dado que el código .NET se ejecuta contra el tiempo de ejecución Mono, ¿eso significa que el dll solo se puede usar para la aplicación de Android, siempre que tenga instalado el SDK de Monodroid? Debido a que mi objetivo principal no es la aplicación, sino portar una biblioteca de C# a la biblioteca de Android y proporcionarlos a los desarrolladores de Android ... en ese caso, eso significa que incluso si logré que el dll sea compatible con Android, todavía requieren que Monodroid haga lo envoltura de tiempo de ejecución? – lynnyilu

+0

Correcto: una DLL compilada con Mono para Android solo será útil para las aplicaciones creadas con Mono para Android. –

+0

Si desea ofrecer una biblioteca a los desarrolladores, entonces debe tener un dll compilado para esa plataforma. Siempre que solo use las clases admitidas, puede admitir múltiples plataformas. En teoría ** Math.Round ** funcionará exactamente igual en todas las plataformas. Esto supone que la implementación de Mono coincide con la implementación de Microsoft .NET para todas las entradas (probablemente las pruebas porque hicieron pruebas de unidades en ella). –

Cuestiones relacionadas