By far the most portable language for doing mobile development today is Java: while the platform doesn't always solve issues related to per-handset interfaces (a daunting task that is likely unsolvable), there is no reason that (time un-critical) backend logic can't be perfectly shared.

With an implementation of J2ME on virtually every handset that has been produced in recent years (often as the only supported means of installing third-party software), Google's Android being designed entirely alround Dalvik (a customized JVM), and implementations of Java even ending up on M2M modules, there is almost no device where this code can't go.

In fact, I know of only one handset in current distribution that does not support Java: Apple's iPhone. Until now.