Hacker News new | past | comments | ask | show | jobs | submit login

Then use Scala!

You almost never need to deal with Java except if you want to.

Plus, unlike C/Ruby/Python/.NET you get a JS backend that actually works¹ (unlike mess like GWT, or various other languages).

¹ In the sense of: Scala.js is stable, mature and production-ready. You can use it, save a lot of time, share a lot of code, use mny of the libraries you already know, enjoy great IDE and tooling support, use it in real projects and make money with it.




Scala on Android is pretty terrible


How? Even the tooling seems to be vastly superior to the Gradle one.

Deals with SDK dependencies automatically, typed resources and views, better Instant Run, ProGuard caching, extremely low overhead, fast compiles, ...


Method count forces multidex insanely early into development and for people who want the best UX that alone is a show stopper.

Very slow compiles (contrary to what you claim).

Language style encourages constructs that cause GC spikes, closures are not low overhead

SDK dependencies automatically meaning what? The thing AS does for imports from AppCompat and co?

Better instant run?


  Method count forces multidex insanely early into 
  development and for people who want the best UX that 
  alone is a show stopper.
That's a complete non-problem. Minimal overhead of Scala is 30kB (see http://scala-android.org/) and it doesn't grow much larger even after dragging in the collections API. Every single of Google's Android compat shims is way larger.

Here is a data point from a small example app written in multiple languages: https://github.com/SidneyXu/AndroidDemoIn4Languages

If you need multidex (you probably don't), it's a single setting away.

  Very slow compiles (contrary to what you claim).
After saving in my IDE, the plugin has incrementally compiled, ProGuarded, dexed and deployed the app to my phone before I can even grab it. That's pretty fast in my book.

testQuick is also amazing as it runs only the tests that have failed, haven't run before or depended on code you just changed: http://www.scala-sbt.org/0.12.4/docs/Detailed-Topics/Testing...

  Language style encourages constructs that cause GC 
  spikes, closures are not low overhead
Google has official recommendations on what to avoid in Java. You can follow the same rules and be fine. Closures have the same overhead as if they were written in Java.

  SDK dependencies automatically meaning what? The thing AS 
  does for imports from AppCompat and co?
No. SDKs (and NDKs) are treated like every other dependency, which means the plugin resolves, downloads, installs and manages them automatically (see https://github.com/scala-android/sbt-android#usage). This is especially useful if you work for multiple clients that have different SDK requirements. No need to write wrappers around Gradle scripts to run https://developer.android.com/studio/intro/update.html. No need for setup instructions if you hand the project to a colleague.

  Better instant run?
Protify existed before Google released Instant Run and is therefore more stable and mature: https://www.youtube.com/watch?v=LJLLyua0bYA It's so seamless that people use it for live-coding Android apps.

...

And then you have goodies like typed resources: http://scala-android.org/tips_and_tricks-typed_resources/

Or the automated Gradle config import which means you don't need to do configure anything except adding the plugin: https://github.com/scala-android/sbt-android/blob/master/GRA...


Method count has nothing to do with size.

Look at your own link: Java => 16,306 Scala => 67,608 (Already in multidex territory)

Proguard removes most of those methods, but you'll still need multidex for any non-proguard build like tests and debug builds.

And if you do grow an app past the point of being trivial as that example is Proguard gains will not be nearly as drastic

Multidex on pre-Lollipop ruins app start time, and only very specific types of apps can go to targeting minSdk 21

Predexing with Multidexing and Proguard are also slow for development for non-trivial apps. Your measure of "how long it takes to pick up a phone" is far from scientific", but to compare, not a single app non-trivial app I've worked on is so simple that installing a fully compiled APK over ADB would be less than a 5-10 second process.

That would leave 0-5 seconds for the entire app to build, proguard, and predex (with multidex). Not possible.

Gradle 2.2+ has the SDK download feature, and before that everyone I know was already using "sdk-manager-plugin", not even for convenience on dev machines (it's not that often that SDKs come out after all), but for CI builds.

Protify is not Scala exclusive if one really wants to use it, but JRebel also has a more mature Instant Run solution. Instant Run type features are useful for very specific types of changes that I don't find to be very common anyways. The layout editor + proper use of the edit mode flag and the tools namespace can already reliably replicate half of what I see instant run and co used for, with the added benefit of having even speedier development cycles.

Also: Typed resources are part of Google's databinding library, not that I know anyone who uses findViewById when we have libraries like Butterknife

To me using languages other than Java for Android dev is a risk about balancing mindshare, UX, and continued support for workflows in Android.

Kotlin has mind share, UX doesn't suffer, and it's gotten big enough that while Google has not come out officially and said it's supported, it's mindshare is large enough that Google knows that efforts like Jack and Jill cannot adversely affect workflows (The transformation API is great example, if projects like Realm, Dagger, and co didn't have so much mindshare I doubt it'd be much of a priority for the project).

Scala on Android has a much smaller mind share and is much less proven despite it's maturity, can kill UX a lot easier because of an insanely method-expensive core library which brings in thousands of methods once you use certain features, and is has not gained enough traction to to have to work around Google's plans than with them.

To me the proof is in the pudding, if there were real gains to be had with Scala it'd have more traction than it does.


  Method count has nothing to do with size.
Nobody ever said that. It should still be obvious though that 30kB can't even remotely fit the method overhead you are claiming.

  Look at your own link: Java => 16,306 Scala => 67,608 (Already in multidex territory)
I even read it! I suggest you do the same.

  And if you do grow an app past the point of being trivial as that example is Proguard 
  gains will not be nearly as drastic
They are. Been there, done that.

You pay for exactly the stuff you are using, just like with every other library.

  Your measure of "how long it takes to pick up a phone" is far from scientific", but 
  to compare, not a single app[sic] non-trivial app I've worked on is so simple that 
  installing a fully compiled APK over ADB would be less than a 5-10 second process.
Well, it works without issues here. How many apps did you develop with the SBT-Android plugin to be so damn sure about its capabilities?

  That would leave 0-5 seconds for the entire app to build, proguard, and predex (with 
  multidex). Not possible.
Perfectly possible. Used that for a while now.

  To me the proof is in the pudding, if there were real gains to be had with Scala it'd 
  have more traction than it does.
That only seems to be a proof that good marketing is more important than good technology.


Typescript is C# in spirit


Except IDE and tooling support, maturity and stability, and you can't share any libraries between Typescript and C#.


Scala.js is Scala.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: