As the title mentions, this is a guide by a noob which spells out the steps that build a lineage ROM. What the title does not mention is that this article is aimed at noobs as well. Now lets get down to business.
Disclaimer: Please note that by following the steps as mentioned in this article you can seriously damage your smart phone. There is good chance your phone would be bricked i.e. effectively be rendered useless and cause a lot of frustration, irritation and make you pull at your hair. If you hit that point later, Please do not look towards me to save you since I am also new to this and like you learning how to traverse this parallel universe of custom ROM development. That being said do not despair. As the saying goes browse and you shall find – Check out the internet and you would find others who have messed up their smartphones and yet somehow lived to tell the tale. In most cases you would be able to revive your phone. Ideally do not use your daily driver for such experimentation.
After reading all this if still want to go ahead then read on.
Build a custom lineage ROM for your smart phone. I own a Xiaomi MiA1 and used the same as my target phone. You may have a different model but technically the build steps should be the same for all android phone models.
A linux based or a Mac computer.
Windows computers do not directly support the tools required for this type of development. As such they are not being covered in this article.
The recommended operating system is Ubuntu.
- A basic understanding of Linux based OS specifically Ubuntu.
- Ability to type and use the command line. Write or copy paste commands in the Ubuntu konsole.
- A basic understanding of programming concepts, read and update XML files, understand error messages.
- Fast internet access.
- Steady electricity supply.
- Lots and lots of patience.
You will understand why the last three requirement are mentioned as you read on
Hardware recommendations – ideally your system should exceed these conditions
- 64 bit environment
- 100 GB of free hard disk space
- 16 GB RAM / swap space.
My hardware configuration:
- Intel i5 processor
- 16 GB RAM
- 1 TB hard disk.
Please note even with this configuration it takes me about 3 hours to build the code!
I used the Ubuntu 18.04 build which is the latest at the time of writing. I will be covering only the Ubuntu OS as part of this article as I do not have a Mac and as such it is out of scope for me!
Steps to build the Custom ROM from scratch
Step 1: Setup Ubuntu
Assuming you have set up the Ubuntu OS if not click this link for a detailed explanation of the installation of Ubuntu.
Step 2: Installation of Java Development Kit
In a console window type or copy past the below commands.
Wait for one line of command to execute before typing or pasting the next
sudo apt-get update
sudo apt-get install openjdk-8-jdk
Please note the sudo command will ask you to enter your password.
Step 3: Installing required packages ( this is a single line not multiple lines)
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
Step 4: Configure your smart phone access
These tools will provide you access to the device once you have complete the
build and are ready to flash the Rom.
Step 5: Creating your work directories
Step 6: Installing Repo
The Android source tree is located in a Git repository and is hosted by Google. The Git repository includes metadata for the Android source. Repo is a tool that makes it easier to work with Git .
mkdir -p ~/bin
sudo apt-get install android-tools-adb
sudo apt-get install fastboot
mkdir -p ~//lineage
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
Next type below command to make repo executable.
chmod a+x ~/bin/repo
Step 7: Initialize your lineage source
Now change directory and move into the newly created lineage folder.
You can do this either by Opening nautilus and right clicking inside the lineage folder and selected ‘Open Terminal here’ or by typing the below command
Important: Ensure you are in the lineage folder before executing the next set of commands
Step 8: Configure your Git user
You can set these on the GitHub website. Once you have set your GitHub web site
Type paste these commands. Replace the text within “ ” with your credentials.
git config –global user.name “Your Name”
git config –global user.email “email@example.com”
Step 9: Initialize the repo
repo init -u https://github.com/LineageOS/android.git -b lineage-15.1
A successful initialization will end with a message stating that Repo is initialized in your working directory. Your client directory should now contain a .repo directory where files such as the manifest will be kept.
Step 8: Download the source code
This is the step where you will realize the importance of having a fast internet connection. The source code size is about 30 – 35 GB. I have a 10 mbps line and at times the download speed shoots up to 20- 25 mbps!!! Yet it takes me anything from 4 – 10 hours to download the code!
My suggestion is check the time when your local ISP download speeds are at its best. For me it is during the night. I set the download up at night and go to sleep!
The command to type paste to get the source code is :
repo sync -c -f --force-sync --no-clone-bundle --no-tags --optimized-fetch –prune
Optional Step 8 a: Take a backup of your source code
I copy the entire folder and keep a copy on an external device. This is just in case there is any need for me to format my hard disk. I do not copy the .Repo and .Cache folders on to my backup. To check hidden folders press Ctrl + H.
Step 9: Get the source code for your specific device.
This is an important part to understand. The code which you downloaded is generic in nature. For your particular device you would need to get files which are specific to your device.
The source for all these files is github. You are targeting three sets of folders – Device, Kernel and vendor. The git clone commands given below are for the tissot or Xiaomi Mia1 phone. Similarly other phones have their locations on GitHub from where you can get files specific to them.
git clone https://github.com/TheScarastic/andr…msm8953-common -b lineage-15.1 device/xiaomi/msm8953
git clone https://github.com/TheScarastic/andr…_xiaomi_tissot -b lineage-15.1 device/xiaomi/tissot
git clone https://github.com/TheScarastic/prop…_vendor_xiaomi -b lineage-15.1 vendor/xiaomi
git clone https://github.com/Tissot-Developmen…_xiaomi_tissot -b 8.1 kernel/xiaomi/msm8953
The format of the command will remain the same for all phones only check the url and the folder names.
Step 10: Modify Caching to speed up the build process.
Type paste one command at a time and wait for it to execute before posting the next.
prebuilts/misc/linux-x86/ccache/ccache -M 50G
Step 11: Configure JACK
JACK is the java compiler and can cause crashes – believe me! A simple fix is this command which you type next
export _JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"
Step 12: Cleaning up the build folder
Step 13: Initializing the build
Step 14: Starting the build
Now sit back and wait for a few hours. Check the screen, occasionally for what is happening. There will a ton or warnings showing up.Do not worry about the warnings. Read the message displayed on the screen for clues as to what is happening.
The entire build took about 3 hours on my machine with nothing else running. This duration can increase and decrease based on the configuration of your build machine. It can also depend on the files downloaded during the Repo sync process.
Finally you will get the .iso file in a folder labeled out. Check the screen shot above. It shows the build settings screen. Have been using it as on my main driver and so far so good.
Handling Error messages:
There is a very good chance that the build will stop many times. When this happens read the error message and then try googling it. I can guarantee that there would be number of other people across the world who have faced similar issues while building their custom ROM’s. See what solutions have been suggested and try them out. It took me almost a week to get my first build right!
Then in the same day I got 2 builds in a row that were successful! It has a lot with having all the right files in the build environment + a good hardware configuration + lots of luck!
At times the error message which stopped the build could report that a particular file is not found in a particular folder. Do a search in the base lineage folder and see if the file is there in any other folder. Simply copy it to the folder where the build is expecting it. After that run the build commands again and restart the build.
Remember to use your default login. I used su – superuser and ran into trouble while doing a repo with the normal login. So I do not use su for the build and do the entire build and repo sync with my login. Since i installed the system Ubuntu is satisfied with my credentials.
As I mentioned at the start this is my first shot at building a custom ROM. While there is not exactly much customization being done here as the source code is available on Lineage.com and the files specific to the device were shared by various developers on GitHub. All that I have done is that I downloaded the code and recompiled it on my machine. Having said that there is a sense of pride that you feel when you see your name in the settings tab!!!!
Hope this was a easy to understand guide to help noobs around the world do their own custom ROM development. This article is as I mentioned a guide, you should refer the links given below and get a complete understanding of the process of building ROM’s before you start on your own. So good luck with your custom ROM building!!!
Some important links which you should visit to understand how the experts do it.
Build ROM from source for Tissot
The Android Source Code
How to build your own custom Android ROM
To download the build click the links below:
Please note that you are downloading and installing the build at your own risk. I will not be responsible for your phone bricking up and also will not be able to support you in case of any issues.
On a personal note I have been using the same build on my daily driver for the last couple of days with no issues. I have GApps installed and am able to use some 46 apps with no issues including Twitter, Whatsapp, Quora, XDA, WordPress among others. The phone camera and fingerprint features are working normally.
6 thoughts on “A Noob’s guide to building a Lineage ROM”
The sync command contains an error in the syntax, but this one works:
repo sync -c –no-clone-bundle –no-tags –optimized-fetch –prune
Same for the java compiler: JACK_SERVER_VM_ARGUMENTS=”-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m”
This article was written some time back……As mentioned in the text I had referenced an article on XDA to build my first ROM. the link to the article is given below the post. I add the link here again https://forum.xda-developers.com/mi-a1/how-to/guide-build-rom-source-tissot-t3754723. The syntax used in this article was taken from this XDA article. I had successfully compiled the ROM and even posted an article about it on XDA about the build….https://forum.xda-developers.com/mi-a1/how-to/noob-tries-hand-rom-development-mia1-t3812627
Gracias, una guía muy clara.
Mr.Manoj, this is a nice guide you’ve presented, it’s as good as executing the batch file “autoexec.bat” for custom ROM installation.