All cross-platform frameworks (including HTML) generally share the same advantages and disadvantages.
Advantages:
- Write code once that works the same on every target platform.
Disadvantages:
- The way it works is often not that wonderful.
- Generally lower performance than native implementations.
- Some also have their own widget set that looks out of place.
- Due to individual platform quirks, you still have to test everywhere.
- You get lowest-common-denominator access to features. When a native feature is supported, often you can only access it in one way: the portable framework's way. This is sometimes at odds with the target platform's preferred way.
- In the event that you may access features unique to a target platform, you lose run-everywhere portability.
- Every so-called "cross-platform" framework is a platform in its own right. See earlier point about quirks: Now, instead of having to know N platforms, you have to know N+1.
For best results targeting multiple platforms, I recommend the following:
Design your core logic (the part that doesn't use any UI) cleanly, with a well-defined API. Make it general enough to be fairly easily ported between environments. (Is SQLite really that different in Objective C vs. Java?)
Design your UI following the best practices of your target platforms so that it looks great (and fits in) on each one. (For Android, see http://developer.android.com/design) Have the UI interact with the core logic via the API you created.