I’ve done this before and I’m doing it again… Tedious as it is — and trust me, it’s tedious — I’ve decided to transcribe another episode of a worthy podcast.
You might remember me mentioning Mobile Dynasty in a previous post. Its latest episode is particularly great in that it pretty much unites the crew from the old Droid Nation podcast, where I learned much of what I know today about Android modding.
Jonathan Nadeau is a bit of a Linux superstar who is starting to develop custom firmware for Android. Plot twist: he’s blind. But he hasn’t let that get in the way of any challenge that he takes on. And, as host Stephen McLaughlin puts it, Jonathan is “the only person I know who’s jumped into developing ROMs, yet can speak English.”
So without further ado, here are my unofficial show notes for Mobile Dynasty Episode #007…
You can download the episode (and subscribe to the podcast) here.
Or, if you want to listen while you read along, here’s an embed of the raw video from the original Google Hangout.
Android is accessible via a screen reader called TalkBack. The ROM(s) that Jonathan is working on will be fully accessible from boot.
While drag and drop ROM kitchens exist, (1) they’re not accessible, and (2) they’re limited in terms of devices you can build for, etc. Jonathan prefers Git and a text editor.
Ubuntu 12.04 LTS (the 64-bit version) is the environment of choice for “proper” ROM development, according to RootzWiki and XDA. An additional 20 or so packages will be need to be installed. You’ll also need Java — not the freedom-loving OpenJDK but the proprietary version from Oracle.
You’ll be using a programming language called Bash — and setting some variables in your .bashrc file in order to run commands using assets from different folders on your computer. And you’ll need to set udev rules. Jonathan did a particularly good job of explaining udev — all it does is tell your computer: “Hey, I’m going to be plugging in these devices, make sure you notice them on your USB port.”
Finally you’ll need the Android SDK. Jonathan indicated that you could get this directly from a Linux terminal, but you can also download it from Google via your web browser.
Choose Your Source
Now it’s time to decide what to build off of. There are three main Android sources to pull code from: AOSP from Google, AOKP and CyanogenMod. From each you can download the master branch, which contains the source for all supported devices, or a specific branch for one device.
If you’re pulling from AOKP or Cyanogen you can poke around the source and comment out apps you don’t want — like the Apollo music player, for example. You can also add code to install additional apps, so long as you have their .apk files handy. When it comes time to compile, you run “various commands” to produce a zip file, with your additional apps built in and the ones you don’t want left out.
Apparently the single most important file on any Android device is actually a text file called build.prop — it’s basically a shell script that gives the device a specific set of instructions on boot.
Lunch, Brunch & Bacon
If you’re building your ROM from AOSP (master branch) there are an additional set of commands called lunch, brunch and bacon — plus a possible fourth that Jonathan couldn’t recall. The usage example provided was something like this: type the command “lunch” and you’ll get a numbered list of every ROM for every available device; to build for a device from that list, enter “bacon” plus the device number. Kooky.
Jonathan was asked about the differences between AOSP, AOKP and Cyanogen. AOSP, being from Google, has binary blobs (radio firmware) for Nexus devices only; there’s another branch called “generic” which OEMs presumably use to build their own Android ROMs. A benefit to using AOKP or Cyanogen is that proprietary drivers for other devices — those from Samsung, for example — are also included.
Fun fact: Cyanogen has a GitHub repo called The Muppets, where you can download the binary blobs for all the devices they support. This isn’t exactly legal, but it’s a valuable resource for ROM builders.
Jonathan is building his accessible ROMs from AOSP, rather than tearing down and rebuilding source code from either AOKP or Cyanogen.
Here’s the best part: in addition to his accessible spin on Ubuntu, Jonathan has rolled all the required tweaks for Android development into a distro called Droidbuntu. It’s not perfect — OpenJDK needs to be replaced with Oracle’s Java, and the Android SDK isn’t present, but everything else you need is there. If you can wait, Droidbuntu will soon be updated with these changes.
I thought this was a particularly insightful look into how to “bake” a custom Android ROM — and to be honest, I was surprised that I actually understood most of it. It’s pretty amazing that the tools and sources for Android are all freely available, and that anyone can spin their own custom firmware if they want to dive in. Like Linux on the desktop, this really sets Android apart from other mobile platforms.
If there’s anything that I haven’t made clear, by all means let me know. Likewise, if there’s something I got wrong, school me!