[AT&T Samsung Galaxy S II Skyrocket SGH-I727] car vs driver:
Welcome to Project Rookie:

This is the unofficial guide to ROM, Kernel and AROMA installer building. This guide is primarily geared toward building for the AT&T Samsung Galaxy Skyrocket, but as a general guide it will work for all devices (you just need to know where to plug in your device specific repos and commands). The intended audience is for individuals with basic knowledge of linux, a degree of knowledge in basic troubleshooting and a general curiosity for how this stuff works.

This thread is extraordinarily long and is jam packed full of useful information. Please SEARCH the thread before asking questions related to building. If you cannot find your answer, or need additional clarification then don't hesitate to ask. Everyone participating here is knowledgeable and helpful to new builders, so don't abuse it – any flaming will immediately be reported to the moderation team.

In the very least, read through the first posts of this thread in detail, at least twice, before you start building and running commands to get setup.

On one hand, it should go without saying that if you have no knowledge and/or experience with building, java, C++, and various other tools, you probably shouldn't begin here. At the same time, it is possible to learn to build, provided you can read, follow directions, and aren't too lazy to

RESEARCH

.

OH YEAH, and you better have patience. This isn't easy. It will be work. The quickest way to get flamed is to show yourself to be lazy. If you think that with a couple clicks, you can have your own flashy ROM, forget it. But, if you do want to learn, this is a good place to get started. Nobody here has an ego about this, and we all want to help. But, we all struggled to get to a successful point, and lazy, unmotivated people just irritate those who have had to learn from scratch too. This is an ever-changing thread; team members are working on or currently building all types of ROMs, kernels and other MODs like AROMA installer. Tutorials will be posted for any new thing learned and built as time and space allow. ALL ARE WELCOME AND ALL QUESTIONS ARE TOO. But, seriously, if it's a really ridiculous one, we reserve the right to screw with you about it.

Thread Disclaimer:

The releases, instructions, and extras posted here are to be used at your own risk. We work hard to provide good, workable knowledge and builds, and test our work before posting it up front. Nevertheless, no one is responsible if you lose your files, brick your device, or inadvertently cause a nuclear war. If you are seeking absolute perfection, RUN NOW WHILE YOU STILL CAN!!

Thread Table of Contents:

Post 1:

- Linux system configuration (Ubuntu 12.04 & 13.04)

- ROM building instructions for CM10.2, AOKP, PACMAN

Post 2:

- Instructions for kernel building, along with other additions, mods, and helpful tutorials

Post 3:

- Misc topics

- Team Rookie ROM & Kernel Distributions

- Links to related topics and specific posts of interest

The tutorial for building your own AROMA installer can be found here: http://xdaforums.com/showpost.php?p=34886089&postcount=2708​

GETTING STARTED

Setting up your environment

:

This is a combination of the steps offered in the threads 'Compile JB on Ubuntu' and TeamChopsticks CyanogenMod for Hercules and Skyrocket.

Special thanks to dastin1015 and TeamChopsticks.

Tip: Allocate at least 75 gigs of space for the building of ONE ROM. If you install ccache, you will want 90. A complete build directory can use as much as 100 gigs, so make sure you have plenty of room. One of the ways to fail out a build is too use all of your partition before acquiring all the necessary files.

For OSX Mavericks users, check out this thread for getting setup: http://xdaforums.com/showthread.php?t=2510898

Here are the steps from those 2 tutorials in correct order:

1) You need the following:

-JDK 6 if you wish to build Jellybean.

[COLOR="Black"]$ sudo apt-get install openjdk-6-jdk[/COLOR]

-Python 2.4 -- 2.7, which you can download from python.org. Or:

[COLOR="black"]$ sudo apt-get install python[/COLOR]

-Git 1.7 or newer. You can find it at git-scm.com. Or:

[COLOR="black"]$ sudo apt-get install git-core[/COLOR]

