Ultimately true native is the best. If you can engineer the maximum amount of logic in the backend and have the thinnest possible clients, you will be so much happier even with the "duplication".
As a consultant this is the advice i always give clients. Put it on the server until you have just the flashy truly native UI left.
Unless, of course, there's no backend and your app is a full-blown tool to run on the device only.
You can still have 95% common code with shims to fit the different platforms. Oddly enough, the original Doom is one of the best examples of this process in action. It supports Windows, Linux, and a host of other OS targets, at a time the interfaces couldn't have been more different.