[Is it possible to] use C# library with Mono for Android from Java code?
Yes. Every Java.Lang.Object subclass has an Android Callable Wrapper generated at build time. The Android Callable Wrapper is present to allow Java code to call into managed code (e.g. so that when you override Activity.OnCreate() Android can actually invoke the managed override.
However, there are a few limitations; in particular, the only methods that are declared in the Android Callable Wrapper are overridden methods and methods coming from implemented interfaces. This complicates the Java->C# scenario.
[Is there] a reason to do it?
Yes. There are a number of circumstances in which you currently can t use C#, e.g. using types that are outside of android.jar
(e.g. the Maps API). (There is Android.Runtime.JNIEnv, but that doesn t work with subclassing scenarios.) As such, the easiest way to make use of the Java APIs is to write some of the code in Java, then integrate the Java and managed code via a variety of mechanisms, including separate activities (using Activity.startActivity() to launch a managed activity from Java), JNIEnv
, services, etc.