5,595,918 Members 30,908 Now Online
XDA Developers Android and Mobile Development Forum

[Tutorial] Compile JB on Ubuntu

Tip us?
 
dastin1015
Old
(Last edited by dastin1015; 14th August 2013 at 10:28 PM.)
#1  
dastin1015's Avatar
Recognized Developer / Contributor - OP
Thanks Meter 10004
Posts: 3,699
Join Date: Dec 2010
Location: Chula Vista, CA

 
DONATE TO ME
Default [Tutorial] Compile JB on Ubuntu

NOTICE: I'm beginning to see this tutorial on numerous other sites. I'm fine with it being posted on other sites, as long as I am given credit and have your thread point back to here for the pieces that I have specifically written. I do not condone near verbatim or verbatim copy and pasting of my work or others work without credit. Please give credit where credit is due. Thank you.

07-17-12: I have not, nor shall I ever claim copyright.


To compile Jellybean on Ubuntu I'm going to first give you steps to set up your computer to get this thing rolling.

You MUST be running a 64 bit version of Ubuntu, 32 bit is not supported.

This will NOT make a fully functional ROM, but will give you a place to start. Also I CANNOT fix every error you run into.

READ the entire OP and make sure to properly follow instructions. Don't forget to search the thread as your question may have already been answered.

Please use Pastebin for all errors you run into. Posting a link is much easier than a long list of errors in the thread. Thank you.

You will need 25GB (or more) free to complete a single build, and up to 80GB (or more) for a full set of builds.

1) You need the following:
-JDK 6 if you wish to build Jellybean.
Code:
$ sudo apt-get install openjdk-6-jdk
-Python, which you can download from python.org. Or:
Code:
$ sudo apt-get install python
-Git, which you can find it at git-scm.com. Or:
Code:
$ sudo apt-get install git-core
-Android SDK:
  • Download the SDK here: http://developer.android.com/sdk/index.html
  • Extract the SDK and place it in your home directory.
  • I renamed my SDK to android-sdk to make it easier to navigate to.
  • Go to your home folder, press Ctrl+H to show hidden files, and open up your .bashrc file.
  • Add these lines at the bottom of the file:
    Code:
    # Android tools
    export PATH=${PATH}:~/android-sdk/tools
    export PATH=${PATH}:~/android-sdk/platform-tools
    export PATH=${PATH}:~/bin
  • Find your .profile file and add this at the bottom of the file:
    Code:
    PATH="$HOME/android-sdk/tools:$HOME/android-sdk/platform-tools:$PATH"
  • You have now successfully installed the Android SDK.
  • To check for updates issue this into your terminal:
    Code:
    $ android

2) Install required packages.
Code:
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
  x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
  libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
  libxml2-utils xsltproc
On Ubuntu 10.10:
Code:
$ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
On Ubuntu 11.10:
Code:
$ sudo apt-get install libx11-dev:i386
Building on Ubuntu 12.04 is currently only experimentally supported and is not guaranteed to work on branches other than master.
Code:
$ sudo apt-get install git gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev x11proto-core-dev \
  libx11-dev libreadline6-dev libgl1-mesa-glx \
  libgl1-mesa-dev g++-multilib mingw32 tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
3) Configure your USB.
Code:
$ gksudo gedit /etc/udev/rules.d/51-android.rules
Inside of this blank text file insert:
Code:
#Acer
SUBSYSTEM=="usb", ATTR{idVendor}=="0502", MODE="0666"

#ASUS
SUBSYSTEM=="usb", ATTR{idVendor}=="0b05", MODE="0666"

#Dell
SUBSYSTEM=="usb", ATTR{idVendor}=="413c", MODE="0666"

#Foxconn
SUBSYSTEM=="usb", ATTR{idVendor}=="0489", MODE="0666"

#Garmin-Asus
SUBSYSTEM=="usb", ATTR{idVendor}=="091E", MODE="0666"

#Google
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666"

#HTC
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666"

#Huawei
SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", MODE="0666"

#K-Touch
SUBSYSTEM=="usb", ATTR{idVendor}=="24e3", MODE="0666"

#KT Tech
SUBSYSTEM=="usb", ATTR{idVendor}=="2116", MODE="0666"

#Kyocera
SUBSYSTEM=="usb", ATTR{idVendor}=="0482", MODE="0666"

#Lenevo
SUBSYSTEM=="usb", ATTR{idVendor}=="17EF", MODE="0666"

#LG
SUBSYSTEM=="usb", ATTR{idVendor}=="1004", MODE="0666"

#Motorola
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", MODE="0666"

#NEC
SUBSYSTEM=="usb", ATTR{idVendor}=="0409", MODE="0666"

#Nook
SUBSYSTEM=="usb", ATTR{idVendor}=="2080", MODE="0666"

#Nvidia
SUBSYSTEM=="usb", ATTR{idVendor}=="0955", MODE="0666"

#OTGV
SUBSYSTEM=="usb", ATTR{idVendor}=="2257", MODE="0666"