-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 – this tutorial assumes you've done that as well.

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:

[COLOR="black"]# Android tools
export PATH=${PATH}:~/android-sdk/tools
export PATH=${PATH}:~/android-sdk/platform-tools
export PATH=${PATH}:~/bin[/COLOR]

Find your .profile file and add this at the bottom of the file:

[COLOR="black"]PATH="$HOME/android-sdk/tools:$HOME/android-sdk/platform-tools:$PATH"[/COLOR]

You have now successfully installed the Android SDK.

To check for updates issue this into your terminal:

[COLOR="black"]$ android[/COLOR]

2) Install required packages. 64-bit (recommended)

[COLOR="black"]$ 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 lib32readline-gplv2-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils lzop schedtool[/COLOR]

On newer versions of Ubuntu such as 11.10 you may need to do the following:

[COLOR="black"]$ sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so[/COLOR]

[COLOR="black"]$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so[/COLOR]

3) Configure your USB.

[COLOR="black"]$ gksudo gedit /etc/udev/rules.d/51-android.rules[/COLOR]

Inside of this blank text file insert:

[COLOR="black"]#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"[/COLOR]

4) Save the file and close it and then issue this command:

[COLOR="black"]$ sudo chmod a+r /etc/udev/rules.d/51-android.rules[/COLOR]

5) Install the repo:

[COLOR="black"]$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo[/COLOR]

Create your work directory:

[COLOR="black"]mkdir ~/"your directory name here" For example: mkdir ~/cm10
cd ~/cm10[/COLOR]

This is what you need to begin building. From here, the various types of ROM styles can be built with a few additions and commands.

UNOFFICIAL CM10.2

:

Initialize the work directory:

[COLOR="Black"]repo init -u git://github.com/CyanogenMod/android.git -b cm-10.2[/COLOR]

Create and edit roomservice.xml in .repo: gedit /.repo/local_manifests/roomservice.xml

[COLOR="Black"]<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project name="CyanogenMod/android_device_samsung_skyrocket" path="device/samsung/skyrocket" remote="github" revision="cm-10.2" />
<project name="CyanogenMod/android_device_samsung_hercules" path="device/samsung/hercules" remote="github" revision="cm-10.2" />
<project name="CyanogenMod/android_device_samsung_msm8660-common" path="device/samsung/msm8660-common" remote="github" revision="cm-10.2" />
<project name="CyanogenMod/android_kernel_samsung_msm8660-common" path="kernel/samsung/msm8660-common" remote="github" revision="cm-10.2" />
<project name="TheMuppets/proprietary_vendor_samsung" path="vendor/samsung" remote="github" revision="cm-10.2" />
<project name="CyanogenMod/android_device_samsung_celox-common" path="device/samsung/celox-common" remote="github" revision="cm-10.2" />
<project name="CyanogenMod/android_device_samsung_qcom-common" path="device/samsung/qcom-common" remote="github" revision="cm-10.2" />
</manifest>[/COLOR]

[COLOR="black"]repo sync -j16 (this may take a few hours as it downloads ~17GB of source)[/COLOR]

To Build:

[COLOR="black"]. build/envsetup.sh (notice the period and space)
vendor/cm/get-prebuilts
repo sync -j16
[/color]

For Skyrocket:

$ CM_EXTRAVERSION=mycustombuild CM_SNAPSHOT=1 brunch cm_skyrocket-userdebug
or
$ breakfast cm_skyrocket-userdebug
$ brunch cm_skyrocket-userdebug

For Hercules:

CM_EXTRAVERSION=mycustombuild CM_SNAPSHOT=1 brunch cm_hercules-userdebug

**After you build, your repo files will remain in place. This will cause your future builds to be based from that specific time of additions and merges. Wiping or 'cleaning' your files often will ensure that your builds are the most up-to-date. To be sure that you start with a fresh repo at the beginning of every build, you should 'make clean' often. For example:

