If you follow me on Twitter you'll know I've been looking for a new tablet device. I've made my decision. I was originally going to get a Windows tablet. But when I looked at the available tablets I found that the emphasis seems to be on making them smaller and lighter and as a consequence they are lower powered than what I have with longer battery life. I get pretty good battery life already, so there wasn't a big incentive for me to get a new Windows tablet just yet. Mine is good enough.
For a breif moment I considered the iPad 2 but the new unit looks to be an incremental upgrade from the original. So I'm leaving it alone.
Next on the list was an Android tablet. That's what I got, a Samsung Galaxy Tab. It's a nifty little device in it's own right. It's small enough to fit in one hand or the back pocket of some jeans (not that I recommend carrying that way, to many pick pockets around) but large enough to make for a good eBook reader. I was also pleased with how consistent it is with other Samsung devices. I'll be talking more about it (and another mobile operating system!) in the coming weeks.
I found out about this site through the CodeProject article that I mentioned in my previous post. This is a third party site that allows you to browse what is in the Android Market. The uninitiated may wonder why one would use a third party site to browse the Android marketplace. The reason is that the only official channel for seeing what is in it is to browse the Marketplace through your phone. But doing so will only let you see what applications are available to your device and not everything the Marketplace has to offer. If you are interested in browsing go to http://www.androidzoom.com/
If you've ever been curious about the differences in the online application stores for the iPhone, Windows Mobile, and Android there's a rather lengthy comparison available over at CodeProject.com. Among other things the article covers the registration costs for each of the stores, what it takes to get started with development, and a breif comparison of the platforms.
I had set up a new development machine and had installed all of my usual development tools, including Visual Studio and Eclipse. To make sure the setup was complete and successful I created and ran the usual "Hello World" in both of the environments. I kept getting an error from Eclipse when running the Android Hello World project that made no sense to me.
"The project cannot be built until the build path errors are resolved."
I found the resolution for this at Scott D. Strader's blog. To summarize the solution I only needed to add a library to my project and then remove it to force Eclipse to perform the necessary actions to resolve the problem. I would post the detailed steps here but I don't want to steal his content. But if you cam across this page because you encountered this same error click on the link above to be taken to the detailed resolution steps.
So I've gotten my hands on my first piece of Android hardware and I've been looking through it. Despite the tings that set Android apart I find that it's not as dissimilar from Windows Mobile as I thought. Looking at the application stores for both platforms I've found that both only allow you to install applications on the device's memory. On Windows Mobile Phone if you've acquired the application through a source other than the application store then you [may] have the option of installing it onto the memory card. Both platforms also will close an application once memory gets low. For Android applications the illusion that the application was never closed by saving state information about the application before closing it. When the user switches back to the application the state information is used to restore the program to what ever it was doing before it was closed. In observing this on a T-mobile MyTouch 3G this is easily observable as there's a noticable delay when the program is being reloaded. Windows Mobile Phone has not directly provided an API for saving state that I've seen but that's not to say that Window Mobile Phone developers can't implement the same thing. Some Windows Mobile Phone programs do this such as the file explorer.
The similarity that stood out to me the most was the carrier's role in Firmware updates. Verizon is currently releasing a series of Android phones that they've branded as "Droid." One of the phones is the same as one that Sprint is selling (the HTC Hero). Sprint's version currently has Android 1.6 while Verizon's has Android 2.0. Will Sprint's version get an updated operating system? That's yet to be seen. While HTC is making a CDMA build of the OS it will be up to Sprint whether or not the update will make it to the customers. That's something that has long been a criticism of Windows Mobile Phone. It will be interesting to see if this becomes more common and if so whether or not it will be received the same way by the blog-o-sphere.
Two implementations of Android hardware arrived to me today. One was the T-mobile MyTouch 3G (I can't remember the generic HTC name). The other was actually an item of firmware. Teh Android version of the firmware for the Creative Zii Egg came out today. I finally have Android hardware!
A few months ago I setup an Android development environment and afterwards never did anything with it. Well I finally have access to Android hardware and thought this would be a good time to pick it up again. Before starting up the compiler and writing a "Hello World" application I thought I would first review Android terminology (from a developer's perspective) and familiarize myself with the components of an application.
- Activities - Activities are pretty much the same as what a typical person would refer to as an application. Activities typically have user interfaces. It's possible to make an activity with no user interface. But if you are doing that you would typically use a service.
- Content Provider - Think of a content provider as a package for making information available to another application. They abstract data away in a form that is accessible by other applications.
- Intent - an intent is the same as what some might call an event or message under other platforms. Intents tell applications of events such as hardware insertion or removal, application starts, when the location of the phone changes by a certain distance, and so on. In addition to predefined intents you can also create your own intents.
- Service - Services are a type of background process. They have no user interface and run quietly in the background performing their work.
When you are creating an Android project a specific directory structure is used. Here is a breakdown of a typical Android application and the meaning/purpose of each file or directory.
- AndroidManifest.xml - Describes the application being built.
- build.xml - Ant script for compiling the application
- default.properties - script used by the ant script
- bin/ - contains the compiled application
- libs/ - holds third party code libraries
- src/ - holds the Java source code for the application
- res/ - holds resources for the application. Contains subfolders for resource type.
- assets/ - holds other static files to be packaged with the application
The resource folder (res/) contains subfolders for further organizing resources. It's structure looks like the following:
- /res/drawable/ - for images
- /res/layout/ - for XML based UI
- /res/menu/ - menu layout
- /res/raw/ - misc files
- /res/values/ - strings and other values
- /res/xml/ - XML files included with the application
When you build your application there are four items of outbut in the /bin folder.
- /bin/classes/ - the compiled Java classes
- /bin/classes.dex - the DEX executable from the compiled Java classes (DEX is deserving of a post of its own)
- /bin/myApp.ap_ - applications resources packaged as a zip file
- /bin/myApp-debug.apk or /bin/myApp-unsigned.apk - The actual application
Do you remember Creative Labs? They were the company that makes the SoundBlaster series of sound cards and a series of media players many of which were branded under the name "Nomad" and "Zen." The company had a group named 3DLabs that primarily made video cards for computers. Well you may [not] have noticed that if you browse through the computer department of a local store the video cards there are all based on ATI or nVidia chipsets. What happened to 3DLabs? They've been reorganized into ZiiLabs (http://ZiiLabs.com). It looks that ZiiLabs is going to be designing technology solutions for OEMs to include into their own products along with fully implemented devices available for rebranding.
Part of this effort includes a package of hardware and software for creating networked multimedia solutions. The operating system made for their hardware platform is named "Plasma OS" and a developer will be able to create solutions for it through the appropriatly named "Plasma SDK." While the SDK is not yet available an evaluation guide is. The 23 page document gives an overview of the OS, the development framework, and the development process.
Being media centric the Plasma OS will come with many of the applications you would expect such as applications forhandling audio, video, and photos and PIM applications including a calandar, mail client, web browser, and notes application. Some of the more interesting features and APIs include what is packaged in the graphics cell (OpenGL ES and a component for consuming 3D Studio Max models), support for MP4, MOV, H264 and WMV codecs in the media cell, some rather computationally intensive operations in the Math cell (FFT, DFT, and SIMD operations) and the support for accelerometers, GPS, and light sensor in the sensor cell. As evidence of ZiiLabs originalbackground in graphics the Zii processor has a streaming computational unit in which a stream of data can be given to it, and that data stream will have the requested computational operations applied to it while the ARMs core is performing other operations. This type of functionality is common in accelerated video adapters (Look up Open CL or DirectX 11 Compute for more details on those types of operations).
If you think the platform looks promising then you can preorder the Plasma SDK with a Zii Egg (iPod Touch styled media player running Plasma OS) from Creative now for 399.99 USD plus shipping and handling. The player will later run Android via a firmware update.
From past to present in the United States Android has pretty much been a T-Mobile operating system. Yes, I know that T-mobile doesn't make or brand the operating system. But the only people that were on T-Mobile had the choice of an Android device (the G1). At present the same is true, only T-Mobile customers have the choice of using Android. But in the near future other devices using Android will be rolling out, both for phone and non-phone applications. So I've decided to div into Android.
It may be some months before I am able to get hardware that I'll also be able to use as a primary device so I'm going to stick with using the android emulator for now. For any one wanting to get started with Android development you probably want to get the emulator and dev environment up and running. While there's a variety of development environments that you could use every thing I describe is going to be centered around the Eclipse environment. The instructions below will help you get your Android environment up and running and configure the emulator so that you can see an emulated android device run.
Installing the Android SDK
The Android SDK can be downloaded from http://developer.android.com. The installation could not be simpler, you just download the SDK for the development operating system of your choice (I downloaded both the Widnows and OS X version, there is also a Linux version) and then unzip it to the path of your choosing. I unzipped it to c:\tools on the windows system.
Eclipse is a free IDE available from Eclipse.org. While it is not restricted to being used only for Java you will find that it is most strongly associated with Java. You can download the Eclipse IDE for the operating system of your choice from http://www.eclipse.org/downloads/. I downloaded "Eclipse IDE for Java Developers" for both OS X and for Windows. The installation is simple; unpackage the zip file to a folder. My Eclipse installation is in c:\tools\Eclipse on my installation.
Configuring Eclipse for Android Development
Start the Eclips IDE. Go to the "Help" menu and open "Install New Software" (the exactwording seems to varry some across Eclipse versions). In the "Work With" text box enter http://dl-ssl.google.com/android/eclipse/ and select "Add." In the tree view below select all the Android tools and then select "Finish." After the updates isntall you will need to restart Eclipse. Once restarted go to the "Window" menu and select "Preferences." Under the "Android" select select "Browse" and navigate to your Android SDK installation.
Starting the Emulator
From the "Window" menu select "Android AVD Manager." By default you have no android devices listed here so you will need to create a new device. In the input areas below enter a name for the configuration you are creating, select an Android version from the drop down, and select a screen resolution. Then press "Finish." Once the device is created you can start it by typing the following at the command line.
emulator -avd <MyDeviceName>