Playing with Android
Posted by Aapo Rantalainen on April 6, 2010
I was in Codecamp playing with Android and this is story of my experience with it.
Android is operating system (uses Linux kernel) for mobile phones by Google.
Pros:
- It is fully open source.
Cons:
- Not all kernel modifications are in upstream.
- It is not using GNU (there are not all ‘standard’ libraries of GNU/Linux system)
My goal – native C
For Java developers Android is good choice. There are ready plugins for Eclipse to produce Android applications. But at this time I was not interested in Java development. I had one goal: Compile some c-applications natively to Android.
If you want mix java and C-code check NDK.
Starting
Emulator
I downloaded Android SDK and AVD Manager for x86-Linux. It contains graphical UI to create, manage and start virtual phones. It has also manager to download all needed file-images as well. I tested Android 2.0, 2.0.1 and 2.1 (API levels 5,6 and 7). Screen can be switched between portrait and landscape with ctrl+F11.
SDK contains also handy tool called adb, which stands AndroidDebugBridge. It can be used to push files to virtual device or shell access.
Compiler
There are many howtos how to build Android crosscompile environment. There are some know issues:
- No java5 in modern distribution (I used 9.04 repositories on my 9.10 ubuntu)
- gcc-4.3 needed but gcc-4.4 installed (I have both installed and moved symlinks)
- Errors: java.util.zip.ZipException: duplicate entry: hyts_Foo.c (I just deleted all dublicate files)
I suggest to use droid-wrapper (or some other script) to make things easier. Just install it with make install, and use it with:
DROID_TARGET=generic DROID_ROOT=/home/rantalai/mydroid/ droid-gcc main.cOr
export DROID_TARGET=generic export DROID_ROOT=/home/rantalai/mydroid/and then
makeCompiling
I got hello world compiled and pushed to virtual device (emulator must be first running).
droid-gcc hello.c adb push a.out /data/helloFirst parameter is filename, second is target filename with path. Data-folder is writable.
Running
In virtual phone there is 'Dev Tools' -> 'Terminal Emulator'. Then I typed /data/hello
It is very limited shell and there are no permissions to ls data.
I found and tested precompiled Bash 3.2.
wget http://pub.mzet.net/bash chmod a+x bash adb push bash /data/bashGraphical
There are no X running, so I needed some other way to make graphical application. There were GLES examples in android-git but they didn't work very well, screen flickered etc.
I read that SDL 1.2.13 can be compiled for Android. There are workers with newer (1.2.14) SDL. And even android port. But 1.2.13 was enough for me.
I got it compiled and tested with testbitmap.c (I first changed resolution to 320x240 in line 99)
droid-gcc testbitmap.c -I../include -L../ -lSDL adb push a.out /data/test adb shell /data/testFor some reason I can't start this SDL-test on phones terminal ("No available video device").
Then I found that SDL and OpenGL can be mixed together with tinysdgl and there was instructions for android (there were some missing parts).
I got it compiled and now I can compile examples. First I tuned resolutions to 320X240, then I copied mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/lib/gcc/arm-eabi/4.3.1/libgcc.a to working directory (there is some issue).
droid-gcc -static -I../include/ -I../../../SDL-1.2.13/include/ -c gears.c droid-ld -static gears.o -o gears -L../lib -lTinySDGL -L../../../SDL-1.2.13 -lSDL libgcc.aOn the video, when I move camera and there are lagging, it is because emulator doesn't recognize pressed mouse button, but only clicking. It has about 16fps all the time.
droid-gcc -static -I../include/ -I../../../SDL-1.2.13/include/ -c triangle.c droid-ld -static triangle.o -o triangle -L../lib -lTinySDGL -lTinyGLU -L../../../SDL-1.2.13 -lSDL libgcc.aAnd lastly there are my library for plotting mathematical functions, called aaplot.
And code for aaplot (GPLv3).
Real device
And then I got Real Android device, Motorola Milestone (Motodroid), in my hand. I thought that everything working on emulator will work on real device. First I had problems with connecting it to my computer (until I update phone's firmware and then it worked). Then I tried to push my binaries to phone with adb and it sayd: "you can not root on a production build of android". I was very disappointed of Motorola. I think best thing of Android is that it is not iPhone. User should has access to own device without jailbreaking.
Read more about discussion of root access.
Read more about jailbreaking (rooting) of Milestone. I didn't get this working, maybe it is because I had too new firmware (because of that USB connection bug). If you got aaplot running on real android device, drop me a post.



androidz said
Cool Android emulator… Thanks for the Info…