[COLOR="Black"]$ cd ~/cm10
$ make clean (or 'make clobber' without quotes)[/COLOR]

If you want to have your 'cleaning service' done as part of your process, this is a way to achieve it:

[COLOR="black"]$ cd cm10
$ repo sync -j16
$ . build/envsetup.sh && make clobber && CM_EXTRAVERSION= mycustombuild CM_SNAPSHOT=1 brunch cm_skyrocket-userdebug[/COLOR]

This will make the cleaning process automatic.

The Git can be found here:

https://github.com/CyanogenMod

UNOFFICIAL CM11.0

:

The steps are essentially the same as CM10.2 ... just have to make a couple changes to your git init and your roomservice.xml as follows:

[COLOR="Black"]repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0[/COLOR]

Create and edit roomservice.xml in .repo: gedit /.repo/local_manifests/roomservice.xml

[COLOR="Black"]<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project name="CyanogenMod/android_device_samsung_skyrocket" path="device/samsung/skyrocket" remote="github" />
<project name="CyanogenMod/android_device_samsung_hercules" path="device/samsung/hercules" remote="github" />
<project name="CyanogenMod/android_device_samsung_msm8660-common" path="device/samsung/msm8660-common" remote="github" />
<project name="CyanogenMod/android_kernel_samsung_msm8660-common" path="kernel/samsung/msm8660-common" remote="github" />
<project name="TheMuppets/proprietary_vendor_samsung" path="vendor/samsung" remote="github" />
<project name="CyanogenMod/android_device_samsung_celox-common" path="device/samsung/celox-common" remote="github" />
<project name="CyanogenMod/android_device_samsung_qcom-common" path="device/samsung/qcom-common" remote="github" />
</manifest>[/COLOR]

The remaining steps to build are the same ... breakfast, lunch, brunch etc.

UNOFFICIAL AOKP

:

This is a set of steps to set up and run an AOKP build. Special thanks to m4570d0n for taking the time to share his detailed instructions, and R41NS for his assistance in providing some simplifications. Buy those guys a beer if you see them!

It's actually pretty close to CM. It's just several tiny changes. I made some changes that are not necessary but did so to conserve space. With CM's manifest setup, you don't have to worry about downloading a bunch of stuff you don't need but with AOKP, by default you're downloading all the kernels and /device/whatever for pretty much all devices and I didn't want to do that so here's what I did.

1)

[COLOR="Black"]repo init -u https://github.com/AOKP/platform_manifest.git -b jb-mr1[/COLOR]

2) Create local_manifest.xml in .repo with the following in it:

[COLOR="black"]

[/COLOR]

3) Next, do a repo sync.

4) Edit vendorsetup.sh to have the following in it :

[COLOR="Black"]add_lunch_combo aokp_skyrocket-userdebug[/COLOR]

Also, open device.mk and change it to this :

[COLOR="black"]$(call inherit-product, $(SRC_TARGET_DIR)/product/languages_full.mk)

## The gps config appropriate for this device
PRODUCT_COPY_FILES += device/common/gps/gps.conf_US_SUPL:system/etc/gps.conf

## (2) Also get non-open-source specific aspects if available
$(call inherit-product-if-exists, vendor/samsung/skyrocket/skyrocket-vendor.mk)

## misc
PRODUCT_PROPERTY_OVERRIDES += \
dalvik.vm.dexopt-flags=m=v,o=y

## overlays
DEVICE_PACKAGE_OVERLAYS += device/samsung/hercules/overlay

# Device uses high-density artwork where available
PRODUCT_AAPT_CONFIG := normal hdpi
PRODUCT_AAPT_PREF_CONFIG := hdpi

# Hardware
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.sensor.proximity.xml:system/etc/permissions/android.hardware.sensor.proximity.xml

