Open Devices

For some of the Xperia™ devices, we provide Android™ Open Source Project (AOSP) device configurations on GitHub. This means that the software will be open for you as a developer to use and contribute to. This is a way for us to support the open Android community, and it is also a tool for us to facilitate and verify contributions to AOSP.

Build AOSP Marshmallow 6.0

1. Prepare your Java environment

To prevent errors generated by having the wrong version of Java installed on your computer, we will start by removing any conflicting Java version and adding the correct version. Java 7 is needed to build Android 6.x.x.

  1. On your computer: In a terminal window, enter the following command:

sudo apt-get purge openjdk-\* icedtea-\* icedtea6-\*

  1. A guide will appear on the screen. Follow the instructions to remove Java.
  2. Once Java is removed, install the correct version of Java by entering the following commands in a terminal window:

sudo apt-get update
sudo apt-get install openjdk-7-jdk
java -version

You should now see something similar to the following in your terminal window:

java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.3)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)

2. Install the necessary tools to make an Android build

To be able to build the images that you will later flash on your device, you need to install a set of software packages and libraries which give you the tools to compile source code into binary files that can run on your device.

  1. In a terminal window, enter the following commands, all at once:

sudo apt-get install bison g++-multilib git gperf libxml2-utils make zlib1g-dev:i386 zip

Now you have the tools you need to compile and build a flashable AOSP image. Follow the steps below to learn how to do this.

3. Download Repo tool and set PATH

In order to access and use the source code available on the Sonyxperiadev GitHub, you need to install the Repo tool that is provided by Google.

  1. In a terminal window, enter the following commands to download and install Repo, and set the right access rules for it:

mkdir ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

  1. Open the bashrc file included in the repo tool:

nano ~/.bashrc

  1. To set the right path for your local bin folder, paste the following code to a new line at the very bottom of the bashrc file, and then save the file using Ctrl+X:

export PATH=~/bin:$PATH

  1. Reload bash variables to include the new path:

source ~/.bashrc

Now you have all the tools you need and can move on to initializing the AOSP code and Xperia device configurations. Learn how to do this below!

4. Initialise the AOSP tree

The next step is to create a folder on your computer, and then download the Android source code to it. Follow the steps below to do this.

  1. In a terminal window, enter the following commands:

mkdir ~/android
cd ~/android
repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.0_r26

Note: The downloaded data is around 20 GB, and for a successful build you need 100 GB free hard disk space. Depending on your Internet connection, it can take quite a long time to download the source code. When the download has finished you have the basic AOSP source code on your computer.

  1. Create and open a file where you will later add Sony’s repos containing the device configurations for Xperia devices, by entering the following commands:

mkdir .repo/local_manifests/
nano .repo/local_manifests/sony.xml

  1. Add repos for Xperia devices by copying and pasting the following text into the file, and then save the file using Ctrl+X:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="sony" fetch="git://github.com/sonyxperiadev/" />
<remove-project name="platform/hardware/qcom/camera" />
<project path="device/sony/sepolicy" name="device-sony-sepolicy" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/amami" name="device-sony-amami" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/aries" name="device-sony-aries" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/castor" name="device-sony-castor" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/castor_windy" name="device-sony-castor_windy" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/common" name="device-sony-common" groups="device" remote="sony" revision="m-mr0" />
<project path="device/sony/common-headers" name="device-sony-common-headers" groups="device" remote="sony" revision="aosp/LA.BF64.1.2.2_rb4.7" />
<project path="device/sony/common-kernel" name="vendor-sony-kernel" groups="device" remote="sony" revision="aosp/LA.BF64.1.2.2_rb4.7" />
<project path="device/sony/eagle" name="device-sony-eagle" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/flamingo" name="device-sony-flamingo" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/honami" name="device-sony-honami" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/kanuti" name="device-sony-kanuti" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/ivy" name="device-sony-ivy" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/karin" name="device-sony-karin" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/karin_windy" name="device-sony-karin_windy" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/kitakami" name="device-sony-kitakami" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/leo" name="device-sony-leo" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/rhine" name="device-sony-rhine" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/satsuki" name="device-sony-satsuki" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/scorpion" name="device-sony-scorpion" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/scorpion_windy" name="device-sony-scorpion_windy" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/seagull" name="device-sony-seagull" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/shinano" name="device-sony-shinano" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/sirius" name="device-sony-sirius" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/sumire" name="device-sony-sumire" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/suzuran" name="device-sony-suzuran" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/tianchi" name="device-sony-tianchi" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/togari" name="device-sony-togari" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/tulip" name="device-sony-tulip" groups="device" remote="sony" revision="m-mr1" />
<project path="device/sony/yukon" name="device-sony-yukon" groups="device" remote="sony" revision="m-mr1" />
<project path="hardware/qcom/camera" name="camera" groups="device" remote="sony" revision="aosp/LA.BF64.1.2.2_rb4.7" />
<project path="kernel/sony/msm" name="kernel" groups="device" remote="sony" revision="aosp/LA.BF64.1.2.2_rb4.7" />
<project path="vendor/qcom/opensource/dataservices" name="vendor-qcom-opensource-dataservices" groups="device" remote="sony" revision="master" />
<project path="vendor/sony-oss/thermanager" name="thermanager" groups="device" remote="sony" revision="master" />
<project path="vendor/sony-oss/mkqcdtbootimg" name="mkqcdtbootimg" groups="device" remote="sony" revision="master" />
<project path="vendor/sony-oss/macaddrsetup" name="macaddrsetup" groups="device" remote="sony" revision="master" />
<project path="vendor/sony-oss/timekeep" name="timekeep" groups="device" remote="sony" revision="master" />
</manifest>

