Before starting my app, I did briefly consider going the cross-platform route, and I realize that it's possible to build a decent app that way. But personally, I could always tell when I used one. Little things like swipe gestures and drag and drop didn't quite work right. The extra polish, consistency, and speed of going native is so nice for things you use all day every day. With the shift to remote work, people might notice this extra 5-10% of polish more than they did a year ago.
Interpreter written in Assembly for fast startup, if the application was never executed.
Followed by JIT compilation to native code and when the device is idle, the PGO data collected by the JIT is used to produce a binary for direct native execution.
As of Android 10 those PGO files are uploaded to the stores and then if a similar device installs the application, they will get the PGO data as well and thus achieve a relatively fast result for their initial compilation.
I know that a lot of old school code used very little memory due to everything sharing one set of libraries. I wonder if in the future, “installing an application” could be flipping a bit in a registry and your device being delivered a highly optimized monolithic system image.
I think that's pretty much what a good compiler is meant to do?
smaller binary images would be amazing though, especially when OS dependencies are required