# Ramdisk
PRODUCT_COPY_FILES += \
device/samsung/skyrocket/ramdisk/init.qcom.rc:root/init.qcom.rc \
device/samsung/skyrocket/ramdisk/init.qcom.sh:root/init.qcom.sh \
device/samsung/skyrocket/ramdisk/init.qcom.usb.rc:root/init.qcom.usb.rc \
device/samsung/skyrocket/ramdisk/init.qcom.usb.sh:root/init.qcom.usb.sh \
device/samsung/skyrocket/ramdisk/init.target.rc:root/init.target.rc \
device/samsung/skyrocket/ramdisk/ueventd.rc:root/ueventd.rc \
device/samsung/skyrocket/ramdisk/init.emmc.rc:root/init.emmc.rc \
device/samsung/skyrocket/fstab.qcom:root/fstab.qcom

# BT firmware
PRODUCT_COPY_FILES += \
device/samsung/skyrocket/firmware/bcm4330B1.hcd:system/etc/firmware/bcm4330B1.hcd

# Vold
PRODUCT_COPY_FILES += \
device/samsung/skyrocket/vold.fstab:system/etc/vold.fstab

# QRNGD
PRODUCT_PACKAGES += qrngd

# common msm8660
$(call inherit-product, device/samsung/msm8660-common/msm8660.mk)

$(call inherit-product, frameworks/native/build/phone-xhdpi-1024-dalvik-heap.mk)

$(call inherit-product-if-exists, vendor/samsung/skyrocket/skyrocket-vendor.mk)

#WIFI_BAND := 802_11_ABG
#$(call inherit-product-if-exists, hardware/broadcom/wlan/bcmdhd/firmware/bcm4330/device-bcm.mk)

# NFC
BOARD_HAVE_NFC := true[/COLOR]

**With the exception of making the change to use the Hercules overlay, the other edits to device.mk are optional, and will cause different results with the different options you use.

5)Go to vendor/AOKP/products and create a skyrocket.mk file that is essentially copied from the hercules.mk. :

[COLOR="black"]# Inherit AOSP device configuration for skyrocket.
$(call inherit-product, device/samsung/skyrocket/full_skyrocket.mk)

# Inherit common product files.
$(call inherit-product, vendor/aokp/configs/common_phone.mk)

# Inherit GSM common stuff
$(call inherit-product, vendor/aokp/configs/gsm.mk)

# skyrocket overlay
PRODUCT_PACKAGE_OVERLAYS += vendor/aokp/overlay/hercules

# Setup device specific product configuration.
PRODUCT_NAME := aokp_skyrocket
PRODUCT_BRAND := Samsung
PRODUCT_DEVICE := skyrocket
PRODUCT_MODEL := SGH-I727
PRODUCT_MANUFACTURER := Samsung

PRODUCT_BUILD_PROP_OVERRIDES += PRODUCT_NAME=SGH-I727 TARGET_DEVICE=SGH-I727 BUILD_FINGERPRINT="samsung/SGH-I727/SGH-I727:4.1.1/IMM76D/UCLF6:user/release-keys" PRIVATE_BUILD_DESC="SGH-I727-user 4.1.1 IMM76D UCLF6 release-keys"

# boot animation
PRODUCT_COPY_FILES += \
vendor/aokp/prebuilt/bootanimation/bootanimation_480_800.zip:system/media/bootanimation.zip[/COLOR]

Then go to vendor/AOKP and

6) Add the skyrocket.mk file in Step 5 to vendor/AOKP/products/AndroidProducts.mk :

