Categories
Uncategorized

Hello World, my first android application in 3 steps (CLI only)

The official android webpage suggests that Eclipse is the best tool for developing. I tried really hard to set it up, but after 2 days, 6 IRC channels and many different config switches tested I gave up. PermGen out of memory error finally won with my patience. Looks like my problems were caused by java virtual machine I tried to use, but it makes no difference at all – Eclipse was unusable. I decided to got the CLI way and I’m not disappointed.

A few words of explanation: I’ll show how to create a simple “Hello World” app using just one console (or terminal window), but it’s much more convinent to use 2 or 3 of them to avoid changing directory all the time.

Three steps to my first application

1. Go to “tools” directory in android-sdk:
przemo@pldmachine ~$ cd ~/android/sdk/tools/
and type (in one line): ./android create project
–target android-8
–name Test
–path /home/users/przemo/workspace/Test
–activity TestActivity
–package com.android.test

przemo@pldmachine$ ./android create project --target android-8 --name Test --path /home/users/przemo/workspace/Test --activity TestActivity --package com.android.test
Created project directory: /home/users/przemo/workspace/Test
Created directory /home/users/przemo/workspace/Test/src/com/android/test
Added file /home/users/przemo/workspace/Test/src/com/android/test/TestActivity.java
Created directory /home/users/przemo/workspace/Test/res
Created directory /home/users/przemo/workspace/Test/bin
Created directory /home/users/przemo/workspace/Test/libs
Created directory /home/users/przemo/workspace/Test/res/values
Added file /home/users/przemo/workspace/Test/res/values/strings.xml
Created directory /home/users/przemo/workspace/Test/res/layout
Added file /home/users/przemo/workspace/Test/res/layout/main.xml
Created directory /home/users/przemo/workspace/Test/res/drawable-hdpi
Created directory /home/users/przemo/workspace/Test/res/drawable-mdpi
Created directory /home/users/przemo/workspace/Test/res/drawable-ldpi
Added file /home/users/przemo/workspace/Test/AndroidManifest.xml
Added file /home/users/przemo/workspace/Test/build.xml
Added file /home/users/przemo/workspace/Test/proguard.cfg

As you can see “android” did all the boring job of creating app skeleton for us.

2. Go to the application directory and compile it.przemo@pldmachine$ cd ~/workspace/Test/
przemo@pldmachine$ ant debug

[removed compile output]
.. debug:
        echo Running zip align on final apk...
        echo Debug Package: /home/users/przemo/workspace/Test/bin/Test-debug.apk
BUILD SUCCESSFUL
Total time: 4 seconds
przemo@pldmachine ~/workspace/Test$

Those are only last few lines of a sucessful build. Now we’re ready to install the app 3. Go to “platform-tools” and upload the app to phone:

przemo@pldmachine$ cd ~/android/sdk/platform-tools/
przemo@pldmachine$ ./adb -d install /home/users/przemo/workspace/Test/bin/Test-debug.apk
*daemon not running. starting it now on port 5037 *
*daemon started successfully *
233 KB/s (13223 bytes in 0.055s) pkg: /data/local/tmp/Test-debug.apk Success
przemo@pldmachine$

Now you should see a new application named TestActivity in your phone. It doesn’t do anything useful, but that’s my first android app!

Categories
Uncategorized

LG Optimus One P500 – first steps of an android developer

I got my LG P500 roughtly 30 hours ago, so it’s high time to share the first impressions. If you’re looking for a review if the phone is good, responsive, have a good display and so on – yes, the phone is quite good and I like it. I bought P500 to get some hands-on experience with android, so the most important thing for me was to get access from android sdk. It’s really easy if you’re a linux user. If you’re still using windows – I’m sorry that’s a linux fanboy blog. Switch and come back later….

Now let’s move to some more interesting stuff.

First, you have to switch on USB debugging on P500. It’s in Settings/Applications/Development. Next connect USB cable. Do not select option to connect as an USB storage. Open a terminal and type “lsusb” to check if your linuxbox sees the phone:

przemo@pldmachine ~$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 003 Device 002: ID 03f0:011d Hewlett-Packard Integrated Bluetooth Module
Bus 001 Device 015: ID 1004:618e LG Electronics, Inc.

OK, we’ve got it! Now go to your android sdk directory (how to install android-sdk) and type:

przemo@pldmachine ~/android/sdk$ platform-tools/adb devices

The result will look probably like this:

przemo@pldmachine ~/android/sdk$ platform-tools/adb devices
List of devices attached
???????????? no permissions

Which means that the LG P500 is connected but you don’t have enough access rights. To fix it we have to define a new rule for udev. You have to be root or use sudo to do it. The file should be located in /etc/udev/rules.d/51-android.rules and it should contain just one line:

SUBSYSTEM=="usb", [SYSFS]ATTR{idVendor}=="1004", MODE="0666"

It used to be SYSFS, but now it’s ATTR. It defines that udev should give you full access rights when a LG device (idVendor=”1004″) is connected – 1004 is the same number that is bolded in the results of lsusb command. The last touch, changing access rights to the rules file:

chmod a+r /etc/udev/rules.d/51-android.rules

Now reconnect your phone to get full access rights:

przemo@pldmachine ~/android/sdk$ platform-tools/adb devices
List of devices attached
80A354043043410507 device

We can test if it really works, let’s try to open remote shell on our shiny P500:
przemo@pldmachine ~/android/sdk$ platform-tools/adb shell

$ ls -l
dr-x------ root    root             2011-02-02 13:03 config
drwxrwx--- system  cache            2011-02-03 18:23 cache
lrwxrwxrwx root    root             2011-02-02 13:03 sdcard -> /mnt/sdcard
drwxr-xr-x root    root             2011-02-02 13:03 acct
drwxrwxr-x root    system           2011-02-02 13:03 mnt
lrwxrwxrwx root    root             2011-02-02 13:03 d -> /sys/kernel/debug
lrwxrwxrwx root    root             2011-02-02 13:03 etc -> /system/etc
drwxrwx--- lgdrm   lgdrm_acc        1980-01-06 00:19 lgdrm
drwxrwx--x system  system           2011-02-02 13:03 persist
drwxr-xr-x root    root             2010-10-01 22:48 system
drwxr-xr-x root    root             1970-01-01 01:00 sys
drwxr-x--- root    root             1970-01-01 01:00 sbin
dr-xr-xr-x root    root             1970-01-01 01:00 proc
-rwxr-x--- root    root       16316 1970-01-01 01:00 initlogo.rle
-rwxr-x--- root    root        9323 1970-01-01 01:00 init.thunderg.rc
-rwxr-x--- root    root       18323 1970-01-01 01:00 init.rc
-rwxr-x--- root    root        4869 1970-01-01 01:00 init.qcom.rc
-rwxr-x--- root    root        3352 1970-01-01 01:00 init.qcom.post_boot.sh
-rwxr-x--- root    root         122 1970-01-01 01:00 init.lge.hidden_reset.sh
-rwxr-x--- root    root      357656 1970-01-01 01:00 initv
-rw-r--r-- root    root        1152 1970-01-01 01:00 fota.rc
-rw-r--r-- root    root         118 1970-01-01 01:00 default.prop
drwxrwx--x system  system           1980-01-06 00:19 data
drwxr-xr-x root    root             1970-01-01 01:00 chargerimages
drwxr-xr-x root    root             1970-01-01 01:00 bootimages
drwx------ root    root             2010-10-01 22:03 root
drwxr-xr-x root    root             2011-02-03 22:35 dev

Hey, it looks almost like a normal linux box root directory! I like it…. 🙂