#Pantech
SUBSYSTEM=="usb", ATTR{idVendor}=="10A9", MODE="0666"

#Philips
SUBSYSTEM=="usb", ATTR{idVendor}=="0471", MODE="0666"

#PMC-Sierra
SUBSYSTEM=="usb", ATTR{idVendor}=="04da", MODE="0666"

#Qualcomm
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666"

#SK Telesys
SUBSYSTEM=="usb", ATTR{idVendor}=="1f53", MODE="0666"

#Samsung
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666"

#Sharp
SUBSYSTEM=="usb", ATTR{idVendor}=="04dd", MODE="0666"

#Sony Ericsson
SUBSYSTEM=="usb", ATTR{idVendor}=="0fce", MODE="0666"

#Toshiba
SUBSYSTEM=="usb", ATTR{idVendor}=="0930", MODE="0666"

#ZTE
SUBSYSTEM=="usb", ATTR{idVendor}=="19D2", MODE="0666"
4) Save the file and close it and then issue this command:
Code:
$ sudo chmod a+r /etc/udev/rules.d/51-android.rules
5) Install the repo:
Code:
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
6) Initialize the repo:
Code:
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
6a) For AOSP:
Code:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.2.2_r1.2
For CM:
Code:
$ repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1
6.1) For people who have already done a repo init:
Code:
$ cd WORKING_DIRECTORY
AOSP:
Code:
$ repo init -b android-4.3_r2
$ repo sync
CM:
Code:
$ repo init -b cm-10.1
$ repo sync

7) When prompted, enter your real name and email address.

8) Gather the files:
Code:
$ repo sync
9) Continue onto adding a device

~How To Add A Device To The List~

1) Find the github for your device you wish to add. (For me it is the Samsung Epic 4G Touch [codename d710])

2) Now navigate to the location you are going clone the device tree to:
Code:
$ cd WORKING_DIRECTORY/device
$ mkdir samsung
3) Clone the github device tree from remote to local: (The name after the branch would be whatever you want that folder to be named so make sure it is whatever standard name would be for your device, example: Nexus One [passion], Nexus S [crespo], Motorola Droid [sholes], HTC Incredible [inc], etc.)
Code:
$ git clone git://github.com/CyanogenMod/android_device_samsung_d710.git -b cm-10.1 d710
4) Now navigate into the folder:
Code:
$ cd d710
5) Connect phone to computer and make sure USB debugging is enabled and you have adb set up.

6) Extract Device Proprietary Files:
Code:
$ ./extract-files.sh
Or:
Code:
./proprietary-files.sh
Or: See if other repos have your device's proprietary blobs already (like d710):
Code:
$ ~/WORKING_DIRECTORY
$ mkdir vendor
$ git clone https://github.com/TheMuppets/proprietary_vendor_samsung -b cm-10.2 samsung
6.1) Some devices have other dependencies like a common device repo. The d710 utilizes a galaxys2-common repo for the galaxys2 family of devices. Clone that repo. From inside the d710 folder:
Code:
$ cd ..
$ git clone git://github.com/CyanogenMod/android_device_samsung_galaxys2-common.git -b cm-10.1 galaxys2-common
7) Navigate back to your home directory for building:
Code:
$ cd ~/WORKING_DIRECTORY
8) Prepare To Compile:
Code:
$ source build/envsetup.sh
Or:
Code:
$ . build/envsetup.sh
9) Get your list of devices:
Code:
$ lunch
10) Pick your poison.

11) Now compile ('#' being the number of cores in your processor +1):
Code:
$ make -j#
12) Speed up builds using ccache (optional, but highly recommended):
Edit your .bashrc and add this line at the bottom:
Code:
export USE_CCACHE=1
Then issue these commands:
Code:
$ export USE_CCACHE=1
$ export CCACHE_DIR=~/.ccache
$ prebuilts/misc/linux-x86/ccache/ccache -M 50G
The suggested cache size is 50-100G. (This is size in GB)

Or for a flashable zip:
Code:
$ make -j# otapackage
~FIXES~
If you are running into issues such as:

