Show HN: Java 7 Features Backported to Android
github.com
github.com
Q) So what works from Java 7?
A) All the syntatic sugar stuff and also "try with resources." (see below)
1) String Switches
2) Try with resources (a.k.a "using/with", auto close)
3) Multiple exception caught in one catch block
4) Integer (and binary) literals for readability (e.g. 100_000_000 or 20_000 or 0b0111_0000)
5) Type inference on collections (a.k.a. "diamonds")
Q) What doesn't work?
1) java.nio.*
2) threading and multiple processor enhancements (fork/join)
3) File change notifications (watch/notify file api stuff)
4) invokedynamic
Its unfortunate that google haven't worked to bring more modern java language features to Android, although I imagine that the Android group has been kept rather busy with other things. Still, Google io is coming, with what is sure to be a slew of new product and feature announcements, so one can hope ...I really wish Google would just make amends with the Apache Foundation and work with them on improving OpenJDK. It would be so much better for both (and us developers) if they did.
All the unimplemented stuff falls under more than a weekend project and not sure how nice some of it would play with Android's APIs and Dalvik. The only thing I would really love to see outside of what was able to easily get working is Lambdas.
I think lambdas is the one killer feature I would love to see in Android/Java - particularly for a framework such as Androids which is so callback heavy, lambdas would be an immense help.
Given huge effort to implement Dalvik in such a way that the end result could not be called Java, they had to be able to make the argument that Dalvik was a cleanroom implementation of Java. They worked from open specifications; Java 6's specification was open-source, whereas Java 7+ was locked down. There is no Java 7 implementation that could be made without violating the license terms of the specification, as it was no longer open.
It's also clear that they could never have worked with Apache, as any developers who had seen substantial Java 7 implementation code or the specification could be considered "contaminated", and thus any work on Dalvik or any other non-FOU-restricted JVM could be in violation of the license terms. Whether or not this would actually be true, it would be a huge, huge legal vulnerability.
Google and Apache had to avoid each other out of legal necessity to ensure Dalvik's survival. Oracle v. Google could never have worked had they not implemented a very strict (and well-implemented, albeit slightly imperfect) isolation between "Android Java" and "Actual Java". Android technically can't (and doesn't) call what runs on Android devices "Java" - because it's not a compliant VM, they don't have the trademark to use it as such. That said, because of the process they use in which the code is compiled to Java bytecode before it's compiled to Dalvik bytecode, they can make reference to it in terms of the tools - just not in terms of Android actually running it.
The Java compatibility test suite does have some such restrictions, but those same restrictions would have prevented using it on Harmony too.
Well, since you're foregoing certification, even if you're deriving substantially from the OpenJDK, you're also foregoing the automatic patent grants. And since it's GPLv2, not GPLv3, Oracle or any of the companies who collaborated in the patent licensing scheme, is now free to sue you for billions or trillions.
So no, OpenJDK has a field-of-use restriction in that the only way for a company to build a successful product (or even a failed one) based on it and not get sued into oblivion is to license and pass the TCK to get the license for trademarks and protection for patents.
Here's a link which should prove informative: http://dirkriehle.com/2011/06/30/the-java-ip-story/
Do you really mean trillions, or was that a typo...?
Log though for anyone who's less tired and curious:
https://bitbucket.org/tvernum/syntactic/wiki/ConvertingJava8...
Happy to discuss if you're interested. Drop me an email -
User: tim Domain: adjective.org
But work is pretty busy right now, so I can't commit to much development time.
I was just going off the educated guess (without digging through the jdk8 source) that lambdas, like most other syntax features on Java, are just syntactical sugar that does not modify the underlying bytecode since jdk6 and so does not require significant code changes to get it working. Though of course I could be wrong, but I'll deal with that later on in the week.
I am starting to think Google will leave Java language support at Java 6 level, or eventually offer full native support, instead of the half solution that the NDK currently offers.
Looking forward to this year's Google IO to see if there will be any change at that level.
On a related note - is using Scala also a viable option for android? Anybody tried?
Additionally, Dalvik didn't have JIT until late in its maturity, so besides the normal slowdown from Java->Scala, expect it to slow down further by the less-efficient VM.
It might be viable on newer devices, but it'll definitely have problems on older ones. Other than that, it does seem very feasible to write and deploy a Scala Android app.
[1] http://blog.jetbrains.com/kotlin/running-hello-kotlin-on-and...
Execution is as fast as Java. I remember running my Scala app on one of the first tablets (Android 2.x) without issues.
The build system support is impressive and there is a whole community which focuses on Scala running on Android.
Anyway, the presentation is almost two years old now.
Now if it is for professional stuff, personally I would just use plain Java, as Scala and Clojure still seem to have issues.