Android

Android is the mobile device platform being pushed by Google and owned by the Open Handset Alliance.

Tiny droid

To build a minimal Android rootfs, for doing bringup or kernel work

master

Building under Android

android-build-system

The android build system is complicated. It is not easy to create a simple build script to build single component. But it is much easier to add a new component into the build system. Here is a sample to build the "Hello world!" for Android, and it is dynamic linked executable.

   1. create a directory for the new component in $(YOUR_ANDROID)/external folder: $(YOUR_ANDROID)/external/hello
   2. put the hello.c into the directory: $(YOUR_ANDROID)/external/hello/
   3. create Android.mk in $(YOUR_ANDROID)/external/hello/ directory, the Android.mk likes the following:
      LOCAL_PATH:=$(call my-dir)
      include $(CLEAR_VARS)
      LOCAL_ARM_MODE := arm
      LOCAL_SRC_FILES:= \
      hello.c
      LOCAL_MODULE := hello
      include $(BUILD_EXECUTABLE)
   4. add the following line into $(BUILD_SYSTEM)/main.mk,$(BUILD_SYSTEM) is in $(YOUR_ANDROID)/build/core:
      external/hello
   5. launch the build command in $(YOUR_ANDROID): make hello
you will have the build target hello in $(YOUR_ANDROID)/out/target/product/generic/system/bin. You can use include $(BUILD_SHARED_LIBRARY) to create shared library. Find more in $(YOUR_ANDROID)/build/core/config.mk.

Encoding video for Dream

My method

Using the ffmpeg command line from

First, get the mpeg4 codec (it's non-free, hence lives in the Ubuntu multiverse repository. This will replace your libavcodec-52)

# apt-get install libavcodec-unstripped-52

$ ffmpeg -i terminal.avi -s 480x256 -vcodec mpeg4 -acodec libfaac -ac 1 -ar 16000 -r 13 -ab 32000 -aspect 3:2 -padtop 32 -padbottom 32 terminal.G1.mp4

I have used this method successfully on my Ubuntu 9.04 (Jaunty) system.

Mono on Android

Tickle

Android has a form of push data, called a network tickle. On my Dream, this is used for

D/Sync    (   52): Received network tickle for joel.stan@gmail.com - http://www.google.com/m8/feeds/contacts/joel.stan@gmail.com/base2_property-android
D/Sync    (   52): Received network tickle for joel.stan@gmail.com - http://www.google.com/m8/feeds/groups/joel.stan@gmail.com/base2_property-android
D/Sync    (   52): Received network tickle for joel.stan@gmail.com - https://mail.google.com/mail/g/?client=1229389399938
D/Sync    (   52): Received network tickle for joel.stan@gmail.com - http://www.google.com/m8/feeds/contacts/joel.stan@gmail.com/base2_property-android
D/Sync    (   52): Received network tickle for joel.stan@gmail.com - http://www.google.com/m8/feeds/groups/joel.stan@gmail.com/base2_property-android
D/Sync    (   52): Received network tickle for joel.stan@gmail.com - http://www.google.com/calendar/feeds/joel.stan%40gmail.com/private/full-selfattendance
D/Sync    (   52): Received network tickle for joel.stan@gmail.com - http://www.google.com/m8/feeds/contacts/joel.stan@gmail.com/base2_property-android
D/Sync    (   52): Received network tickle for joel.stan@gmail.com - http://www.google.com/m8/feeds/groups/joel.stan@gmail.com/base2_property-android

Observations

#android, on irc.freenode.net

Mon, 23 Feb 2009 13:55:48 +1030

13:54  orci: hi all, wondered something. Not because I like Opera but, why 
             can't I uninstall the "Browser" app and choose to use only Opera?
13:54  JesusFreke: because the browser app is in /system, which is read only
13:54  JesusFreke:  /system/app rather
13:54  orci: isn't this a bit Microsoftish?

Hardware

TI wireless

Blob driver

The first public drop of android sources included a driver for the TI 802.11 device found on trout. This is a binary blob coupled with an OS independent driver layer, which sits atop a bunch of code that maps this layer to the Linux driver API. It appears to include it's own 802.11 stack, as all out of tree drivers tend to do.

In-tree driver

I was thinking it would be an interesting, but time consuming, task to port the TI driver to the in-kernel 802.11 stack. In an interesting turn of events, it appears Nokia has vested interests in the TI chip (my guess is they'll be hanging off a OMAP3 SOC in the sucessor to the Nokia N810). A Nokia engineer, Kalle Valo, has submitted a in-tree driver for the TI wl1251.

Chances are this will land in 2.6.31, and hopefully the Google/HTC guys will pick it up for their next firmware release.

Another win for using Linux as the kernel in your embedded project - chances are someone else will use the same SOC or peripheral and write a driver for you. This would be a really good reason for the silicon vendor - Texas Instruments in this case - to provide real, in-tree, driver support. They could start at pre-silicon, and by the time it's in dev boards it will be included in mainline. This gives anyone looking for a peripheral or SOC a compelling reason to pick up their silicon.