Update 20160822: This advice still holds true. I continually am asked about this. One company I know of went with Xamarin only to find out that it did not solve their Android problems as they had to learn both languages/implementations to solve most their issues.
Update 20150513: Thus far, this is one of the most asked questions I get from startups. Which way should they go. I inevitably end up pointing them to this post. It is still solid advice.
I've developed with both. You can pretty much do whatever you want in Xamarin. The couple of difficult areas you're going to run into are:
- Finding good, working example code. Edge cases are really the bummer here.
- You'll find that you end up learning Java through Xamarin because you have to read so much Java code.
Another problem is that while Xamarin is doing well and is gaining traction, the community is still rather small. This poses a problem when you release a Xamarin app. If you need to bring in someone else to maintain it, they have to know .NET, C# and Android. Finding that combo is rather difficult and I've found that all the contractors or consultants that I needed to update my app were VERY expensive.
Thats the hidden gotcha. It will help you get out the door faster, but up keep and new feature development will cost you, IF you're NOT the one doing the updates.
Why do I know this? I've written two apps with Xamarin that I eventually wanted updated. I had to contact a contractor to do it because I simply didnt have the time. It was quite expensive compared to Android or iOS devs that were already out there. I ended up moving those apps from Xamarin to Native Android and iOS.
That aside. Its a freaking awesome platform. If you plan to always work on it, then use it. Being able to use the power of C# is great. After working with C# for many years I've grown to really have a disdain for Java. Thats personal preference, but it is what it is.
Its all about tradeoffs.