“As everyone is trying to guess whether the next big Android update is going to be Key Lime Pie or not, and whether the release will be Android 5.X or 4.X, we have yet to hear anything concrete. After getting a tip from an eagle-eyed reader (thanks, deepayan!) and digging deeper, I can definitively tell you that Google is currently working on Android 4.3, and it is still Jelly Bean.” Great detective work by Artem Russakovskii.
why change something that works so well?
To make it work even better.
Let me see:
– Support Java 7 language constructs (most likely not going to happen with the Oracle suit going on)
– Compile Java to native code or improve the JIT
– Allow the full use of native applications, instead of shared objects loaded into Dalvik with wrappers around JNI calls
– With clang as part of the NDK, start supporting Objective-C instead of disabling it
– Even without generics (my pet peeve), allow for Go usage in the NDK via gccgo
I think I can remember of a few more issues from the developer point of view.
1. There will be no upgrade to Java7 or even Java6, because Java6 changed the code license to prohibit exactly what Google are doing.
2. It’s already mostly compiled
3. Full native applications have been available since 2.3
4. There will be no Obj-C, because the UI library(Skia et al) does not work with Obj-C. Enabling Obj-C is rather useless, since most iOS game devs are already on C++. And Obj-C UI code will definitely not be even close to compatible
5. Go would be nice
1. I wasn’t aware of it. Thanks for pointing this out.
2. No it is not. It makes use of a Trace JIT, only compiling hot code. Too much information to paste here.
3. This is not true:
– You are creating a .so that is called by a pre-defined Activity written in Java
– You have communication between Java and C/C++ code happening via JNI calls and UNIX pipes for events, instead of direct OS calls
https://android.googlesource.com/platform/frameworks/base.git/+/mast…
https://android.googlesource.com/platform/frameworks/base.git/+/mast…
https://android.googlesource.com/platform/frameworks/base.git/+/mast…
Since Android 2.3 the only new API is for OpenMAX AL, for everything else you have to wrap it yourself via JNI.
Thus you pay the price of interop every time you call an Android API or are notified from system events in a so called native activity.
4. Personally I don’t care about Objective-C. But since they have clang, at least
they could allow iOS developers to easily port their application code, and not go
out of their way to forbid it.
So what if the UI code news to be different?
5. Yes, but the ticket I opened seems not to go anywhere. Android team requires shared objects and the Go guys hate dynamic linking with passion
2. Hot code = most used = mostly compiled.
3. Considering why NativeActivities were created and the main language of Android you will not get rid of that. Same issue as with calling Objective-C from C++, there will have to be a converting step somewhere.
4. And what would be the point of porting application code that is highly dependent on iOS frameworks?
That is not the same as you don’t have to endure a JIT overhead. That is the reason .NET is compiled to native code in Windows Phone 8.
There is no conversion going on with Objective-C vs C++.
Both languages have native compilers available, and you can even make use of the Objective-C++ compiler mode.
There is no interop performance penalty between language implementations.
I don’t know, code reuse? GNUStep also offers quite a lot of similar APIs.
Additionally it is always a matter of how much care is taken writing portable code.
Games for example have their own UIs built with OpenGL.
And unlike traditional JVMs, the compiled code is preserved between VM shutdowns. There is a lot more GC overhead, than there is JIT and interpreted code overhead.
Objects are not the same. Method calls are not the same.
Which is not an issue of any sizeable amount.
And Objective-C is objectively barely portable. C/C++ on the other hand…
And are mostly written in C++ for simplicity.
Spaghetti #ifdef …
Having to interface with Java from C++ is a royal pain in the ass. JNI sucks.
Nothing would make me happier if Android API moved to C++ (or at least the full API was exported to NativeActivity)
But it’s still pointless because clients want integration with APIs such as facebook, gree, tabjoy, adwhirl, etc. and all those are java-only.
Agreed, that is what most developers aren’t aware when they are told Android supports C++.
I prefer Java’s type safety over C++, but C++ has the benefit of being portable to other mobile platforms for native applications and first class language in all vendor’s SDKs.
But Google could take better care of it.
Android is far from perfect yet. Multitasking is out of hand a lot of the time, and performance overall is not as stable as it should be.
It’s not far away though.
From a former Symbianer, I could tell it’s not all that bad…
Kochise
Symbian “Blue Screens”?
I had quite a few in some devices.