Unlocking Android
Michael J. Ross writes "Of all the potential challengers to Apple's phenomenally popular iPhone, perhaps the one with the best prospects is Google's Android, which is not a mobile phone per se, but rather an open-source platform that the company encourages phone manufacturers to deploy in their own products. Similarly, Google encourages computer programmers to develop applications for the Android environment. But learning how to create such applications is daunting to the uninitiated, particularly for developers who have never before worked with the user interface controls, Web services, and other resources involved. A recently published book, Unlocking Android, is designed to help such developers." Read below for the rest of Michael's review.
Unlocking Android
author
W. Frank Ableson, Charlie Collins, Robi Sen
pages
416 pages
publisher
Manning Publications
rating
8/10
reviewer
Michael J. Ross
ISBN
978-1933988672
summary
A guide to developing applications for Google's Android.
Unlocking Android was put out by Manning Publications on 28 May 2009, under the ISBN 978-1933988672. It was authored by W. Frank Ableson, Charlie Collins, and Robi Sen — all of whom have extensive experience in developing mobile software applications. The publisher's Web page makes available author biographies, descriptions of the book, all its ancillary parts (the foreword, preface, acknowledgments, table of contents, and index), a white paper on Android (oddly termed a "green paper"), and two sample chapters ("Targeting Android" and "Intents and services"). There is a link to download the source code from the Google Code site, organized by chapter. The Manning site also hosts a forum, where readers and the authors can discuss the book. As of this writing, there are 42 threads, comprising 120 messages. Lastly, the site has links to order both the print and electronic versions of the book. Note that purchasing the former automatically entitles one to a copy of the latter. Manning appears to be pioneering this approach to making e-books more readily available to customers, since every print copy now contains an insert with a list of codes that can be used to download a PDF copy of the book.
The book is ostensibly intended for Android beginners, even though it does contain enough detailed information to serve as a partial reference for more experienced developers. It is organized in a logical fashion, in three parts, starting with an overview of Android itself, both the technology and the organization behind it. Then the reader is introduced to the Android programming environment, along with its many components and capabilities. The book concludes with tutorial chapters that step the reader through creating a sample Android application and more. The material covers Android SDK 1.x. Since Android programs are written in Java, any reader fluent in that language will have a much easier time absorbing the ideas. However, the authors state that even non-Java programmers should be able to follow the examples, as long as they have knowledge of similar languages, such as C, C++, or C#. However, even a cursory glance at the code, by such a reader, would prove that Java knowledge is essential.
The first chapter — oddly named "Targeting Android" — introduces the platform, the organizations behind it, the mobile market as a whole, Android's features, how it differs from featured phones and smartphones, its open-source licenses, platform components, libraries, service managers, programming environment, and virtual terminal. Be warned that Figure 1.1 could be confusing to some readers, because it shows the layers of technology that compose the Android platform, but pictures them on the front of a mobile phone, showing a keypad, which makes the layers appear to be part of the actual user interface; the phone should be removed from the illustration, in a future edition. The chapter goes on to discuss booting and activating Android, as well as how to map applications to processes. Some readers anxious to get to the technical nitty-gritty, may become impatient when reading the first portion of this chapter, because it largely consists of introductory material. Yet this context can be helpful and interesting to people unfamiliar with the mobile phone market. (Articles and tutorials aimed at new mobile application developers, oftentimes assume that said developers are already extremely familiar with the rapidly changing mobile market.) In the later portion of the chapter, readers are shown a handful of code snippets, with some explanation as to what they are doing and how. In reading this material, the reader could be easily overwhelmed with all of the new terminology. One can only hope that the authors were not thinking that the typical reader would understand all of what is discussed, or be able to do anything with it. A canonical "Hello, world" program or something similar — with an explanation as to how to execute it — would have been a far more gentle introduction. By the way, the first few code snippets are poorly indented, and some of the method names are italicized, while others are not — with no mention as to what this might signify, either in the chapter or in the earlier "Code Conventions" section.
In Chapter 2, the reader is introduced to the key tools for basic Android development, including the SDK, Eclipse, and the Android Emulator. An example application — a tip calculator — is developed, step by step, to illustrate those tools. Clearly, this tutorial information should have been presented before the second section of the previous chapter. It nonetheless serves as a valuable introduction to programming Android. Incidentally, Figure 2.1 labels the development environment as being located on a laptop, incorrectly suggesting that desktop computers are not equally usable platforms. Later, when the authors suggest that readers add the Android SDK tools directory to their system search path, they specify only the release-independent directory (containing adb, for instance), and not the release-specific paths (containing aapt, which is the first tool discussed); readers presumably should add both. Also, the authors should specify which release to use, 1.1 or 1.5. The reader eventually is told how to run a sample application — and not a moment too soon, because at that point the reader is already 15 percent of the way into the book. To reach that point, she must wade through more introductory material than was needed, in addition to discussions of network speed and latency, command line tools, DDMS, Java packages, and other information. All of this could and should be covered later, when it would be much more meaningful, and the reader would have greater motivation to learn it, having seen an Android application running (if only in the emulator).
Part 2 forms the bulk of the book, consisting of nine chapters devoted to the essential aspects of Android application development: user interfaces, including the Activity class, views, resource types, and manifest files; Intent classes, broadcast receivers, task services, and inter-process communications; data storage and retrieval, including user preferences, files stored on the local system and on SD cards, databases, and the ContentProvider class; networking, including client/server interaction, HTTP, and Web services such as SOAP; telephony, including how to receive and initiate calls and SMS messages; notifications and alarms; generating graphics and animation; multimedia, including audio and video, utilizing the OpenCORE technology; location-based applications, using a variety of tools, including Google Earth's KML. All of these chapters make use of example applications, with annotated source code and screenshots of the applications running in the Android emulator.
The third and final part of the book comprises two chapters, each of which extends the core concepts of Android development. Chapter 12 steps the reader through the creation of a substantial application, named "Field Service Application," designed for mobile technicians who provide support services for customers of contracted clients. The application is designed to be used by both the technician and his home office to assign and manage job orders, capture customer signatures of completed jobs, order replacement parts, and receive navigation assistance. The final chapter, "Hacking Android," explores Android's utilization of Linux, the C programming language, and the SQLite database — as well as how the Android developer can access these capabilities under the hood.
Appendix A explains how to install the Eclipse integrated development environment (IDE), the Android software development kit (SDK), and the ADT plug-in for Eclipse. Readers who do not already have those components installed on their computers, may want to first read the appendix and follow the procedures. Note, however, that the procedures given in section A.4, for installing the ADT plug-in, are already out of date — namely, for Eclipse version 3.3. In addition, the URL given by the authors ("https://dl-sll.google.com/android/eclipse") is invalid, because it is missing the trailing directory slash, which is necessary for it to work within Eclipse. (This points up the importance of including root directories in URLs, despite their common absence, because even though Web browsers will automatically correct this upon receiving an error message from the server, Eclipse evidently does not.) The online Android installation instructions are much more useful, because they also include the latest version of Eclipse, 3.4.
As is to be expected with the first edition of any detailed computer programming book, this one contains some errata — for instance, in the first portion of the book alone: "Android[']s" (page xxii, twice), "Webkit" (page 7, in the caption), "SQLite[,] an" (page 11), and "byte code[s]" (page 13). Also, terms such as "Internet" and "Web" are in all-lowercase, throughout the book, even though they are proper names. (In our world of instant messaging and Twitter, grammatical degeneration continues apace.) For any reader who wishes to follow along and implement the sample projects, possibly the most disappointing decision by the authors was that of offering the sample code not as a single archive file, or even individual archive files for each of the 13 chapters. Instead, the reader must tediously click through multiple layers of directories, just to get the code displayed in a browser, one file at a time. Readers are advised to employee a Web copying utility, which, given a starting URL, will try to download all of the linked pages, recursively, and store those Web pages and other Web elements on their own computer (even localizing links, to retain working navigation in the saved pages).
Yet by far the biggest problem with this book, is that while it claims to be an introductory text, suitable for someone completely unfamiliar with Android, it does not bring the newcomer up to speed at a reasonable pace for learning. Instead, it presents a large number of code snippets and tools to the reader, without adequate explanation for the beginner to truly understand what is happening. This pattern begins even in the first chapter, which is sorely lacking a tutorial on how to execute the sample code — to better understand it and perhaps modify it (a practice that most programmers find quite valuable for assimilating a new technology). On page 23 is a frustratingly brief sidebar on testing the receipt of an SMS message, that is far from adequate for the reader anxious to begin testing out this new material. The second chapter continues this unfortunate tendency of describing tools prior to giving the reader enough information to run those tools themselves in the same manner, and see the same results. For instance, on page 41, the authors show how to use the adb tool to connect to a running emulator session, but at that point the reader has no such sessions running. (Sometimes the authors of programming books understand the material quite well, but neglect to view it from the perspective of someone who does not yet have that understanding.)
While more appropriate for intermediate Android developers than claimed, Unlocking Android contains a wealth of information to help Java programmers begin developing mobile applications for Google's new platform, with numerous code snippets and screenshots.
Michael J. Ross is a freelance Web developer and writer.
You can purchase Unlocking Android from amazon.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
The book is ostensibly intended for Android beginners, even though it does contain enough detailed information to serve as a partial reference for more experienced developers. It is organized in a logical fashion, in three parts, starting with an overview of Android itself, both the technology and the organization behind it. Then the reader is introduced to the Android programming environment, along with its many components and capabilities. The book concludes with tutorial chapters that step the reader through creating a sample Android application and more. The material covers Android SDK 1.x. Since Android programs are written in Java, any reader fluent in that language will have a much easier time absorbing the ideas. However, the authors state that even non-Java programmers should be able to follow the examples, as long as they have knowledge of similar languages, such as C, C++, or C#. However, even a cursory glance at the code, by such a reader, would prove that Java knowledge is essential.
The first chapter — oddly named "Targeting Android" — introduces the platform, the organizations behind it, the mobile market as a whole, Android's features, how it differs from featured phones and smartphones, its open-source licenses, platform components, libraries, service managers, programming environment, and virtual terminal. Be warned that Figure 1.1 could be confusing to some readers, because it shows the layers of technology that compose the Android platform, but pictures them on the front of a mobile phone, showing a keypad, which makes the layers appear to be part of the actual user interface; the phone should be removed from the illustration, in a future edition. The chapter goes on to discuss booting and activating Android, as well as how to map applications to processes. Some readers anxious to get to the technical nitty-gritty, may become impatient when reading the first portion of this chapter, because it largely consists of introductory material. Yet this context can be helpful and interesting to people unfamiliar with the mobile phone market. (Articles and tutorials aimed at new mobile application developers, oftentimes assume that said developers are already extremely familiar with the rapidly changing mobile market.) In the later portion of the chapter, readers are shown a handful of code snippets, with some explanation as to what they are doing and how. In reading this material, the reader could be easily overwhelmed with all of the new terminology. One can only hope that the authors were not thinking that the typical reader would understand all of what is discussed, or be able to do anything with it. A canonical "Hello, world" program or something similar — with an explanation as to how to execute it — would have been a far more gentle introduction. By the way, the first few code snippets are poorly indented, and some of the method names are italicized, while others are not — with no mention as to what this might signify, either in the chapter or in the earlier "Code Conventions" section.
In Chapter 2, the reader is introduced to the key tools for basic Android development, including the SDK, Eclipse, and the Android Emulator. An example application — a tip calculator — is developed, step by step, to illustrate those tools. Clearly, this tutorial information should have been presented before the second section of the previous chapter. It nonetheless serves as a valuable introduction to programming Android. Incidentally, Figure 2.1 labels the development environment as being located on a laptop, incorrectly suggesting that desktop computers are not equally usable platforms. Later, when the authors suggest that readers add the Android SDK tools directory to their system search path, they specify only the release-independent directory (containing adb, for instance), and not the release-specific paths (containing aapt, which is the first tool discussed); readers presumably should add both. Also, the authors should specify which release to use, 1.1 or 1.5. The reader eventually is told how to run a sample application — and not a moment too soon, because at that point the reader is already 15 percent of the way into the book. To reach that point, she must wade through more introductory material than was needed, in addition to discussions of network speed and latency, command line tools, DDMS, Java packages, and other information. All of this could and should be covered later, when it would be much more meaningful, and the reader would have greater motivation to learn it, having seen an Android application running (if only in the emulator).
Part 2 forms the bulk of the book, consisting of nine chapters devoted to the essential aspects of Android application development: user interfaces, including the Activity class, views, resource types, and manifest files; Intent classes, broadcast receivers, task services, and inter-process communications; data storage and retrieval, including user preferences, files stored on the local system and on SD cards, databases, and the ContentProvider class; networking, including client/server interaction, HTTP, and Web services such as SOAP; telephony, including how to receive and initiate calls and SMS messages; notifications and alarms; generating graphics and animation; multimedia, including audio and video, utilizing the OpenCORE technology; location-based applications, using a variety of tools, including Google Earth's KML. All of these chapters make use of example applications, with annotated source code and screenshots of the applications running in the Android emulator.
The third and final part of the book comprises two chapters, each of which extends the core concepts of Android development. Chapter 12 steps the reader through the creation of a substantial application, named "Field Service Application," designed for mobile technicians who provide support services for customers of contracted clients. The application is designed to be used by both the technician and his home office to assign and manage job orders, capture customer signatures of completed jobs, order replacement parts, and receive navigation assistance. The final chapter, "Hacking Android," explores Android's utilization of Linux, the C programming language, and the SQLite database — as well as how the Android developer can access these capabilities under the hood.
Appendix A explains how to install the Eclipse integrated development environment (IDE), the Android software development kit (SDK), and the ADT plug-in for Eclipse. Readers who do not already have those components installed on their computers, may want to first read the appendix and follow the procedures. Note, however, that the procedures given in section A.4, for installing the ADT plug-in, are already out of date — namely, for Eclipse version 3.3. In addition, the URL given by the authors ("https://dl-sll.google.com/android/eclipse") is invalid, because it is missing the trailing directory slash, which is necessary for it to work within Eclipse. (This points up the importance of including root directories in URLs, despite their common absence, because even though Web browsers will automatically correct this upon receiving an error message from the server, Eclipse evidently does not.) The online Android installation instructions are much more useful, because they also include the latest version of Eclipse, 3.4.
As is to be expected with the first edition of any detailed computer programming book, this one contains some errata — for instance, in the first portion of the book alone: "Android[']s" (page xxii, twice), "Webkit" (page 7, in the caption), "SQLite[,] an" (page 11), and "byte code[s]" (page 13). Also, terms such as "Internet" and "Web" are in all-lowercase, throughout the book, even though they are proper names. (In our world of instant messaging and Twitter, grammatical degeneration continues apace.) For any reader who wishes to follow along and implement the sample projects, possibly the most disappointing decision by the authors was that of offering the sample code not as a single archive file, or even individual archive files for each of the 13 chapters. Instead, the reader must tediously click through multiple layers of directories, just to get the code displayed in a browser, one file at a time. Readers are advised to employee a Web copying utility, which, given a starting URL, will try to download all of the linked pages, recursively, and store those Web pages and other Web elements on their own computer (even localizing links, to retain working navigation in the saved pages).
Yet by far the biggest problem with this book, is that while it claims to be an introductory text, suitable for someone completely unfamiliar with Android, it does not bring the newcomer up to speed at a reasonable pace for learning. Instead, it presents a large number of code snippets and tools to the reader, without adequate explanation for the beginner to truly understand what is happening. This pattern begins even in the first chapter, which is sorely lacking a tutorial on how to execute the sample code — to better understand it and perhaps modify it (a practice that most programmers find quite valuable for assimilating a new technology). On page 23 is a frustratingly brief sidebar on testing the receipt of an SMS message, that is far from adequate for the reader anxious to begin testing out this new material. The second chapter continues this unfortunate tendency of describing tools prior to giving the reader enough information to run those tools themselves in the same manner, and see the same results. For instance, on page 41, the authors show how to use the adb tool to connect to a running emulator session, but at that point the reader has no such sessions running. (Sometimes the authors of programming books understand the material quite well, but neglect to view it from the perspective of someone who does not yet have that understanding.)
While more appropriate for intermediate Android developers than claimed, Unlocking Android contains a wealth of information to help Java programmers begin developing mobile applications for Google's new platform, with numerous code snippets and screenshots.
Michael J. Ross is a freelance Web developer and writer.
You can purchase Unlocking Android from amazon.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
My android wont let me near him because hes a little paranoid.
If you buy an unlocked android phone, you can not run applications *you paid for*
because of DRM.
If you buy an android phone and then unlock it, all is well.
The iPhone is winning on the basis of having a much superior interface. Open source development has always been notably bad at user interfaces, and more generally, at design; it is no accident that the most successful open source projects are all clones of some other software, or implementations of back-end protocols like HTTP. Very often superior clones, mind you, but it's still derivative.
Are you adequate?
The online Android installation instructions are much more useful, because they also include the latest version of Eclipse, 3.4.
Actually 3.5 (Galileo) is out now. There aren't explicit instructions for it on developer.android.com, but it's still works the same way. Add the update site, and install the plugin.
"If they have both, tell them we use Linux. And if they have that, tell them the computers are down." -Dave Chapelle
Why is there a furry on the cover? I thought the mascot was a cute little robot.
Kwisatz Haderach
Sell the spice to CHOAM
This Mahdi took Shaddam's Throne
What is that thing on the cover? It looks kind of like Catwoman got a bunch of crappy henna tattoos. Though the idea of her with a tramp stamp does...things...for me. I'll be in my bunk.
Catdroid?
Hope it's nothing like catbert.
Sent from your iPad.
If you would rather program in python, lau or bsh (not bash, but bean shell, a java based shell scripting language) and have an android based phone, have a look at ASE. Currently at version 0.8, found at http://code.google.com/p/android-scripting/
You will want to follow the instructions under help once you have ASE installed. I found it easiest to save the script interpreters for python and lau along with the sample scripts to my phone's sd card as a separate action, then run the ASE application which immediately installed the interpreters and made the scripts available.
See also the wiki and related pages for explanations of why ASE might be of interest to you. Or may not be of interest.
You never know...
Does anybody know if Android got it's security locked down? Last I heard when it came out there were a bunch of Vulns in it.
#find / -iname "*id10t*" -exec rm {} \;
'per se' and you lost me there....
Somebody call a wahmbulance.
See my journal for slashdot ID's by year. Mine created in 2005. http://slashdot.org/journal/289875/slashdot-ids-by-year
Can someone please simplify the Android Platform for us developers? Is it a Java VM with some extra libs, and a linux kernel?
Yo dawg, I heard you like adblocking so we block the ads here so we can block ads while you block ads (with adblock).
Thanks for the response, and it seems as if AWT/SWING aren't supported. I wonder what they use.. their own set of JButton's JCanvas's... etc? Whats the over heard on learning the UI elements? Is it thread safe unlike swing?
SLOW!
Got Code?
Damn, it also doesn't block stupid comments. Oh well.
The platform is called "Android". It basically TELLS you what the cover should have.
Instead they have a tattooed aboriginal hunter with hair from the boss on the Dilbert comics.
Because when I think "android", I think "mostly naked male aboriginal tattoed hunter with Dilbert boss hair".
yo nig. meez anig to, nowamin?
Just heard on Irish television. Michael Jackson still dead. Polaksky Frenseh confirms it.
-Rod
> Unlocking Android
Assholes! We're already past 2:14 AM easter daylight time, August 29, 1997 and riding on thin ice. Leave them locked up!
(-1: Post disagrees with my already-settled worldview) is not a valid mod option.
The Android java is java in syntax only. Google/Android created their own classes, etc so it you know any Sun Java classes then you don't know anything except the syntax.
OK, so to develop for the iPhone I have to 1) learn a new version of C and 2) deal with yet another overly complex set of classes, invented to make your life more difficult.
Where is the "Visual Basic" for iPhone?
Yeah, so the people who develop a game, for example resort to killing the game play by putting in ads. So noone uses the game. So they go broke.
No, hang on, that doesn't work. They developers give it away for free because they are nice people who don't really need to eat. But, although thoroughly nice, being so destitute, noone could be bothered listening to lectures by them about how they to could waste their talent and energy on a plan that is sure to fail. And who buys a support contract for a game? Don't people just try a different game?
That doesn't work either. Hey maybe, just maybe, USD0.99 is nothing to pay for 6 months of boredom relief while waiting for a train. Maybe, if the market is global, ten thousand people pay and the dev can live for a bit from it? Maybe the dev might create something that a couple of million end up paying for it and the dev can set him/her self up pretty well for? That works.
What works even better is where the dev gets the USD0.66 (after google takes a cut) and spends a portion of it on buying off law enforcement and hiring a personal security detail. Then, and here is the brilliant bit, they can track down arseholes who just run the 'pirated' version and force them to give the lectures. Naked. With fresh chilli shoved up their arses. At gun point with the threat of more chillis.
For the record, I have an unlocked G1, I use loads of free software - no MS or Apple at home, and I donate to projects that create software I like. I pay for games if they work on wine and then download a no cd crack if required. I would pay for apps for Android if I could get them on my market.
I don't therefore I'm not.
>>a white paper on Android (oddly termed a "green paper")
Just an FYI, Manning uses the term "green paper" to refer to papers introducing new and emerging technologies. Many more are listed on a variety of subjects on the Manning home page--http://www.manning.com--along the right end column.
swim