As Firefox for Android drops support for ancient versions of Android, I find my collection of test phones becoming less and less relevant. For instance, I have a Galaxy S that works fine but only runs Android 2.2.1 (API 8), and I have a Galaxy Nexus that runs Android 4.0.1 (API 14). I cannot run current builds of Firefox for Android on either phone, and, perhaps because I rooted them or otherwise messed around with them in the distant past, neither phone will upgrade to a newer version of Android.
I have been letting these phones gather dust while I test on emulators, but I recently needed a real phone and managed to breathe new life into the Galaxy Nexus using an AOSP build. I wanted all the development bells and whistles and a root shell, so I made a full-eng build and I updated the Galaxy Nexus to Android 4.3 (api 18) — good enough for Firefox for Android, at least for a while!
Basically, I followed the instructions at https://source.android.com/source/requirements.html, building on Ubuntu 14.04. For the Galaxy Nexus, that broke down to:
mkdir aosp cd aosp repo init -u https://android.googlesource.com/platform/manifest -b android-4.3_r1 # Galaxy Nexus repo sync (this can take several hours)
# Download all binaries from the relevant section of # https://developers.google.com/android/nexus/drivers . # I used "Galaxy Nexus (GSM/HSPA+) binaries for Android 4.3 (JWR66Y)". # Extract each (6x) downloaded archive, extracting into <aosp>. # Execute each (6x) .sh and accept prompts, populating <aosp>/vendor.
source build/envsetup.sh lunch full_maguro-eng # use update-alternatives to select Java 6; I needed all 5 of these sudo update-alternatives --config java sudo update-alternatives --config javac sudo update-alternatives --config javah sudo update-alternatives --config javadoc sudo update-alternatives --config javap make -j4 (this can take a couple of hours)
Once make completes, I had binaries in <aosp>/out/… I put the phone in bootloader mode (hold down Volume Up + Volume Down + Power to boot Galaxy Nexus), connected it by USB and executed “fastboot -w flashall”.
Actually, in my case, fastboot could not see the connected device, unless I ran it from root. In the root account, I didn’t have the right settings, so I needed to do something like:
sudo /bin/bash source build/envsetup.sh lunch full_maguro-eng fastboot -w flashall exit
If you are following along, don’t forget to undo your java update-alternatives when you are done!
It took some time to download and build, but the procedure was fairly straight-forward and the results excellent: I feel like I have a new phone, perfectly clean and functional — and rooted!
(I have had no similar luck with the Galaxy S: AOSP binaries are only supplied for Nexus devices, and I see no AOSP instructions for the Galaxy S. Maybe it’s time to recycle this one.)