[COLOR="black"]PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/captivatemtd.mk \
$(LOCAL_DIR)/crespo.mk \
$(LOCAL_DIR)/crespo4g.mk \
$(LOCAL_DIR)/d2tmo.mk \
$(LOCAL_DIR)/d2usc.mk \
$(LOCAL_DIR)/d2vzw.mk \
$(LOCAL_DIR)/evita.mk \
$(LOCAL_DIR)/galaxysmtd.mk \
$(LOCAL_DIR)/fascinatemtd.mk \
$(LOCAL_DIR)/galaxysmtd.mk \
$(LOCAL_DIR)/grouper.mk \
$(LOCAL_DIR)//skyrocket.mk \
$(LOCAL_DIR)/hercules.mk \
$(LOCAL_DIR)/i9300.mk \
$(LOCAL_DIR)/i9100.mk \
$(LOCAL_DIR)/i9100g.mk \
$(LOCAL_DIR)/maguro.mk \
$(LOCAL_DIR)/n7000.mk \
$(LOCAL_DIR)/p3100.mk \
$(LOCAL_DIR)/p3110.mk \
$(LOCAL_DIR)/p3113.mk \
$(LOCAL_DIR)/p5100.mk \
$(LOCAL_DIR)/p5110.mk \
$(LOCAL_DIR)/p5113.mk \
$(LOCAL_DIR)/tf101.mk \
$(LOCAL_DIR)/toro.mk \
$(LOCAL_DIR)/toroplus.mk \
$(LOCAL_DIR)/vibrantmtd.mk[/COLOR]

7) In vendor/AOKP open vendorsetup.sh and add this :

[COLOR="black"]add_lunch_combo aokp_skyrocket-userdebug[/COLOR]

8) Go to https://github.com/TeamChopsticks/proprietary_vendor_samsung/downloads and select "Download as zip." After the download completes, open the archive and extract the "skyrocket" folder to /vendor/samsung.

or

8) cd to your home directory. Download the proprietary_vendor_samsung repo from Team Chopsticks and then copy the skyrocket directory to /vendor/samsung:

[COLOR="Black"]cd
git clone -b jellybean https://github.com/TeamChopsticks/proprietary_vendor_samsung.git
cp -r proprietary_vendor_samsung/skyrocket aokp/vendor/samsung[/COLOR]

9) Start building :

[COLOR="Black"]. build/envsetup.sh
lunch aokp_skyrocket-userdebug && mka bacon[/COLOR]

SLIMBEAN

:

By popular demand, here is a set of steps for building Slimbean - Many thanks to onlychevys for taking the time to lay this out

To build Slim Bean, you do the same as cm10 only with their platform_manifest:

https://github.com/SlimRoms/platform_manifest

(The manifest code is too long to place here, sorry)

If you have the space on your hard drive, then you can copy the .repo file from cm10 or aokp etc (.repo is a hidden file,cntrl + h to see it) to another directory and delete the local_manifest in there.

Then:

[COLOR="Black"]repo init -u git://github.com/SlimRoms/platform_manifest.git -b jb4.2[/COLOR]

Copy this code to terminal while in that directory to initialize their repo.

Next:

[COLOR="black"]repo sync -j16[/COLOR]

**Copying the .repo saves about 3 plus hours of downloading aosp source.

Then you should be ready to build.

Start building :

[COLOR="Black"]. build/envsetup.sh
lunch slimbean_skyrocket-userdebug && mka bacon[/COLOR]

PAC-man

:

This is a newer but very functional and well-liked compilation of three builds: Paranoid Android, CM, and AOKP. Here is a brief set of steps from the PAC git:

To get started with PAC-man, you'll need to get familiar with Git and Repo.

To initialize your local repository using the PAC-man trees, use a command like this:

[COLOR="Black"]repo init -u git://github.com/PAC-man/android.git -b cm-10.1[/COLOR]

Then to sync up:

[COLOR="black"]repo sync[/COLOR]

After the syncing process completes, you can run your build commands:

[COLOR="black"]. build/envsetup.sh[/COLOR]

[COLOR="black"]vendor/cm/get-prebuilts[/COLOR]

[COLOR="black"]repo sync -j16[/COLOR]

And finally:

[COLOR="black"]./build-pac.sh skyrocket -j16[/COLOR]

The Git can be found here:

https://github.com/PAC-man