The reason MonoTouch and Mono for specific Android libraries often occurs due to the existing (smaller, more customized Silverlight) profile (for example, everything that depends on the new FX4.0 features should be cut). They often represent the same code compiled with SILVERLIGHT (or MONOTOUCH , MONODROID ).
The reason for MonoTouch's specific librairies is only because its environment (iOS devices) does not allow JIT'ing. Thus, there is no generation code (for example, System.Reflection.Emit ) or dynamic (down) loading code ... However, it is often possible to provide (less efficient) workarounds or skip several functions and save a special version of the library for MonoTouch.
Now back to creating a single shared assembly / project. The special MonoTouch assembly (usually the same code compiled with MONOTOUCH ) is still a reliable .NET assembly and can often be used in Mono for Android, Mono or .NET (recompiled once, even with MONOTOUCH ). This is ultimately not optimal, but it is something you can try.
Another of them has the same projects (for example, MyLib), in several solutions (for example, MonoTouchApp, M4AndroidApp) and uses special configurations (like iPhone | Debug one) to set different definitions (for example, MONOTOUCH on iPhone * | *). This may allow you to maintain a better implementation of functions on all platforms (for example, if the same function is implemented differently).
I would try later (config), and then split up the special MonoTouch assembly and finally (if it really doesn't work) looking for other alternatives.
source share