Code:
Which would you like? [full-eng] 5
build/core/product_config.mk:209: *** No matches for product "full_d710".  Stop.
Device d710 not found. Attempting to retrieve device repository from CyanogenMod Github (http://github.com/CyanogenMod).
Repository for d710 not found in the CyanogenMod Github repository list. If this is in error, you may need to manually add it to your local_manifest.xml.
build/core/product_config.mk:209: *** No matches for product "full_d710".  Stop.

** Don't have a product spec for: 'full_d710'
** Do you have the right repo manifest?
What you need to do is to edit your blob to match the PRODUCT_NAME to the file name. For example with mine I have full_d710.mk therefore in this file I need to have PRODUCT_NAME to match it. Whatever error it is looking for you just need to change the PRODUCT_NAME line to match what the error shows.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
If you run into issues with Java being the incorrect version here is the fix:
Make sure Java 6 JDK is installed by typing in:
Code:
$ java -version
Open the file main.mk in build/core and delete this line from the java error code section:
Code:
$(error stop)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Change all references in your device repo from frameworks/base to frameworks/native

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Apply this patch for guava: https://github.com/CyanogenMod/andro...617ebe4e731e09

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Android 4.1+ needs an insecure kernel to use adb: http://forum.xda-developers.com/show....php?t=1687590

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

This tutorial is based off this one: http://source.android.com/index.html
The Following 316 Users Say Thank You to dastin1015 For This Useful Post: [ Click to Expand ]
 
p011uX
Old
#2  
p011uX's Avatar
Member
Thanks Meter 7
Posts: 48
Join Date: Apr 2011
Location: Oregon
Most excellent! Thank you for the quick post after the source drop!
The Following User Says Thank You to p011uX For This Useful Post: [ Click to Expand ]
 
dastin1015
Old
#3  
dastin1015's Avatar
Recognized Developer / Contributor - OP
Thanks Meter 10004
Posts: 3,699
Join Date: Dec 2010
Location: Chula Vista, CA

 
DONATE TO ME
Quote:
Originally Posted by p011uX View Post
Most excellent! Thank you for the quick post after the source drop!
You're quite welcome!
The Following 8 Users Say Thank You to dastin1015 For This Useful Post: [ Click to Expand ]
 
Peteragent5
Old
(Last edited by Peteragent5; 26th September 2012 at 02:27 AM.)
#4  
Peteragent5's Avatar
Recognized Contributor
Thanks Meter 1941
Posts: 1,268
Join Date: Jan 2012
Location: Richmond

 
DONATE TO ME
O.O This is new? I'm at the right time and at the right place...
Away for 2 months.
 

Galaxy Gio GT-S5660M | Galaxy Nexus GT-I9250M | BlackBerry PlayBook
GitHub
The Following User Says Thank You to Peteragent5 For This Useful Post: [ Click to Expand ]
 
brfield
Old
#5  
Senior Member
Thanks Meter 25
Posts: 348
Join Date: Apr 2010
Location: Goodyear, AZ
And what if we don't already have a working device tree? I want to try to get SOMETHING running on my T-Mo GS3, just to see how this all works and maybe contribute to the community.
Quote:
Originally Posted by The Pope of Dope View Post
you are giving ubuntu problems. Linux is infallible.
 
dastin1015
Old
#6  
dastin1015's Avatar
Recognized Developer / Contributor - OP
Thanks Meter 10004
Posts: 3,699
Join Date: Dec 2010
Location: Chula Vista, CA

 
DONATE TO ME
Quote:
Originally Posted by brfield View Post
And what if we don't already have a working device tree? I want to try to get SOMETHING running on my T-Mo GS3, just to see how this all works and maybe contribute to the community.
You have a device tree: https://github.com/CyanogenMod/andro..._samsung_i9300
The Following 3 Users Say Thank You to dastin1015 For This Useful Post: [ Click to Expand ]
 
brfield
Old
#7  
Senior Member
Thanks Meter 25
Posts: 348
Join Date: Apr 2010
Location: Goodyear, AZ
Quote:
Originally Posted by dastin1015 View Post
That's for the international, I am on the T-Mo version, aka the U.S.A variant.
Quote:
Originally Posted by The Pope of Dope View Post
you are giving ubuntu problems. Linux is infallible.
 
dastin1015
Old
#8  
dastin1015's Avatar
Recognized Developer / Contributor - OP
Thanks Meter 10004
Posts: 3,699
Join Date: Dec 2010
Location: Chula Vista, CA

 
DONATE TO ME
Quote:
Originally Posted by brfield View Post
That's for the international, I am on the T-Mo version, aka the U.S.A variant.
It would essentially be modifications of the international version with changed files to be for T-Mobile, but I don't know the specifics because I don't create device repos from scratch.
 
brfield
Old
#9  
Senior Member
Thanks Meter 25
Posts: 348
Join Date: Apr 2010
Location: Goodyear, AZ
Quote:
Originally Posted by dastin1015 View Post
It would essentially be modifications of the international version with changed files to be for T-Mobile, but I don't know the specifics because I don't create device repos from scratch.
Thanks for the help. I'll look into it later.
Quote:
Originally Posted by The Pope of Dope View Post
you are giving ubuntu problems. Linux is infallible.
 
Supermaster34
Old
#10  
Supermaster34's Avatar
Senior Member
Thanks Meter 614
Posts: 796
Join Date: Jan 2012
Location: London

 
DONATE TO ME
Can we use the ICS device tree for our device? If this is a stupid question feel free to tell me as I know very little about device trees

Sent by my Robot Butler
Nexus 4 | AOSP 4.4r1 | 4.4 kernel
Nexus 7 | Stock 4.3 | Franco kernel

Contact me at supermaster34@team-remics.com or tweet me

Tags
compile jellybean, from source
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes