Al igual que como lo hice con iOS , en este post te mostraré algunas de las diferencias y similitudes entre el desarrollo con Java y C# para Android. Para este post cree una app que compara dos cadenas y calcula su distancia entre ellas, hice dos versiones una tradicional y una con Xamarin.Android. Esta es la app finalizada:
"App terminada" images_set
Yo incursioné por primera vez en el desarrollo móvil tomando un pequeño curso de Android y no mucho ha cambiado desde entonces, para este post usé

Estructura del proyecto

"Comparison project structure" images_set
  1. Proyecto móvil. El concepto de proyecto es el mismo, en ambos casos el un proyecto se refiere a una sola aplicación.
  2. AndroidManifest.xml. Este archivo en el que se define gran parte de la configuración del proyecto se mantiene idéntico en ambas opciones de desarrollo. Sin embargo, cuando usamos Xamarin podemos trasladar parte de esta configuración al código, pero más adelante hablaré de eso.
  3. Recursos. Los recursos se siguen organizando de la misma manera (en carpetas dependiendo de su resolución/tamaño), solo que mientras que usando Xamarin la carpeta se llama Resources, en el tradicional se llama res.
  4. Layouts. En el caso de esta app, tanto el archivo Main.axml como el activity_main.xml tienen más o menos el mismo contenido y de hecho son compatibles entre ellos. La diferencia en las extensiones es para que Visual Studio lo reconozca como un archivo de interfaz gráfica para Android y pueda dar usando Intellisense.
  5. Drawables por resolución. A diferencia de iOS, en donde se distingue un recurso de otro mediante los sufijos `@x, en Android estos deben ir en carpetas separadas totalmente, y en Xamarin no es la excepción.
  6. Drawables en xml. En este caso el archivo empty_divider.xml tiene el mismo contenido, para esta app el archivo contiene un divisor transparente para el StackView.
  7. Recursos en xml. Cualquier recurso como stringscolorsvalues es empleado de la misma manera.
  8. Biblioteca de lógica externa. En ambos casos la lógica de nuestra aplicación puede ser separada en un proyecto externo, en ambos casos, una librería. Cabe mencionar que usando C# creamos una biblioteca de clases portable y compartir este código con apps de iOS u otras plataformas.
  9. Código en general. El código se guarda en clases, de estas diferencias hablaré más adelante.

Recursos

Como ya mencioné, los recursos se manejan de manera similar, algo que me agradó de Android Studio es cómo muestra los recursos: fuera de las carpetas y con una anotación indicando a qué resolución pertenecen.
En cuanto a la famosa clase R, en Xamarin.Android se llama Resource y su contenido es similar al que contiene en la tradicional, como podrás ver en el código más adelante.

El código

MainActivity

"MainActivity" images_set
Desde aquí se revelan algunas de las diferencias entre el código de C# y Java, por ejemplo, podemos ver que using ≈ import, o que el namespace es un equivalente de package y que las clases se llaman igual.
Algo importante a destacar es el código [Activity(MainLauncher = true)] que cumple la función de indicarle al manifiesto cuál es el punto de entrada a nuestra app (en este post muestro las equivalencias entre el manifiesto y el atributo Activity).

OnCreate

"OnCreate" images_set
En cuanto al método OnCreate y la declaración Views, las diferencias son mínimas, en C# para hacer referencia a la clase de la que se hereda se usa la palabra base en lugar de super. Por convención los métodos comienzan con mayúscula.
Aquí es donde se ven las similitudes entre la clase R y Resource para acceder a los recursos.
FindViewById
"FindViewById" images_set
Una vez creada la vista podemos acceder a los controles y referenciarlos desde la clase Activity, para esto usamos el método FindViewById y mientras que con Xamarin tenemos la opción de hacer el cast nosotros (como en Java), también podemos usar el método genérico FindViewById` que hará el *cast* por nosotros.

Métodos y manejadores de evento

"Asignación de eventos" images_set
En cuanto a los métodos, la declaración es casi idéntica (y más con Java 8) ya que mientras que en C# se usa una expresión lambda en la que se define el comportamiento del botón, en Java se utiliza una clase anónima para realizar esta acción.

Código en general

"Código Java & C#" images_set
En cuanto al código en general, me atrevería a decir que la traducción entre C# y Java no es muy complicada… son como hermanos, en realidad una de las más “grandes” diferencias es que en Java tenemos únicamente métodos para acceder a las propiedades de un objeto como es el caso de length()`.

Interfaz gráfica

El editor de interfaces para Android que contiene Visual Studio o Xamarin Studio es idéntico al disponible en los editores de Android Studio o en Eclipse. Además de la vista “en vivo” del diseño también ambos nos dan acceso al xml del archivo.
"Editor de interfaces" images_set

En conclusión

A diferencia de C# y Swift, las diferencias con Java no son notorias y creo que bien valdría la pena comenzar a hacer tu siguiente app con Xamarin para así poderla llevar a iOS sin mayor problema.
Recuerda que el código de las apps tanto de C# y Java están disponibles en GitHub par que las revises, si tienes alguna duda, no dudes en contactarme, al final del post están los enlaces necesarios.