2014-05-10 16 views
7

Ho trovato che le app Xamarin funzionano su Mono runtinme su Android e le cose vengono passate a Dalvik. Ma quello che non riesco a capire è come è possibile che l'app sia in esecuzione in Mono, ma le app normali vengono eseguite in Dalvik. Cosa c'è di così diverso nell'app Mono che funziona in Mono e non in Dalvik.Mono per Android - Come funziona?

Come può Mono essere sullo stesso livello di Dalvik? Mono dovrebbe essere in qualche modo memorizzato nell'app che funziona a Dalvik, credo.

Per favore spiegami come è possibile e mi dispiace per la mia lingua scurrile.

Architecture

+2

Non so perché tanti downvotes e richieste di domande ravvicinate? Se la risposta è così ovvia, per favore rendila veloce –

+0

A causa della natura open source di Mono e Dalvik/Android, mentre Xamarin.Android non è open source, la tua domanda sui dettagli tecnici può solo portare a sospettare le tue intenzioni . Sei davvero curioso dei dettagli tecnici o hai intenzione di clonarlo da zero? SO è un luogo per lo scambio di conoscenze, ma non penso che sia un posto per il reverse engineering. A proposito, non ho ancora votato la tua domanda. –

risposta

8

Un'applicazione sviluppata dal Xamarin ha runtime mono cui prende con sé sul dispositivo. L'apk dell'app contiene .net codice intermedio, p-code, che ovviamente non è comprensibile Dalvik.

Gli sviluppatori di Xamarin.Android accedono alle varie funzionalità del sistema operativo chiamando le API .NET che conoscono (per l'accesso a basso livello) o utilizzando le classi esposte negli spazi dei nomi Android che fornisce un ponte alle API Java che sono esposti da Dalvik.

http://docs.xamarin.com/guides/android/under_the_hood/architecture/ questo è dove si possono trovare maggiori dettagli.

+0

OK, ho capito. Ma quando eseguo una normale app java viene eseguita in Dalvik. Qualcosa nell'app specifica in quale runtime verrà eseguito? Quello che non capisco è come Dalvik possa essere sullo stesso livello di Mono, quando Mono è contenuto nell'app –

+1

Quando hai app Android scritte in java, vengono compilate in bytecode. Vengono quindi convertiti da file di classe Java compatibili con JVM in file .dex e odex compatibili con Dalvik prima dell'installazione su un dispositivo. Ma qui ci sono app scritte in C#. Quindi c'è bisogno di qualcosa che possa gestire gli assembly C#, che ovviamente è mono. MFA (Mono per Android) che fornisce un runtime mono, può avvolgere le cose intorno e chiama giù al runtime Dalvik o addirittura può bypassare completamente Dalvik. Ciò che accadrà dipende dal codice. –

+2

Ora, Mono non è presente sui dispositivi Android per impostazione predefinita. Quindi, ci deve essere un modo in cui può essere fatto per essere messo ed eseguito sul dispositivo. Quindi, un pacchetto di applicazioni è un modo ovvio in cui possiamo ottenere questo risultato. E anche noi possiamo avere la riproduzione mono che a sua volta può eseguire la nostra app. Accetta la risposta se ti ha aiutato in qualche modo. –