Note: These repos include a precompiled kernel. If you want to change or improve the kernel, you can recompile a new kernel. The new kernel binary should be placed in the corresponding device repository along with new kernel modules for wireless hardware. For more information, see the page how to rebuild kernels for Xperia devices.

  1. Find and download the software binaries for the device you want to use on Sony’s AOSP for Xperia devices
  2. In the root of your Android code tree, unzip the software binaries file you downloaded.
  3. You should now have a number of new directories in your vendor To make sure, enter the following command in a terminal window:

ls vendor/sony

This should give you the output:

amami aries castor eagle flamingo honami kanuti ivy karin karin_windy kitakami leo rhine satsuki scorpion seagull shinano sirius sumire suzuran tianchi togari tulip yukon

  1. To download the code into the device repos created above, run the command:
repo sync

5. Add necessary patches from the AOSP upstream branch

In order for certain functions to work on the hardware in Xperia devices, you need to add a set of patches from the AOSP master branch. This is done by executing the following commands:

  1. In a terminal window, enter:

cd external/libnfc-nci
git fetch https://android.googlesource.com/platform/external/libnfc-nci refs/changes/61/170861/2 && git cherry-pick FETCH_HEAD
cd ../toybox
git fetch https://android.googlesource.com/platform/external/toybox refs/changes/53/265153/1 && git cherry-pick FETCH_HEAD
cd ../../hardware/qcom/gps
git revert --no-edit 5c7552e789e4f039bebb09b972425a6cb47fc8e8
cd ../display
git fetch https://android.googlesource.com/platform/hardware/qcom/display refs/changes/70/238470/1 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/hardware/qcom/display refs/changes/52/265052/1 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/hardware/qcom/display refs/changes/53/265053/1 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/hardware/qcom/display refs/changes/92/265092/1 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/hardware/qcom/display refs/changes/54/274454/1 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/hardware/qcom/display refs/changes/55/274455/1 && git cherry-pick FETCH_HEAD
cd ../audio
git cherry-pick 582e0a5e965897ea54ecfa5fe206797dab577a45
git cherry-pick 48e428ecccee5c585a5bcc2297ea21802861df6e
git fetch https://android.googlesource.com/platform/hardware/qcom/audio refs/changes/10/250410/1 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/hardware/qcom/audio refs/changes/13/252313/1 && git cherry-pick FETCH_HEAD
cd ../media
git fetch https://android.googlesource.com/platform/hardware/qcom/media refs/changes/90/258490/1 && git cherry-pick FETCH_HEAD
cd ../keymaster
git cherry-pick 888834f9aba0609222c6e6bbd86bd6625af28746
git fetch https://android.googlesource.com/platform/hardware/qcom/keymaster refs/changes/70/212570/5 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/hardware/qcom/keymaster refs/changes/80/212580/2 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/hardware/qcom/keymaster refs/changes/61/213261/1 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/hardware/qcom/keymaster refs/changes/21/245721/1 && git cherry-pick FETCH_HEAD
cd ../../broadcom/libbt/
git fetch https://android.googlesource.com/platform/hardware/broadcom/libbt refs/changes/17/114817/2 && git cherry-pick FETCH_HEAD
cd ../../../system/core
git cherry-pick 9cb3d3ccf49bf0fd484563fbf611c68789d5b8a9
git fetch https://android.googlesource.com/platform/system/core refs/changes/92/269692/1 && git cherry-pick FETCH_HEAD
cd ../../packages/apps/Nfc
git revert --no-edit 988c3fff5470a1de3a880bd07fa438cc47e283c8
cd ../../../../../

Note: This information will be updated continuously for new Android versions and new devices, so you should always check the AOSP section on Developer World for the latest patches.

6. Build AOSP images that can be flashed

Now you are ready to build AOSP images that can be flashed to a device. To do this, you have to point out your specific device and then start building the images.

  1. Enter the following commands:

source build/envsetup.sh && lunch

  1. When prompted, pick the number corresponding to your device in the list displayed and press enter.
  2. To start the build, type:
make –j <insert the cpu thread number of your computer>

This step will take a long time. It may take up to several hours, so go grab a coffee or play a game while you wait. When it’s done, AOSP images that can be flashed to a device will be ready.

7. Flash AOSP image to your device

Before you flash the images that you built in the previous step, you must make sure your device is unlocked through Sony’s unlock bootloader service. Then you can flash the AOSP images on your device by following these steps:

  1. On your device: Connect the device to your computer in Fastboot mode, by pressing volume up while inserting the USB cable. When the device is in Fastboot mode, the LED on the device will be illuminated in blue.
  2. On your computer: Flash the boot, system and userdata images by entering the following commands in a terminal window:

fastboot –S 256M flash boot out/target/product//boot.img
fastboot –S 256M flash system out/target/product//system.img
fastboot –S 256M flash userdata out/target/product//userdata.img

Note: It’s not necessary to re-flash the userdata every time you flash your device, but sometimes the new software is incompatible with previous content, which might result in a device that doesn’t boot. If you experience this, try to re-flash only the userdata again.

  1. Now when you disconnect your device from the computer and start it, it will be running AOSP.

We hope this tutorial will help you get started building your own version of Android for Xperia devices.

Feel free to contribute your work back to our repositories on our Sonyxperiadev GitHub account.

We will review and merge your code as soon as possible.