I this post I will talk about the extra steps to build a usable Lollipop (5.1.1) ROM for LG Nexus 5 (hammerhead) device. Most of the functionalities work out of box (bluetooh, Wifi tethering, camera, etc), but there are some show-stoppers.

LGE Vendor Blobs

For some unknown reason, the official LGE vendor blobs does not work out of the box, at least for Sprint phones. More specifically:

  • No cellular data connection.

  • No Sprint hidden menu app.

  • Can not update cellular profile and PRL. (Settings->More->Cellular Networks->Carrier Settings)

I had this issue for KitKat before. Please refer to my previous post on how I resolved it last time. Long story short, I repeated the steps there and come up with a LGE vendor blob repo that fixes the problems mentioned above.

Just clone the repo, put it in /vendor/lge/ directory in your AOSP root, and check out the for_android-5.1.1_r3 tag.

Apparently the repo was built specifically for android-5.1.1_r3 tag from AOSP, but they should work for other 5.1.1 revisions as well. If not, just follow the steps in my previous post to update the binaries.

Google Apps

By default, AOSP does no contain any Google apps and services, there are many resources online. I put up a version in this repo which contains pretty much most of the major Google apps and services.

A special note: do not attempt to push too many Gapps, otherwise you could easily exceed the 1GB limit on system partition size!

Fused Location Provider

Fused location provider let your phone get more accurate location much faster. It is provided through Google services so it is not enabled by default in AOSP.

This patch enables fused location service (in device/lge/hammerhead).

diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml
index 8caef0c..a807ddc 100644
--- a/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/overlay/frameworks/base/core/res/res/values/config.xml
@@ -287,4 +287,19 @@
         <item>hsupa:4094,87380,704512,4096,16384,110208</item>
     </string-array>

+    <!-- Enable overlay for all location components. -->
+    <bool name="config_enableNetworkLocationOverlay" translatable="false">true</bool>
+    <bool name="config_enableFusedLocationOverlay" translatable="false">true</bool>
+    <bool name="config_enableGeocoderOverlay" translatable="false">true</bool>
+    <bool name="config_enableGeofenceOverlay" translatable="false">true</bool>
+
+    <!--
+      Sets the package names whose certificates should be used to
+      verify location providers are allowed to be loaded.
+    -->
+    <string-array name="config_locationProviderPackageNames" translatable="false">
+      <item>com.google.android.gms</item>
+      <item>com.android.location.fused</item>
+    </string-array>
 </resources>

Build Kernel In-Tree

This is optional, but is a must if you want to do kernel development. Please refer to my previous post on how to integrate the kernel source into AOSP so that it gets built together with the rest of AOSP.