As a tinkerer, I was interested in finding out how the app stores the bird data and what modification opportunities may exist.
Mainly, I discovered that the bird database is in an sqlite file (/data/data/com.coolideas.eproducts.ausbirds/databases/ausbirds.s3db) and the bird images, bird sounds, bird ranges, and descriptive texts are packed into "edf" files (e.g., /data/data/com.coolideas.eproducts.ausbirds/files/eProducts/AusBirds/712.edf for bird 712)
All these results are on a rooted Nexus7 tablet running Android 4.2.1 and a Linux system running Debian "Squeeze". If you don't know what it means to do things like "adb pull" a file to your computer then please do not ask for help using the unpacker.
First, it was necessary to copy the file from the application's data directory to a directory readable by 'adb pull':
$ adb shell shell@android:/ $ su shell@android:/ # cp /data/data/com.coolideas.eproducts.ausbirds/databases/ausbirds.s3db /sdcard shell@android:/ # cp /data/data/com.coolideas.eproducts.ausbirds/files/eProducts/AusBirds/712.edf /sdcardnext, pull them over with 'adb pull on the Linux side:
$ adb pull /sdcard/ausbirds.s3db $ adb pull /sdcard/712.edf
Now you can look at the database to find out what bird 712 even is:
$ sqlite sqlite> select CommonName from Birds where _id=712; Grey Butcherbird sqlite> select ScientificName from Birds where _id=712; Cracticus torquatus
And run the attached script to split out its data files:
$ python unedf.py 712.edfAfter unpacking, the bird images have names like 712-1-*.jpg; the bird calls have names like 712-1-*.mp3; the range map has a name like 712-2-0.jpg; and the descriptive text (which is a fragment of HTML) has a name like 712-3-0.htmlf. (in principle the container can accomodate multiple range images or multiple html fragments, but I didn't yet observe any files to have more than one)
The packed format is quite simple and does not involve any compression or encryption (jpg and mp3 are quite compressed already so there would be no practical benefit to compressing the .edf file). It consists of a header and then all the files one after another. The header consists of 4 sub-headers (one for bird images, one for bird sounds, one for range map, and one for descriptive text). Each sub-header consists of a count of files as a 32-bit big-endian number, followed by that many (start, length) pairs, also 32-bit big-endian numbers.
Files currently attached to this page:
unedf.py | 779 bytes |
Entry first conceived on 1 December 2012, 1:12 UTC, last modified on 3 October 2013, 13:13 UTC
Website Copyright © 2004-2024 Jeff Epler