I’m trying to understand how mono for android works and I’m not found this explanation in official site.
Taking into account that android reads java bytecode, Mono for Android is a framework that need to be installed on android devices or is a compiler that compiles to java byte code?
This article on Xamarin’s site describes how the architecture is put together.
Long story short, there is nothing compiling C# into Java byte code. Mono for Android applications ship with the Mono runtime embedded in them, which runs side by side with Dalvik (Android’s Java virtual machine). The Mono runtime uses callable wrappers in order to facilitate communicating back and forth with Dalvik when needed, but .NET objects talk right to the Mono runtime, rather than Dalvik.
To speed up development, apps in debug mode are set up to use a shared runtime to cut down on deployment time, and allowing multiple apps to share the same runtime. This isn’t supported for applications compiled in release mode, though, so any app you release and distribute will contain its own embedded Mono runtime, and will not have a dependency on anything else.