An Android Developer's Top 10 Gripes
gkunene writes in with the plaint of a veteran mobile application developer who vents his frustration with a list of 10 things he loves to hate about Android. "1. Open Source. Leave it to Google to place all the code for their handset platform in the hands of the masses. Not only does this mean anyone can download and roll a new version of their phone firmware, but it also means absolutely any maker can roll its own Android device. ... After all's said and done, I really must admit that Android, despite its relatively few flaws, is one of my favorite platforms to work with. Quite honestly, if my complaint about how the word 'Intent' makes for awkward grammatical constructions ranks in the top 10, I'd say the Android platform is doing pretty well for itself."
Disclaimer: I actually read the FA (yes, I know this is slashdot). This guy is angry because, amongst other things, Google has made 40% of his debugging skills useless. Apperantly, his problem is that this means that other people without his "superskills" can develop software for Android.
"Android, by contrast, pushes you to design everything as small, self-contained mini-applications."
Hey, that's called the Unix way.
I gave up with the idea of an useful sig...
... even with these valid gripes I can't imagine developing on any other platform available for the cell phone. The "Intent" is an odd term but the concept it powerful. Java is a pain but it is accessible. Most of the platform complaints deal with the novel programming style Android uses. It's an event based style with an MVC-esque pattern. Very unusual. Perhaps unusual in a good way.
[signature]
Point 1. Open Source
As the submitter also pointed out. I don't see any problem with the Apache Software License 2.0 licensed Open Source code of Android. How is that a developer gripe? APL2 allows you to close whatever you want to keep closed.
Actually, that's quite simple. It's ok when Google (the copyright holder) says it's ok, otherwise it's not.
Point 2. The Tyranny of the Activity
That sounds a bit like the old UNIX principle. And what's wrong with having applications that do small things and do it well. I don't want a picture application with it's own twitter functionality, I have a proper twitter client for that. etc.
Point 3. Device Debugging
Ok.. so... this article is an humor piece instead of a real article/rant? Or is the writer simply a moron?
Point 4. Applications Never, Ever Quit
Maybe this is a new feature in Android 2.x. But the list of applications you get when holding down the home button is not "running applications" but simply a list of recently started applications. When I leave an application and it has no active processes then it won't show up in the process list. So, I'm quite sure it's not running.
Point 5. The Developer Cooperative
Yes, it would be very nice if the end-user could define system resource limits for individual applications. But other than that, I don't want artificial limitations enforced by the OS by default. Some application simply need more resources than others. If an application is crap, I will uninstall it. Just like I do on my normal PCs.
You know what... I'm not even interesting in the other 5 points on the second page.
What I understand from the article is exciting. I am not a mobile device developer, but looks like Google is trying to create fundamental tools like grep, awk and sed in the mobile GUI world. If that is what Google is trying to do, it is a very wise thing. Some 40 years after debut grep, awk and sed are still going strong and power users use it every day. Even when command line interface is disappearing and text files are no longer the main repositories of data. But an updated set of such fundamental tools with a well integrated GUI and the ability to handle more forms of data would be a radical.
Looks like the author is so green behind the ears he does not even know where the concepts of such mini applications with well defined interactions with other mini ops are coming from. At least one thing is sure, he got the attention he craved so much.
sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
Actually, that's quite simple. It's ok when Google (the copyright holder) says it's ok, otherwise it's not.
Agreed. Understanding what Google actually says might not be so simple, though. I think that's why people have a tendency to employ people* who are experts at interpreting law and contracts.
(*) I mean lawyers.
>> how long does it take to be a "veteran mobile application developer?"
checking out his profile (http://www.linkedin.com/pub/chris-haseman/1/369/a32) he has barely touched the majority of mobile platforms :) where is his symbian, palm os (68k, arm), ebookman, embedded linux, psp, nintendo ds, experience? surely - some of us started this stuff professionally back in the late 1990's with devices like the newton and palm professional. boy how things have changed - yet some things stay the same. he announces himself that ""(and by "in my day," I mean two years ago)"".
>> 3. Device Debugging
be thankful - some platforms you still need to do printf() style debugging.
>> 6. Java—Thanks, But I'll Take It from Here
Java - probably the worst language used on mobile devices to date. the desktop and server platform has evolved in many ways which are not being reflected in the mobile space; due to battery life, talk time etc - the typical moore's law of computing doesn't apply to mobile phones. there was a period where CPU speeds dropped on mobile devices - hopefully things will change coming up with new ARM and low powered x86 CPU's - but time will tell.
A true mobile developer demands a native C/C++ interface on mobile devices - if you want something done, more than a bouncing ball on the screen - its the preferred way. NDK under Android is a must - C/C++ isn't that bad - if you know what you are doing.
>> 8. Platform Fragmentation
its a problem? come on - seriously. you deal with it. you design around it; thats where your years of experience really kicks in and allows you to build cross-platform applications without issues. just because most companies hire an outsourcing department or "specialists" on specific platforms isn't a problem - it is a choice. there are plenty of alternatives out there.
Also, I hear he's fluent in Sanskrit and can divide by zero.
A smug superficially supercilious fuck-knuckle hates Android? Well, I guess I'll give it a second look then! I know which 'essential' book about it to avoid, at least.
If you were blocking sigs, you wouldn't have to read this.
Hey, I've been debugging for years on Windows Mobile...so, what's the story?
My comment is probably not worth too much not being a developer at all but I am an iphone owner and I must be honest the Nexus one does look pretty interesting.
I'm also an Aussie and the Nexus one isn't coming here unfortunately due to incompatibilities with Telstra (the most evil company around, sadly they do have a good phone network)
I will say most of his stuff is meaningless to me but as a hardware junkie, his 8'th point about the amount of target platforms, inherant in the nature of an open platform like android is a bit of a concern.
There's always positives and negatives in open and closed systems and this is a pretty distinct point, the question is though, what's the solution and who is going to get on it fast?
I'd like to see it solved because I do quite like my iphone but sadly I finally cracked the shits with it being so locked down and jailbroke it. It's better now but I /shouldn't have to/ .... would like to see an open platform at least be 1/2 as popular as the iphone.
We'll see I guess..
(as the topic says)
One that hath name thou can not otter
1. What are you complaining about? Of course it's a legal grey area, those are some of Google's primary products - why would they make it easy for you to slap Google Maps into a thin wrapper, insert adverts, and call it "Chris's Maps"? Go write your own, silly boy.
2. You are required to declare *exactly one* activity and intent. After that, it's up to you how you stitch together your app's UI elements. The point of multiple Activitys is that they're a) modular, b) stackable, c) can be swapped during low memory events, and d) can have their state preserved by the platform upon exit. Personally, I prefer a low number of activities, then use other UI elements to add navigational depth.
3. New to software development, eh? Over the next 5-10 years, be prepared to learn new and discard old, that's the profession you've entered (recently, it seems.)
4. "Never quitting" is merely the default. It's up to you to detect navigational or logical termination of your app, and invoke the necessary methods to bring it to an end. The reason for this is that, hey! it's a phone, call might come in! and it's a multitasking O/S! Another app's Activity may suddenly be running on top of yours, and you may not want to exit just yet, hmm?
5. Finally, a real problem. Yes, there are apps that leave background processes running continuosly, disregarding the device's sleep state. These are from bad developers -- learn well from their mistakes. Also, you don't have to use those apps, just uninstall them, and also install Power Manager which will extend your battery life.
6. Watch the video "Writing Real-time Games for Android," wherein you will be introduced to some key concepts around embedded and real-time software development. First and foremost, STOP DOING THINGS THAT INVOKE THE GC! Cool it with excessive + string + concatenation and start using StringBuffer. And preallocate objects to that end as well. Et cetera.
7. Intense, dude. Having developed for Blackberry, all I can do is throw my head back and laugh, laugh hard. Android is a V12 Ferrari next to Blackberry's three-cylindar commuter tin can.
8. If you'd read Google's Android documentation, you'd realize this point was moot, thanks to the carefully spelled-out guidelines that will keep your app looking and behaving the same across various screen sizes. True that you'll have to *think* about how to handle an 8x10 format screen in your app, but that's no different than any windowed platform.
9. You start out whining about "platform fragmentation," then return to your point #1. Whatever. Platform fragmentation may, indeed, become a problem one day, but you haven't defined how that will happen, in your point.
10. If I'm not mistaken, Nexus One equals (or eclipses) the iPhone's raw computing power. 1 GHz, GPU, though low on RAM and flash comparatively. I'd rather have a platform with greater RAM, but the architecture of Android is such that it is *meant* to run on low-capability devices.
Apart from the author being a newbie, did we all misread it as not being a spoof??
O lord, bless this thy holy hand grenade, that with it thou mayest blow thine enemies to tiny bits, in thy mercy.
1. SDK only available for Mac.
Support Right To Repair Legislation.
My single Android complaint: Why, oh why must it be Java based?
1) Sandboxing in Android actually happens at the Linux process level. Every app run its in own isolated process, with its own instance of the Java VM. You can remove the VM form the picture and it would be just as safe.
2) You cannot build once run everywhere. Its a myth. With J2ME phones, devs test and optimize for every supported handset, and it will be the same for Android.
3) Java *IS* an order of magnitude slower than C/ASM for many things that are important for games, such as matrix math. Google knows this and is trying to work around it with JNI/NDK, but really why the complication?
I guess its too late now, but it makes me very, very sad.
(And makes Apple very, very happy)
This guy is a moron. Most of his "gripes" aren't even real gripes (e.g. the tools are too helpful!). The others aren't legitimate, except perhaps fragmentation, but that's inherent in the whole point of Android and the SDK has done a pretty good job so far of either letting you design for compatibility mode (in which Android tries to figure out the best way to render your UI) or design for 3 broad categories (basically small, medium, and large screens). The guy really tips his hand when he talks about how Android hardware sucks. Check out this chart: http://mashable.com/2010/01/05/nexus-one-vs-droid-vs-iphone/ In terms of specs like screen and camera resolution, battery life, chipset, etc., the newest generation of Android devices are either comparable or surpass the iPhone. The really stupid aspect of this article is that there are legitimate gripes about the platform that the author completely ignores. Huge on the list should be the inability of Android to run apps from the SD card, and thus the constraints on available space for apps on a device. The market still has all kinds of problems, the most dire a need for a decent desktop portal, something somewhere near comparable to iTunes. As far as the actual SDK, particular APIs are a chore to use (Google Maps, for example), and though Google rolls out new features with every SDK, they are often poorly documented (e.g., the new Account Manager API). All in all, Android is great to develop for. But like every platform it's got its problems, and if you're going to gripe about it, do it right.
1. Open Source
This is the most benign on this list, and it's only here because now everyone and their brother is going to make a new "Android-powered" device.
I'm tempted to quote the whole paragraph but this last bit made me laugh!
I thought this was a good thing because it means more competition, the "barrier to entry" is low - it's accessable to almost anyone and enables innovation.
3. Device Debugging ..Back in my day (and by "in my day," I mean two years ago..Why do I hate this extremely useful tool? I hate it because it makes about 40% of my debugging skills nearly useless!..
curse their cotton socks, has quite literally taken a process that used to involve hours of work and reduced it to simply pressing F11. Not only is it straightforward and easy to use, but it also works on every platform out there (Mac, PC, and Linux).
He MUST be JOKING - must be!
No developer in thier right mind would see this as a bad thing!
Especially "Back in my day (and by "in my day," I mean two years ago)". This "wealth of experience" proves his naivety.
6. Java--Thanks, But I'll Take It from Here
As a programmer, it makes me feel like I'm getting a very slow lobotomy..nearly impossible to, say, write an anti-aliased font library that renders in a reasonable amount of time..write custom libraries in C with their NDK, but now we're debugging two languages..
What a narrow-minded view!. Not everyone wants to write low-level stuff like an anti-aliased font library. The vm that "runs" the android platform is absolutely fine for every day stuff like email apps and "fart" applications!
9. A General Lack of 'Evilness'
This lack of an iron grip (which both Apple and Verizon have effectively, if obnoxiously, employed on mobile developers) is exactly what is leading to the current and future fragmentation..Google, with luck, will learn when it's good to be evil
10. Hardware, Hardware, Hardware
The current crop of Android hardware, for lack of a better word, sucks..
He MUST be JOKING - must be!
He MUST be naive.
Quite frankly I have lost the will to comment further except
I really must admit that Android, despite its relatively few flaws, is one of my favorite platforms to work with. Quite honestly, if my complaint about how the word 'Intent' makes for awkward grammatical constructions ranks in the top 10, I'd say the Android platform is doing pretty well for itself.
I hate to think what he could have said if he hated Android!
I'll give the guy the benefit of the doubt and some of these points are "tongue-in-cheek" - assuming that's the case then ok verrry funny!
I'm certainly not defending Google or an Android fanboy but this article is utter rubbish.
He should really go and develop for the iPhone or Windows mobile instead. Both these platforms are more aligned with his way of thinking!
I don't understand why this doesn't get more attention, or even some basic acknowledgment from the Android team. Lack of a wi-fi proxy means that Android devices are basically useless for corporate/school wi-fi networks.
When I connect my iPod touch to the corporate wi-fi, I can access the web. When I connect my Hero to corporate wi-fi, I cannot. This is a defect.
Retards.
Come on, my sarcasm detector went off while reading the first "Gripe". But I agree, this one is lame even as a swipe against the "10 reasons I hate/love gadget X" articles. Why isn't this on idle?
This sig is intentionally left blank
This isn't exactly true. Apps only get to use 16 megs of memory on Android. Sounds like a lot, but it's not, especially if you're working with 2d graphics. That's actually something that's causing a lot of difficulty for me in game development on Android. A 1000x800 image is 3.2 megs by itself (1000 x 800 x 4 bytes per pixel). Put a couple of sprite sheets into memory for animation and you're rubbing elbows with the limits.
The point from the article about apps being unconstrained and able to ruin each other isn't really true, at least not for memory. Perhaps the problem the author cites is more of a problem on Android platforms with only 64megs of memory to work with in total. On my Droid, I am saddened by the opposite problem: only being able to use a small portion of my device's memory.
What the hell are you talking about? Open source a bad thing?!?! That means more apps and more... so much more to choose from. New and great debugging tools a bad thing!?!! What! That's like saying you love to write large webpages in notepad. Time is money mate! As an independent developer you should know that. I didn't read anything other than what I commented on above. This article was so sad. In conclusion I think this dudes blowing of steam because Google just made his book useless.
2 ways I can think of:
LEARN IT, BITCH.
The touchscreen test was done by MOTO labs, not Motorola. Not affiliated with Motorola in anyway.
They don't seem to be crypto Apple-fanbois, though. For what it's worth, in the real world, I have a G1, easily the crappiest Android device out there. I have no detectable issues with the touchscreen. Doesn't shock me that Apple's tracks better, but as a fairly aggressive user of the G1, I just haven't come across a need for whatever accuracy is supposedly missing.
Who is RTFM and when will he help me with Unix?
You dont know whether Apple will accept the App or not until you finished and submitted it to Apple. By then you have invested man-months of developer time and maybe some marketing bucks too. The acceptance rate is pretty high. But there are horror stories such as mention in the CNBC Plant of the Apps documentary.
I think you have just created a comment that deserves to be assigned the 'redundant' score because it is redundant with itself.
Look:
Simplicity is hard.
- this is good.
Programming the Unix way requires a person to focus on radical simplicity.
- not too terrible just yet.
The benefits are huge.
- very good.
but now we see this one:
It's a lot easier to debug a 200 line program that takes data in on stdin and dumps it to stdout then it is to debug a class that you can only instantiate with your AbstractFactoryFactory.
- see? You have done it. You should have stuck to the short sentences - one point in, point out. But no, you had to go there and there you have it: the proverbial
then
.
It's eaiser to debug 200 lines of simple code THEN it is to debug a class etc. etc.
I don't have the moderator points right now, otherwise instead of leaving this comment here I would have done the correct thing. You know what it is.
You can't handle the truth.
This:
>> 6. Java--Thanks, But I'll Take It from Here
Java - probably the worst language used on mobile devices to date.
and this:
>> 8. Platform Fragmentation
its a problem? come on - seriously. you deal with it. you design around it; thats where your years of experience really kicks in and allows you to build cross-platform applications without issues.
Java is the answer to platform fragmentation.
You can't handle the truth.
This guys is right in some places, wrong in some others. Changing screen orientation restarts the Activity, but you can tell it in your manifest that you don't want it to automatically restart the Activity on orientation change, giving you the control to do whatever you want.
Android forces you to make the application centered around the Activities, but it's not so bad when you get used to it. It's not necessarily bad, just a bit different.
The debugging? He's definitely being an idiot about this. How is easy debugging a gripe? He's griping that it makes it easier to debug? No, that's just idiotic. Debugging on the Android is very easy and that's a good thing, not bad.
Applications never, ever quit? No, that's not true. I made my app quit save and quit when it goes to background. Other people's apps don't quit. You want your app to quit, you can make it so it quits. Also, if app doesn't quit and goes to background, android will automatically close the background app if it needs the resources to run foreground apps. So they do quit, you can program the app to quit, so he's just plain wrong.
He mentions Java... yes, Java sucks for this. The phone is not very fast to begin with, and running a slow bloated language like Java isn't necessarily the best thing. Java is good for people who don't know how to work with pointers and de-allocate memory, Java is good for people who don't understand programming who want to program things and Java pays for it in performance. Java is like a tricycle compared to low level languages. But the good thing is: it's harder to fall off a tricycle and hurt yourself. With a real programming language you might run into huge problems, late night debugging sessions trying to find where your mistake is. With Java you're playing it safe. Thankfully they provided a NDK, but that's a real pain in the ass, has the speed you want, then has the drawbacks too.
You can get around Java's slowness by following their program optimization guidelines, things like: don't use too many classes, cache calculation results instead of recalculating things, use native java functions ie use indexOf instead of looping through a string. It makes Java bearable.
He mentions platform fragmentation. The main difference between Android devices is their different sized screens. Honestly, that shouldn't be an issue, using XML interface it should all look pretty much the same. If you're doing fancy graphics, you have to be smart and use percentages instead of hard coded sizes for things. Coming from a PC background where users might be running 640x480 or 1600x1200, I think we're all familiar with different screen sizes and how to handle them. Going from 320x480 to 240x320 shouldn't be much trouble for a competent programmer. If you can't handle it, stick to XML interface.
So: Android developing might have it's shortcomings, but they're not as bad as this guy makes it sound. Easy debugging is definitely NOT a shortfall. Also, you can download the android SDK + emulator for free, it runs on Mac, Linux, Windows. Compare that to iPhone, you need to pay $100/year to get the SDK, and even after you get it, you can't run it unless you have a Mac.
2. The Tyranny of the Activity
6. Java—Thanks, But I'll Take It from Here
7. "Intents"
Sounds to me like he's just not comfortable with Java OO development.
This (fully Java based API on top of POSIX kenel) is the future. This is where Linux desktop should be. The reason for the sad state of the Linux desktop is that C API make it too difficult to create applications more complex trivial. At this point the choice is between .NET and Java. Of course Google choose Java.
I have been looking at the API and the architecture of Android and I am very impressed. It looks very UNIX'ish in many areas. Just consider how they deal with "process groups". It's like POSIX process groups taken to GUI applications level.
The author seems to be praising Android with faint damnation.
In theory, theory and practice are the same; in practice they're different. (Yogi Berra & A. Einstein)
The gripes are, unfortunately, mostly off target. But you can't blame a developer for having gripes. They deserve an answer. So here goes:
1. Open Source
The heart of this gripe appears to be "What's worse is Google knows how to protect valued code; Its Maps, Gmail, and Store applications aren't open source. Figuring out when it's okay to include one of those in your own application requires a crack legal team with a hotline to the EFF. "
This is a non-issue. Google hasn't released any proprietary code. Using the capabilities of these applications, or any other FOSS or proprietary applications in Android by means of their remote method interfaces or their Intent filters is OK unless the APIs require a key, as with the maps APIs. The process of getting a Google Maps API key is described here: http://code.google.com/apis/maps/signup.html and most introductory Android programming books cover it, too (http://www.amazon.com/dp/0596521472 in chapter 7). J2ME, BREW, and Symbian all require app signing and all support protected APIs.
2. The Tyranny of the Activity
Android has a unique programming model. It wasn't designed just to make a coder's life difficult. It was designed to prevent a small-screen UI from becoming a maze of hierarchical screen transition and enable re-use of functionality across applications. Android makes "shoveware" ports look bad, which is what Haseman seems to be griping about.
3. Device Debugging
This "gripe" is not really a gripe, but good-natured praise for the ease of debugging on Android.
4. Applications Never, Ever Quit
Android has an interesting and powerful application lifecycle. And, since Android is multi-tasking, more developers will notice that their application has a lifecycle.
5. The Developer Cooperative
This is a valid gripe: On the one hand, Android can manhandle your application's lifecycle, and on the other hand, it is fairly easy for applications to become battery-eaters. Google's developers could have done a better job of automatically detecting battery vampires. Use the "Battery use" in the "About phone" menu in "Settings" to find the applications and other system functions using the battery. That's a tip taken from this article: http://answers.oreilly.com/topic/862-ten-tips-for-android-application-development/
6. Java—Thanks, But I'll Take It from Here
Haseman says: "While it might speed time to market by freeing us from chasing down heap corruptions and memory leaks (two of my least favorite tasks), it can make it nearly impossible to, say, write an anti-aliased font library that renders in a reasonable amount of time. Sure, a developer can write custom libraries in C with their NDK, but now we're debugging two languages instead of one."
Java in Android runs on the Dalvik VM, which, up to now, is a pure interpreter: No precompiler, no JIT. It relies completely on the ability to mix in libraries in C via JNIs http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/jniTOC.html and the NDK http://developer.android.com/sdk/ndk/1.6_r1/index.html.
Why? The short answer is it is hard to put a JIT compiler in a battery powered device. So the developer has to decide what code belongs in Java and what code belongs in C.
7. "Intents"
Here I am right with Haseman, since his gripe is having to write (http://www.amazon.com/Android-Essentials-Firstpress-Chris-Haseman/dp/1430210648/) about classes with names that lend themselves to drifting into being nouns. The Activity, Intent, and Service classes in Android twist up one's prose worse that quarks tha
I wrote parts of this stuff
fine for terminal applications 30+ years ago
It seems to me that is an argument FOR "the UNIX Way" today. Think about why this "way" came about. You had expensive mainframe or mini computers with computational abilities probably even more limited than today's mobile phones, with a user interface with limited display capabilites tied to that system therough a slow serial link with constrained bandwidth, and CPU cycles were a limited, sometimes expensive commodity offered by a limited number of organisations.
Fast forward to today, and what Google is trying to achieve:
Google has this, well, expAnsive array of servers worldwide to provide applications and services in "the cloud" to potentially hundreds of millions of users--limiting computational ability afforded to each user. The user interface is supposed to be this mobile device--again with limited computational resources--with limited display capabilities tied to the "cloud" through a relatively slow wireless link with constrained bandwidth. Megabytes of throughput on this network of wireless links are a limited, sometimes expensive commodity offered by a limited number of carriers.
Seems to me I remember something about history and repetition and being doomed...but I forget the rest ;-)
I'm not familiar enough with the Android platform SDK to say if it is good or bad (whatever "way" a system is architected, the implementation may be good or bad), but I do remember the "Unix Way" worked well in those "dark ages", so if one was, um, INTENT on recreating such a situation it'd probably make sense to do what worked very well in the past.
To me, unix (or GNU/Linux) and a functional command line are much less work than Windows and the mouse.
He does have one very legitimate concern, and that is that the platform can easily be forked, potentially ending up in a situation like old-style Unix, where each vendor had different incompatible versions of Unix (HPUX, AIX, etc).
I happened to write the first source-level C debugger that actually worked (sdb was buggy as hell, and dbx at Sun was debugged with my debugger). I absolutely loved it when the Yates Report would say that yet another company would "capture 20% of the UNIX market." I waltzed on over, gave their senior geeks a pitch, and waited for the manager fold as they begged for a working debugger.
I say, "The more forks the merrier!"
If we cast our minds back twenty years, the same choice faced developers - did you make apps for the nice stable hardware-controlled Mac, or for the chaotic IBM PC compatible world?
Two points: first, it's an amazing reflection on Apple's success that they are a player in both of these choices.
Second, I think the relative success of iphone/android will mirror Mac/PC. Just as PC hardware quickly became much cheaper than Macs, Android phones will soon be significantly cheaper than an equivalent iphone. And more manufacturers will push the envelope faster than Apple will be able to, so Android will evolve faster. Cheaper and more features equates to substantially more sales - ten to one if Mac/PC history repeats itself.
Now I don't know about this guy, but most developers will judge the increased complexity of developing for multiple Android devices a small price to pay for access to a much larger marketplace.
Do as you would be done to.