Android, evolvability and Comcast
abe-winter.github.io
abe-winter.github.io
1) The way things are done in the docs is often wrong on fundamental levels. Using libraries from the android team for e.g. network comm is often wrong, even if it's "new and friendlier" (nope).
2) The docs are often outdated. Also their examples are always for exactly not the case you need. 100% of the time.
3) Stackoverflow posts are often outdated.
4) You will eventually hit a years-old bug that's been marked "obsolete" in Android's bug tracker. It isn't. There will be a billion workarounds for various Android flavors in the comments. There will be a patch for Android itself with pleas for them to apply and release it. They will not have. The Android team hates you.
5) Don't expect libraries for Google services to be better on their own damn operating system than they are for Javascript.
6) Just use all of Square's Android libraries and development practices. Retrofit, flow, and so on. [0]. In the best of all worlds Google would shutter the Android SDK/libraries team, acquihire Square, and hand it over to them.
[0] https://medium.com/square-corner-blog/simpler-android-apps-w... (sorry, medium post :-( )
[EDIT] 7) the interfaces for many of the more complex UI elements seem to have been made by the interns. Don't be surprised when you have to resort to reflection to style them.
N+2) Oh, so you want to make a buildbot that does stable builds based on known versions of tools and libraries? What a quaint notion.
[Can we just say that Activities and Intents died, or at least achieved effective bankruptcy as actual abstractions, around the time the 32nd flag modifying behavior was added? At some point you need to step back, take an honest look at what developers are actually doing and realize that things are simply not working out. All that anyone does with the UI framework is to try different things and "twist knobs" until the apps seems to work, and hope that it doesn't break much in the future.]
But it's "situation normal" for most software development activities, no?
That said, if you drop me in a dumpster I can tell immediately that it's a hot day. The forum content around the android problems that I had show that the same problems have been cropping up for years with no improvement.
I don't doubt there are real reasons for the rigidity of android interfaces. Could be that the underlying system is written in C and doesn't interface easily with java. Could be limited staff and high legacy support requirements.
That might not be so easily possible for a GUI mobile app though; maybe there's more necessary complexity there. But aiming for simplicity is a good goal to have regardless.
>You may not use this SDK to develop applications for other platforms (including non-compatible implementations of Android) or to develop another SDK. You are of course free to develop applications for other platforms, including non-compatible implementations of Android, provided that this SDK is not used for that purpose.
Older versions of Android Studio were under the Apache License 2.0, but they seem to have changed that sometime in 2015.
So here, for posterity, is the original post title, which made me chuckle:
If you like calling comcast you'll love android studio"Java is pretty bad at producing portable one-liners. In my opinion that’s because of the public/private feature (completely unnecessary), "
was the point, when I stopped taking him seriously.
It's hard to predict which part of your program developers are going to need. Also, 'private by default' prevents the gradual modularization of code that happens in languages lacking visibility rules.
Are you seriously suggesting using 50x the processing power as a native program on a mobile phone?
I hope Google gives Kotlin 1st class support in android studio and even pushes it as the default language as it is more pleasant to use in my experience.
Not sure single file creation of an Android app (with a user inferface) is possible/advisable though since the separation of view concerns and logic concerns can come in handy. Gradle can be confusing to a first time user but Android studio does provide a GUI for managing dependencies.
I guess it depends on your experience, attitude and point of view.
- Single file app: Check
- Super fast rebuild: Check
- Dynamic language (high reusability and one-liners): Check (Use ClojureScript to take this even further)
And because live coding mobile apps with a REPL is epic.
That's also why you see horrible solutions for problems that have already been solved in the past.
There should be a rule that says that you are not allowed to design a framework until you have direct experience in developing for at least 5 different systems from different periods in history first.
Sure there have been some failed attempts in the past but why not encourage RN? Clearly it's working for many applications and being actively developed.
Dynamic language is not necessary the best thing invented, if it were there wouldn't be any other kind of languages.
A lot of the JS hate goes out the window with ES6 and type systems.
Adding more to the discussion: Android env is like a framework (as opposed to library), it is always harder to work in frameworks than using libraries - e.g. lots of stuff you will have trouble mocking out in unit tests.
Naturally there are cases when a typed language is better than a dynamic one.
That said, even as a clojurescript fan, I wouldn't call this a solution, more like a practical workaround for a deeply flawed dev experience.
> When I get the call from G’s android team to build a better buildsystem
I can only hope that this is "when" and not "if" ;-) I can't believe the current system can't be improved upon though...
I'll admit there are issues with Android, but reducing them to the same tired arguments against Java is just lazy (and lack of config files?).
[Developing for Android for close to 8 years]
As in, it would be nice to have a better build system, but if you work in Android Studio, you don't need to know what gradle is. (Like visual studio devs not knowing much about msbuild.
It would be nice to have a less verbose language than Java, but the IDE is starting to do a lot of this syntactic sugar work anyway.
I get real tired of web soft boys coming into native and complaining about how complicated it is on the metal. This stuff is hard cause you're not just churning html. It's harder work than writing a web page. Sorry.
Specifically, mobile is resource constrained in a way that server-side work just isn't. Your render thread is a hot thread, and you better not jam it up. That one singular concept is the underlying cause of so, so much of the obfuscation and confusion associated with mobile development.
But that's the gig.
No, switching to javascript won't fix it. Switching to javascript will actually make it much worse, as the kinds of industrial grade tools available to make concurrency manageable (though prone to removing fingers from script kiddies or the unwary), to manage memory, to deal with a database directly, to deal with bluetooth devices, on and on are wholly unavailable, or worse still, are abstraction libraries that require you to fluently deal with both your javascript interface and some really deep native interop libraries, lest you be entrapped in cut-and-paste script kiddiehood.
I could go on at length about the myriad pitfalls and difficulties associated with mobile development, but the simple fact is that doing something cool is hard work.
I've done a lot of native development, real native development, not this fluffy Java stuff and Android is still overly complicated in both design and tooling.
My needs as a developer on Android are far from cool and that shouldn't be unnecessarily hard -- but it is.
I dunno, I have a soft spot for Java. Yes, the verbosity can be annoying, but compare that to the scavenger hunt that modern web languages put you on when you're trying to figure out exactly who is doing exactly what.
Don't get me wrong, the inter-application intent stuff is really cool and good, but sometimes, guys, it's all in-app stuff. I need to tightly couple these objects. I need to pass actual non-serializable objects amongst activities within my app. I'm sorry, I just do. Marshalling and de-marshalling data out to a bundle or the database isn't going to cut it.
C++ is not slower than java on constrained hardware, also is more respectful of memory. Is it harder to use? I don't think so but I may be in the minority here.