You might want to write the common elements in C or C++ (or whatever language you like that can be compiled into a static library), then write separate glue code for each platform. This is one tutorial that describes the technique: http://www.skyscanner.net/blogs/developing-mobile-cross-plat...
Looks pretty interesting. If I'm reading it correctly I'd still need to build two UIs? That's kind of what I was looking to avoid -- I'm assuming it's difficult. But the WebView based solutions I've seen always look kind of janky.