Hacker News new | ask | show | jobs
by pjmlp 2515 days ago
I still don't see any big advantages over Xamarin Native, Qt or plain C++ with native views, when going through this route.

All of the with the bonus that C#, JavaScript and C++ actually have lots of market demand, Dart remains a possible CoffeScript.

2 comments

Speaking strictly to the Xamarin here... as someone who has worked professionally w/ Xamarin, Xamarin.Forms, and Flutter: Flutter knocks it out of the park. My experience with Xamarin was so buggy as to be nearly unusable (on Stable no less!). The documentation, _especially in Xamarin.Forms_, was sooo lacking! I wanted so hard for it to be "the next great thing", but there were just too many gotchas and pain points. In contrast, Flutter "just works", has great documentation, great community, great tooling. My development in Flutter, especially with the hot reload they support, has sped up immensely. I can pause the debugger, change code on the fly, continue the debugger, no hiccups. It has been nothing short of wonderful. My anecdotal two cents.
Hence why explicitly left Forms out.

For me having to deal with Dart, a programming language without any other purpose than Flutter, it rules out any advantage over Xamarin.

With Xamarin I have C# and the whole .NET ecosystem available.

The biggest advantage is easy GUI creation, especially with animations and custom styling. Stuff that you can do with Flutter is basically impossible with native Android. You also don't have to deal with the insanity of Activities and Fragments.

Qt is pretty good, and QML has decent animation support but I think their mobile implementation is still very alpha, and since being acquired (again) they've kind of refocused on embedded devices like cars where they actually make money. Also it's not free. And QML is a bit less elegant than Flutter. It practically forces you to write spaghetti code.

I don't know how you'd use "C++ with native views" on Android, and I've only heard bad things about Xamarin Native.

The same way that Dropbox, Microsoft and plenty of other companies do.

You use a JNI generator and follow the so called hamburger architecture.

Microsoft and Dropbox have several sessions done at CppCon.

You're going to have to provide a link because "hamburger architecture" returns no relevant search results and I still don't know how you mean to make an Android GUI in C++. Unless you mean you write your core logic in C++ and your GUI with Java and link them via JNI?

That still means you have to write the GUI again for every platform, and you still have to use the Android API which is a very awkward system to make GUIs with (animation is extremely difficult, Activity and Fragment lifecycles are very complicated, etc).

I did provide the information for it, Dropbox and Microsoft talks at CppCon, easy with some Google fu.

CppCon 2014: Zaika Antoun "Microsoft w/ C++ to Deliver Office Across Different Platforms, Part I"

https://www.youtube.com/watch?v=3HROqnw-nf4

CppCon 2014: Zaika Antoun "Microsoft w/ C++ to Deliver Office Across Different Platforms, Part II"

https://www.youtube.com/watch?v=MGMoRu5yrVc

CppCon 2015: Jacob Potter & Andrew Twyman “Bridging Languages Cross-Platform..."

https://www.youtube.com/watch?v=K-k-axW2utc

CppCon 2017: Stephen Spann “Cross-Platform Apps with Dropbox’s Djinni...”

https://www.youtube.com/watch?v=ssqhz_1pPI4

CppCon 2014: T. Grue & S. Kabbes "A Deep Dive into 2 Cross-Platform Mobile Apps Written in C++"

https://www.youtube.com/watch?v=5AZMEm3rZ2Y

Naturally the native UI has to be used.

Are we talking about having a good user experience here, or having the easy lazy path for the developer?