Use javac instead of Eclipse ? - Android Q&A, Help & Troubleshooting

I am trying to build an open source project at github (https://github.com/google/ExoPlayer)
As I understand, the project includes a demo application and a library. The demo application plays a number of test streams with the help of the libary. The main page of the project says that I can use Eclipse and Android SDK to build the project. However, instead of using an IDE like Eclipse I want to compile the code from command line using javac. So, I tried it by following the method in this page :http://geosoft.no/development/android.html
1. Created the R.java file using aapt (Everything seems to work fine)
2. Ran the command
Code:
javac -d E:/bin -sourcepath E:/project/src -classpath C:/Android/android-sdk/platforms/23.0.2/android.jar;E:/bin E:/project/src/com/google/android/exoplayer/demo/*.java
Here javac throws a lot of errors like 'symbol not found'.
The main problem seems to be that the demo application and library are dependant projects and I don't know how to invoke javac for dependant projects.
Therefore, I am asking you to give an elaborate guide about compiling (this) project from command line.

Related

[REF][3/28] Compiling Jt1134's AOSP

I compiled this tonight and just have some info if others are interested in it.
Link to ROM thread: http://forum.xda-developers.com/showthread.php?p=12437432#post12437432
Dev machine: newest CentOS x64 on VMWare Workstation 7, about a day old
I already had Git installed, but if you're new to this you'll need it (and some dependencies):
Code:
yum install gettext-devel expat-devel curl-devel zlib-devel openssl-devel
wget http://kernel.org/pub/software/scm/git/git-1.7.4.2.tar.bz2
tar xvfj git-1.7.4.2.tar.bz2
cd git-1.7.4.2
make prefix=/usr/local all
make prefix=/usr/local install
Repo was a new tool to me, so it wasn't installed... If you don't have repo, download/install it using this set of commands:
Code:
curl http://android.git.kernel.org/repo > /usr/bin/repo
chmod a+x /usr/bin/repo
Now that you have repo you can download everything. Make a folder somewhere and cd there (mine is /phone/aosp), then:
Code:
repo init -u git://github.com/jt1134/platform_manifest.git -b froyo
This sets up the folder, but you need to download everything:
Code:
repo sync
Jt1134 had -j40 as a parameter, but this caused a Python error for me and does not appear necessary. This downloads an incredible amount of projects and takes quite a while (over an hour at ~500K/s). It's exciting, how much is involved.
The next two lines are very quick, but I had to install Bison ('yum install bison') first:
Code:
source build/envsetup.sh
lunch full_fascinate-eng
Then the final line to actually build the whole package:
Code:
make -j$(grep processor /proc/cpuinfo | wc -l) bacon && fixzip
From this point forward I'm walking through the errors I encountered and how I fixed them to get to completion:
It failed on first run and I had to install glibc-devel because a 32 bit header file stubs-32.h was missing ('yum install glibc-devel').
It failed on the second run because I did not have 'flex' installed. ('yum install flex').
Third time looked good, compiled a ton of stuff, then bombed because 'libsecril-client.so' was missing. Exact error:
Code:
/phone/aosp/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/../../../../arm-eabi/bin/ld:
warning: libsecril-client.so, needed by out/target/product/fascinate/obj/lib/libsecgps.so, not found (try using -rpath or -rpath-link)
It was however found in two places:
Code:
/phone/aosp/vendor/samsung/vzwtab/proprietary/lib/libsecril-client.so
/phone/aosp/vendor/samsung/fascinate/proprietary/lib/libsecril-client.so
So what I did is copy it to the output folder (not the optimal solution I'm sure, but it worked):
Code:
cp vendor/samsung/fascinate/proprietary/lib/libsecril-client.so out/target/product/fascinate/obj/lib/
Fourth time through it continued on an compiled a ton of projects, and then... 'gperf' command not found. ('yum install gperf')
Fifth time, I actually went to sleep during this one , woke up to this error:
Code:
/usr/bin/ld: cannot find -lncurses
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] Error 1
I fixed this with 'yum install ncurses-devel' and let the process continue, and shortly afterwards got another error:
Code:
In file included from external/qemu/android/skin/window.c:19:
prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:55:22: error: X11/Xlib.h: No such file or directory
prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:56:23: error: X11/Xatom.h: No such file or directory
I fixed this with 'yum install libX11-devel' and off we go again... a new error!:
Code:
/usr/bin/ld: cannot find -lhistory
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/sqlite3_intermediates/sqlite3] Error 1
This was fixed by running 'yum install readline-devel' and we're back to a lot more compiling...
Success!! full_fascinate.zip is in the root folder, ready to be moved to the phone.
Hope someone might find this helpful or interesting... let me know if there's anything I can do to make it better!
What dev environment do you guys use to edit these files?
Do you just keep recompiling them and running the rom using the SDK virtual phone?
I'm an experienced developer but I am only familiar with windows development but want to get into some apps development soon.
Eclipse is rather popular.
Sent from my SCH-I500 using XDA App
I'm using Eclipse, run them on the phone for testing, and haven't done much yet.
Would other developers be willing to chime in with their advice/preferences on the whole process? Thanks!
-j40 is only to parallelize the tasks (up to 40 threads I believe) so it's not strictly necessary.
By the way, all the dependencies to build android should be on here: http://source.android.com/source/download.html
And @SmokeyDP, you don't need to build your own version of the OS to write apps, so these instructions aren't really relevant for that if that's all you want to do. Eclipse is probably the most common IDE for Android app development because that's what Google supports directly, but I've heard that IntelliJ IDEA also has nice Android support and just lacks a GUI builder. I've recently switched to IDEA for other Java development and it's a lot faster and more refined than eclipse, so I would suggest trying that if you're going to start learning because you won't be used to either eclipse or IDEA and can choose which one seems the best to you.
I realize you don't need to rebuild the OS to develop an app, but I was asking about developing both since I imagine it's the same IDE and I was curious. Thanks for the info.
SmokeyDP said:
I realize you don't need to rebuild the OS to develop an app, but I was asking about developing both since I imagine it's the same IDE and I was curious. Thanks for the info.
Click to expand...
Click to collapse
Unless you're going to be using the NDK to write apps, you're not going to be using C, which is what the Linux Kernel is written in... and Eclipse's support for C is a lot poorer than its support for Java (honestly, I can't stand its support for either, its interface is quite the unorganized mess, IMO). I, personally, use a different set of tools for each language/toolkit I use, as each have their pros and cons.

[GUIDE][COMPLETE] Android ROM Development From Source To End

Hello Everyone....
Today I will present you all the ultimate guide for ROM development starting from Source to End.
This guide will be applicable to all devices.
So lets Start
What is Android?
Android is an open-source operating system developed by Google for smartphones, tablets, and other devices. It provides a user-friendly interface and supports a vast ecosystem of applications through the Google Play Store. With its Linux-based foundation, Android enables multitasking and offers extensive customization options for both manufacturers and users. Its integration with Google services enhances functionality and connectivity, making Android a popular choice for mobile devices worldwide.
Full Freedom for people using it
What is Android Source Code?
Android is an open-source software stack developed for a diverse range of devices with varying form factors. The primary objective of Android is to provide an open software platform that is accessible to carriers, original equipment manufacturers (OEMs), and developers, enabling them to bring their innovative ideas to life. The goal is to create a successful, real-world product that enhances the mobile experience for users. One of the notable features of Android is that it offers a complete, production-quality consumer product with source code that is openly available for customization and porting.
Android allows for extensive customization and enables developers to create new functionalities and experiences without significant restrictions. This openness fosters creativity and empowers developers to tailor Android to suit their specific needs. It also encourages collaboration within the Android community, where developers can share their enhancements, contribute to the platform's evolution, and address any issues or bugs.
So basically Android Allows to customize the things you like and make new things without any Restrictions. Cool isn’t it?
What is Android ROM ?​ An Android ROM refers to a customized version of the Android operating system that is installed on a device. ROM stands for "Read-Only Memory," which originally referred to firmware stored in a device's memory. However, in the context of Android, a ROM typically refers to the software package that includes the operating system, user interface, and other components specific to a particular device or a modified version of Android.
While it is true that an Android ROM includes the user interface (UI) and the file system for maintaining contacts and other data, it is not limited to those aspects. The Android ROM is built upon a Linux kernel, which serves as the foundation for the operating system. Additionally, the ROM includes various system-level components, libraries, and apps that provide specific functionalities and features.
ROMs can be developed by device manufacturers (such as HTC, Samsung, or LG) to provide a customized user experience on their devices. They often come with a unique user interface overlay, such as HTC's Sense UI or Samsung's One UI, which can offer additional features and visual enhancements.
Moreover, ROMs can also be developed by third-party developers or communities, known as custom ROMs. Custom ROMs are modified versions of Android created by independent developers or enthusiast communities. These ROMs are typically designed to offer additional features, customization options, improved performance, or compatibility with older devices that may no longer receive official updates.
What does a Android Rom Contain ?​ Basically a Android Rom Contains following main things:
Kernel: The kernel is the core of the operating system that manages system resources and facilitates communication between hardware and software.
Bootloader: The bootloader is responsible for initializing the device's hardware and loading the operating system into memory during the boot process.
Recovery: The recovery is a separate bootable partition on the device that allows for system maintenance, installation of updates, and performing backups or restores.
Radio: The radio refers to the software responsible for managing the device's wireless communication, including cellular connectivity.
Framework: The framework consists of a set of libraries and APIs that provide the foundation for application development and interaction with the device's hardware and services.
Apps: Android ROMs typically include pre-installed applications, such as system apps (e.g., dialer, messaging) and other core apps (e.g., calendar, browser), which may vary depending on the ROM.
Core: The core components of the Android operating system, including system services, libraries, and essential system processes.
Android Runtime: The Android Runtime (ART) is the runtime environment responsible for executing Android applications. It converts apps from bytecode into machine code for efficient execution.
Some Basics About Above Terms ​
Kernel
The Android kernel is a key component of the Android operating system, serving as the core of the software.
It is based on the Linux kernel but includes modifications and additions specific to the Android platform.
The kernel provides essential functionalities, such as hardware abstraction, process management, and memory management.
It controls the device's hardware resources, including the CPU, memory, storage, and input/output devices.
The kernel manages drivers that enable communication between the operating system and hardware components.
It facilitates power management, optimizing resource usage to maximize battery life.
The kernel handles security mechanisms, such as process isolation and permissions, to protect against unauthorized access.
It enables multitasking by scheduling and prioritizing tasks, allowing multiple applications to run simultaneously.
The kernel supports various file systems, networking protocols, and device drivers to ensure compatibility with different hardware configurations.
Kernel updates are released periodically to improve performance, fix bugs, and address security vulnerabilities.
Bootloader
The Android bootloader is a critical component that starts the boot process on an Android device.
It verifies the integrity and authenticity of the software before loading it.
The bootloader is responsible for loading the operating system kernel.
It initializes essential hardware components, such as the CPU, memory, and display.
The bootloader acts as a security checkpoint, preventing unauthorized modifications to the device's software.
It ensures the device boots into a trusted and secure state, protecting against malware and unauthorized access.
The bootloader provides a means to unlock the device for advanced customization and firmware modifications.
Bootloader unlocking allows for installing custom ROMs, kernels, and recovery images.
Some devices have locked bootloaders by default to maintain system integrity and prevent unauthorized modifications.
Recovery
Android Recovery is a built-in feature that provides a separate environment for system maintenance and troubleshooting.
It is accessed by booting into recovery mode, usually through a combination of hardware buttons during device startup.
The recovery mode allows users to perform various tasks, such as applying software updates and factory resetting the device.
It provides a limited but essential set of functions to recover or repair a malfunctioning Android system.
In recovery mode, users can clear cache partitions to resolve performance issues caused by cached data.
It enables users to flash custom ROMs, official firmware updates, and other system modifications.
Recovery mode allows for making and restoring system backups, protecting user data and settings.
It provides a command-line interface (ADB) for advanced troubleshooting and system-level operations.
Recovery mode is separate from the main Android system, ensuring stability even if the main OS encounters problems.
These are main parts of Android Operating System.
Now that we know what Android is and what it contains, let's move on to the next major step, which is Android ROM development from source. However, before starting this process, we need to set up some initial setup and development environment.
Android Rom Development
Setting Up Linux Enviroment
Pre – Requirements for Android Rom Development​
1) Linux Operating System (I will use Ubuntu 13.10 as an example and recommend it to all)
2) Java Development Kit (JDK)
3) Various Tools
Once you have downloaded Ubuntu 13.10, you can install it in two ways:
1) Installing it as the primary operating system
2) Installing it inside Windows using a virtual machine (VM) or virtualization software like VirtualBox (free) or VM Workstation/Player (paid)
3) Dual-booting Linux alongside Windows by creating separate partitions
In this guide, I will explain how to install Linux inside Windows using VirtualBox as an example.
How to Install Ubuntu in VirtualBox
​1. Download and install Oracle VM VirtualBox on your computer.
2. Download the Ubuntu ISO file from the official Ubuntu website or the specific version you want to install.
3. Open VirtualBox and click on New to create a new virtual machine.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
​4. Enter a name for your virtual machine, select Linux as the type, and choose the version that matches your Ubuntu ISO.
​5. Set the desired amount of RAM for the virtual machine. It's recommended to allocate at least 2GB or more.
​6. Create a virtual hard drive by selecting Create a virtual hard disk now. Choose the VDI (VirtualBox Disk Image) option and click Next.
​ - Select Dynamically allocated and leave the Split into files option unchecked.
​ - Specify the amount of HDD space you want to allocate and choose the location for the virtual hard drive (VMDK).
​7. Go to Settings -> System -> Processor and set the desired number of cores for the Guest OS. In this example, we allocate 2 cores.
​8. Now, go to Settings -> System -> Acceleration and make sure both options are selected.
​9. Next, go to Settings -> Storage -> Controller: IDE and click on the small CD with the plus icon.
​
- Navigate to the location where you saved the Ubuntu ISO file and select it.
- Click OK to save the changes.
​10. You can now start the virtual machine by clicking Start.
11. The Ubuntu installation process will begin, and you can follow the on-screen instructions to complete the installation.
12. Once the installation is finished, you'll have Ubuntu running in VirtualBox.
That's it! You have successfully installed Ubuntu in VirtualBox.
Hurrrray your Linux System is Ready!​
Setting Up Build Enviroment For Compiling ROM's​
Installation of Necessary Tools and packages for ROM Development
1)Installing Java Development Kit (JDK)
For Kitkat
Installation of Java V6​
Open The Terminal and Paste following Command
a) This will Remove the wrong Java JDK from Ubuntu 13.10
Code:
[COLOR=#000000]sudo apt-get purge openjdk-\* icedtea-\* icedtea6[COLOR=#007700][COLOR=black]-\*[/COLOR] [/COLOR][/COLOR]
b) Enter the Following Command and This will Install JDK
Code:
wget https://launchpad.net/~webupd8team/+archive/ubuntu/java/+files/oracle-java6-installer_6u45-0%7Ewebupd8%7E8_all.deb sudo dpkg -i oracle-java6-installer_6u45-0~webupd8~8_all.deb wget https://launchpad.net/~webupd8team/+archive/ubuntu/java/+files/oracle-java6-set-default_6u45-0%7Ewebupd8%7E8_all.deb sudo dpkg -i oracle-java6-set-default_6u45-0~webupd8~8_all.deb
c) Check The Java Version Installed
Code:
[COLOR=#000000]java -[COLOR=#0000BB][COLOR=black]version [/COLOR] [/COLOR][/COLOR]
For Lollipop Required Java Version is 7
To Install Java V7
Code:
sudo apt-get update && sudo apt-get install openjdk-7-jdk
Java Installation Completes
2)Installation Of Required Tools
Enter The Following Command
Code:
sudo apt-get install git-core gnupg ccache lzop flex bison gperf build-essential zip curl zlib1g-dev zlib1g-dev:i386 libc6-dev lib32ncurses5 lib32z1 lib32bz2-1.0 lib32ncurses5-dev x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 lib32z-dev libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc readline-common libreadline6-dev libreadline6 lib32readline-gplv2-dev libncurses5-dev lib32readline5 lib32readline6 libreadline-dev libreadline6-dev:i386 libreadline6:i386 bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev libsdl1.2-dev libesd0-dev squashfs-tools pngcrush schedtool libwxgtk2.8-dev python
Note : If you get error like broken dependencies then use the following command and then use above command.
Code:
sudo apt-get update
Code:
sudo apt-get upgrade
After Installation Completes Enter The Following Command
Code:
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
So The Above Are The Packages
Now comes the binary called Repo.
What Is Repo?
Repo is a repository management tool that we built on top of Git. Repo unifies the many Git repositories when necessary, does the uploads to our revision control system and automates parts of the Android development workflow.
Enter The Following Command
Code:
mkdir ~/bin && curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo && chmod a+x ~/bin/repo
Using Text Editor Open ~/.bashrc for that use following command
Code:
sudo nano ~/.bashrc
At The Very Bottom Line Add following Line
Code:
export PATH=~/bin:$PATH
Save it. Here To save Press Ctrl+O and Enter and Ctrl+X to exit
Now Enter Following Command
Code:
source ~/.bashrc
Now Your System Is Ready For ROM Building​
Downloading Sources​
To build a Rom from Source first we need to download the sources from git.
Note : Sources will be very huge approx 13GB to 14GB hence lot of patience is required since it will take some time depending on your Internet connection speed.
So lets start..
Here i will take the example of cm11.
The steps goes has follows
1) Create a directory were your sources will be downloaded. Enter the following command to terminal to create a directory
Code:
mkdir cm11
Now in your Home directory you will see folder called cm11.
2) The next step is you have to Initiate the repo. meaning of the repo is given above. It will communicate with the git and download the source were it is stored.
Enter The Following Command to Terminal
Code:
cd cm11
This will take you to the directory you created in Step 1.
Now Enter The Following Command Which Will Initiate The Repo :laugh:
Code:
[FONT=Arial][SIZE=4]repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0[/SIZE][/FONT]
Since i m taking example of cm11 above repo initiate command is used you can find this here for CM11
Note : All the details for Repo Initiate and Building will be given in respective Source Github. Various Github source links will be given in discription and the end.
This will initialize your local repository using the CyanogenMod trees.
now got to cm11 folder and press Ctrl+H this will show the hidden folder .repo were sources will be downloaded.
Now it might give a small error at the end stating for Email id.
So just create a github account here
Then Run following in Terminal
Code:
[FONT=Arial][SIZE=4]git config --global user.email "[email protected]"
git config --global user.name "Your Name"[/SIZE][/FONT]
replace "[email protected]" with your github email Id
replace "Your Name" with github Username
3) Now To control the files that should be downloaded while sync and for adding device tree we use local_manifest.xml. Reagrding this @Kishan14 will explain in detail with Tips and Tricks.
4) Now it is the time to download the sources. for that run the following Command
Code:
repo sync -j#
# is number of jobs you want to give for your downloading source. I use 2 to 4.
Now it will download the Sources needed to build the Rom..Download will be huge 13GB to 14GB so be patient since it depends on your Internet Speed.
The Above was for CM11 same procedure for other provided you have to replace cm11 with one you want to sync/build like AOSP,AOKP,AICP etc and Repo Initialize command varies with the source you want to download.
Some Git Links :
CM11 : https://github.com/CyanogenMod/android
AOKP : https://github.com/AOKP/platform_manifest
Carbon Rom : https://github.com/CarbonDev/android
SlimRom : https://github.com/SlimRoms/platform_manifest
Building Rom For A Particular Device
Building Rom For A Particular Device
​
Now has we have downloaded the sources we need for our Rom Build Lets Move to the Next Step which is Actually Major Step the Building The ROM
So Lets Start The Game...:laugh:
Note : I will be taking Samsung Galaxy Grand Duos - GT -I9082 has Example here.
Example Rom : CM11
Now before starting with Building guide you have to Download your Device Identity That is has follows
1) Device Tree
2) Vendor
3) Kernel
The Above files are very Vital Parameters of building they specify your device and its Characteristics.
Now you might think from where you have to download those files?
Don't be confused its simple Search in our device forum for CM Tree and Kernel and Vendor. The Dev of CM for your Device forum will specify it in his ROM thread.
Once you obtain the github for your Device Tree, Vendor and Kernel. Enter following command
Code:
cd cm11/.repo
Here in .repo folder you have to create file called local_manifests.xml
1) Enter The Following Command in Terminal
Code:
nano local_manifest.xml
Structure of Local_manifest.xml is Has follows.
Code:
[COLOR=#000000][COLOR=#0000BB]<?xml version[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"1.0" [/COLOR][COLOR=#0000BB]encoding[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"UTF-8"[/COLOR][COLOR=#0000BB]?>
[/COLOR]<manifest>
[/COLOR]<project path=" directory in work tree" name="name of the repository in remote" remote="name of remote defined earlier" revision="branch of the repository" />
[COLOR=#000000]</manifest>[/COLOR]
2) Add your Device , Kernel , Vendor Source
Taking my Ex here of GT-I9082
After Adding device tree , Vendor , kernel my Local_manifest.xml will look like has follows
Code:
[COLOR=#000000][COLOR=#0000BB]<?xml version[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"1.0" [/COLOR][COLOR=#0000BB]encoding[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"UTF-8"[/COLOR][COLOR=#0000BB]?>
[/COLOR]<manifest>
<project path="device/samsung/i9082" name="pawitp/android_device_samsung_i9082" remote="github" revision="cm-11.0" />
<project path="vendor/samsung/i9082" name="k2wl/android_vendor_samsung_i9082" remote="github" revision="master" />
<project path="kernel/samsung/i9082" name="pawitp/android_kernel_samsung_i9082" remote="github" revision="cm-11.0" />
</manifest>[/COLOR]
3) Press ctrl+O and Enter
4) Press Ctrl+X to exit.
After Adding Device Tree,Vendor,Kernel sources just repo sync again so that the files are downloaded. you can also add which files you want to download or you dont want to download. More about manifest and local_manifest will be explained by @Kishan14 in his guide
Once that is done now you have your device Identity with you:laugh::laugh::highfive:
Now follow the Instruction Given by @rutvikrvr in POST 9 to make the your CM Device Tree Compatible with your ROM Source.
Once your CM Device tree is successfully made compatible with your ROM its Time for Building
Now Building Command Various with Rom which you want to compile its different for different ROM you have to see the Manifest of The Rom for it has instruction for building will be given there. Since i m Taking example of CM11 and Device has GT-I9082 the steps goes has follows
1) Enter the Following command in Terminal
Code:
cd cm11
Just Replace CM11 by your working directory of Rom . Ex : AOGP,AICP etc
2)Now enter following Command To Terminal
Code:
[COLOR=#000000][COLOR=#007700]. [/COLOR][COLOR=#0000BB]build[/COLOR][COLOR=#007700]/[/COLOR][COLOR=#0000BB]envsetup[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]sh[/COLOR][/COLOR]
3) Build Instruction Varies from Rom to Rom so check manifest of ROM for the Same. General instuction is
Code:
[COLOR=#262626]time brunch <codename>[/COLOR] [COLOR=#000000][COLOR=#007700]-[/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#FF8000]#[/COLOR][/COLOR]
<Codename> CodeName of your Device
# is the No of CPU cores you have.
Building will take time depending on your system configuration.
Once building is Done.
Its Time to apply patches which will be given in our CM Rom thread if any.
Follow the guide by @rutvikrvr in Post 10 for applying patches.
Once Done rebuild again using command above (This time building will be fast)
Now go to your working directory and go to OUT/target/your device/ you will get the Zip of the Rom.
Always make a backup of your current Rom.
Flash it via recovery and check.:laugh::laugh:
Hurrrrrray You Just Developed A Rom from Source​
Uploading Device Tree To Github​
So Guys till now we learnt lot of stuffs and finally we build a Rom :highfive: During building the Rom we may have edited lot of stuffs in device tree To avoid those being repeated in case you delete the Tree or If your ROM is Unofficial then you have to upload the Device Source Tree to Github. There are lot of uses if you upload the device tree.
Lets Start with guide Now
1) Create a account in Github.
2) Generate a new SSH key
Enter Following command to Terminal
Code:
ssh-keygen -t rsa -C "[email protected]"
"[email protected]" = your github Email ID
After pressing Enter you will Observe the following output
Code:
# Creates a new ssh key, using the provided email as a label
# Generating public/private rsa key pair.
# Enter file in which to save the key (/home/you/.ssh/id_rsa):
Press Enter.
Now you need to enter the passphrase
Code:
# Enter passphrase (empty for no passphrase): [Type a passphrase] # Enter same passphrase again: [Type passphrase again]
Once all done you will see the following in your Terminal.
Code:
Your identification has been saved in /home/you/.ssh/id_rsa.
# Your public key has been saved in /home/you/.ssh/id_rsa.pub.
# The key fingerprint is:
# 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db [email protected]
Now go to ~/.ssh folder and copy your id_rsa.pub content into account administration on github.com.
That is go to github account settings and SSH
copy paste id_rsa.pub content there and save it done.
Now Its Time To Check If Everything Works.:highfive:
Enter The Following Command To Terminal
Code:
ssh -T [email protected]
It should display has follows
Code:
The authenticity of host 'github.com (207.97.227.239)' can't be established.
# RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
# Are you sure you want to continue connecting (yes/no)?
type yes and press enter
Code:
Hi username! You've successfully authenticated, but GitHub does not
# provide shell access.
Now All Done Its Time To Upload The Device Tree To Github
Example Device and Rom : GT-I9082 and AOGP Rom.
In the following steps i take my example device and Rom just replace the device with your device and Rom with your Rom
Steps :
In Terminal
Code:
cd aogp/device/samsung/i9082
Then Type Following
Code:
git init
Setting up of the git files required to push the files to the github account will be done by following command
Code:
git add .
Now we need to comment on the files we are pushing to github hence enter following command
Code:
git commit -m "first commit"
Now Go to your Github account click on add button on top next to your username and Select New repository
enter the Name of your repository in my case you can see the ScreenShot below
now you can see some commands displayed enter the git link displayed in your repository created the terminal in my case
Code:
git remote add origin https://github.com/username/aogp_device_samsung_i9082.git
Last Step is To Push The Source to Github. Enter The Following Command in Terminal
Code:
git push origin master
The Passphrase is the same you entered while creating SSH key.
Finally your source is in Github now add Readme.md File and mention This is <ROM NAME> Device Tree For <Your Device>
You Have Successfully Uploaded your Device Tree To Github ​
Credits
@rutvikrvr
@Kishan14
@k2wl (My Mentor and Inspiration for Android)​
If You want to learn more about Github and Stuffs you can visit Following Guide by XDA Senior Moderator @eagleeyetom (Thanks a lot Sir)
Guide Link : http://forum.xda-developers.com/showthread.php?t=1877040
​
Frequently Asked Questions (F.A.Q)
Following are some frequently asked Questions
1) Can I Use Different Linux OS like Linux Mint , Arch linux , Ubuntu 14.04 etc ?
Yes. you are free to use any Linux System but remember some commands may not work in other Linux System or can result in error hence i cant give support to it. If it was successful to you in Other Linux OS kindly let me know
2) Where is the next part of the Guide?
This Thread Is Still Work In Progress (WIP) hence we are working on it and will be added once done
3) I got a error for Task X and solved it. Can i share here?
Yes you can share it with solution (If u have)
4) I Got a Error Where Should I Post ?
You can copy paste the error from terminal to here using Tag or You can Pastebin it. Whichever you are Comfortable with
5) Can I Use 32Bit Linux for Android Development ?
No You need 64bit Linux System For Android Development
6) Can I use X Device Tree for Y Device (Cloned Etc) ?
No You Should use your Device Specific Tree not other Device Tree even if they are similar Device/Kernel/Vendor Tree are Specific For Each Devices. So if you dont have it then Either you make your own Tree or wait for developers to do that
7) Are Device Specific Sources Android Version Specific ??
Yes Device Specific Sources are Version Specific but modification in Source may be little or huge depending on Android Upgrade Feature/Security Enhancement etc etc ...
8) Getting Java Error While Compiling What to do ?
Its due to Wrong Java for Compiling you need right Version of Java Installed for
Kitkat : Java v1.6
Lollipop : Java v1.7
​
Some Errors and Their Solution
Set-1 (Thanks @Nikhil)
1) gr_text
the line "note : previous declaration of 'gr_text' was here" says that minui.h has declaration of gr_text which is different from definition of gr_text function.
Solution : check minui.h, 36th line (as intimated in Screenshot) and compare declaration of gr_text with the definition of gr_text in file recovery/graphics.c in device tree. they should be same.
2) hardware ril
this generally happens when hardware/samsung is missing some files.
Solution : enter this in terminal
cd hardware && git clone https://github.com/SlimRoms/hardware_samsung.git -b kk4.4 && mv hardware_samsung samsung
you can use Rom specific github link, SlimRoms is an example.
3) hwc_blit
"'HWC_BLIT' was not declared in this scope". HWC_BLIT is a variable with value 4 and it is required to be declared
Solution : there is a file include/hardware/hwcomposer_defs.h in device tree, you can initialize HWC_BLIT as 4.
4) java version
From Froyo to Kitkat, version of java required is 1.6
From Android L, version of jave required will be 1.7
Screenshot has version 1.8 hence the error.
Solution : Install Java 1.6
//Install JDK6
//Download bin file from http://ghaffarian.net/downloads/Java/JDK/
//To remove existing java package
sudo apt-get purge openjdk-\* icedtea-\* icedtea6-\*
//install java JDK6 (download and keep .bin file in root directory.)
sudo mkdir -p /opt/java/64/
sudo cp jdk-6u45-linux-x64.bin /opt/java/64
sudo su -
cd /opt/java/64
chmod +x jdk-6u45-linux-x64.bin
./jdk-6u45-linux-x64.bin
exit
//add JDK path to .bashrc
gksudo gedit ~/.bashrc
//add following lines to .bashrc
# Java PATHs
export JAVA_HOME=/opt/java/64/jdk1.6.0_45
export PATH=$PATH:$JAVA_HOME/bin
//install jre
sudo apt-get install openjdk-6-jre-headless
Set-2 ([email protected]JJsevol)
# Errors you might see when you run the build command.
# Error 1: build/envsetup.sh: line 1365: schedtool: command not found
SOLUTION: sudo apt-get install schedtool and rerun build command.
# Error 2: /bin/bash: prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-gcc: cannot execute binary file
/bin/bash: prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-gcc: cannot execute binary file
SOLUTION: You're most likely not running a 64-bit linux version. To make sure, type uname -m
If you see i686, you have a 32-bit version. If you see x86_64, you have a 64-bit version. If you have 32-bit start over with a amd64 version http://releases.ubuntu.com/13.10/
# Error 3: If you see a 127 bison error
SOLUTION: sudo apt-get install bison build-essential curl flex git gnupg gperf libesd0-dev libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop openjdk-6-jdk openjdk-6-jre phablet-tools pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev
In addition to the above, do
sudo apt-get install g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev
Contributors To The Guide
@jackeagle
@Kishan14
@rutvikrvr
@k2wl
@Trach
Credits :
@k2wl (Thanks A Lot)
XDA Developers
​
Repo and Manifests
​Hello guys..
There are many upcoming developers and many dev on xda.Till now you all have learned how to setup build enviroment and packages required and build process. Now here I will be sharing few tips and tricks that will help some new developer for developing their ROMs and Kernels. Well, I am not pro in all these stuff even I am a newbie. I have came across many guides and my best friend Google.
These tips may save your Time, Internet Bandwidth, HDD space etc..
Requirements:
Basic Knowledge of compiling ROM/kernel
Ok so here I Start:
Repository (Repo)
​What is Repo?
Repo is a repository management tool that we built on top of Git. Repo unifies the many Git repositories when necessary, does the uploads to our revision control system, and automates parts of the Android development workflow. Repo is not meant to replace Git, only to make it easier to work with Git in the context of Android. The repo command is an executable Python script that you can put anywhere in your path. In working with the Android source files, you will use Repo for across-network operations. For example, with a single Repo command you can download files from multiple repositories into your local working directory
Was that a bit tough definition.. no worries ... here's Screenshots explaining roughly.
The image shown above is repositories (Platform_mainfest,C-Rom Device tree, android etc.)
In Simple words you can say 'repo is a folder that stores code'. In the above image, the two repo's are highlighted. the black highlighted repo is the one which one have written or contributed. The other (red) one shows that the repo is forked from someone else repo.
Repo Tool:
This tool plays a vey important role in downloading rom source.. So the word ‘Repo’ is common with you guys as u do ‘repo init’ ‘repo sync’ ..
Remember,From the above guide, while setting up you Linux you entered a command
Code:
mkdir ~/bin && curl [URL]http://commondatastorage.googleapis.com/git-repo-downloads/repo[/URL] > ~/bin/repo && chmod a+x ~/bin/repo
In simple language This Step was to download and install the Repo tool..
Why This Tool is used?
The Repo Tool helps you to download the bunch of repositories by entering just a single command, which helps us to make our downloading part easier.To download the source following command is used:
Code:
repo sync -j#
# - number of jobs you want to give for your downloading source.
Now A question may arise that What does Repo Tool actually do??
Umm, Let me explain with an example, Let's take the above example. The repo tool takes all the reference for the code to be downloaded from a Manifest.xml. Suppose you wanna download cm source. So as mentioned above, you have to give 'repo init' command. after this command '.repo' folder is created. you ll find 'manifest.xml' file in '.repo' folder. Now when you open Manifest.xml file you'll find some path of files and folders. The command 'repo sync' downloads the folders and files that is mentioned in manifest.xml to the specific location mentioned.
Now, the '-j#' tag represents the number of jobs you allow your pc to download the source. For Normal internet speed it is recommended to use -j2 or -j4. For faster connection -j16 or -j32 is recommended.
The Manifest
​The manifest.xml is a file which is written in xml markup and directs the repo tool to the repositories and their respective branches that need to be downloaded. This manifest is located under the head of the android source tree in the .repo/manifests/ directory. The manifest is formatted in XML markup and contains information regarding which git repositories to use, where they are located on the internet, where to put them in the source code directory, and what branches of the git repositories are used. Some of these repositories are pulled, unmodified from AOSP, but most come from CyanogenMod on GitHub. We can take repositories from different git servers, use different branches for each one of them, gather them into groups for easy management and more. Here’s an example for a manifest xml file:
Code:
<manifest>
<remote name="aosp"
fetch="https://android.googlesource.com/"/>
<remote name="aogp"
fetch="https://github.com/aogp/"/>
<default revision="master"
remote="aosp"
sync-j="4" />
<project path="art" name="platform/art" />
<project path="bionic" name="platform/bionic" groups="pdk" />
<project path="dalvik" name="platform_dalvik” remote=“aogp”/>
<project path="frameworks/base" name="platform_frameworks_base" remote=“ aogp" revision=“statusbar_fixes"/>
<project path="tools/adt/eclipse" name="platform/tools/adt/eclipse" groups="notdefault,tools" />
</manifest>
Let’s review its structure and see why it is used :laugh:
<remote>
The remote tag is describing the remote git servers we support pulling repositories from. In this case, we have a remote named aosp, linking to the Google’s AOSP git server, and another one named AOGP, linking to a Github account of the user “AOGP”.
<project>
Defines a single repository. These are the main attributes:
path – Where the repository will be checked out into, relative to the current working directory.
name – The name of the project on our git server
remote – The name of the remote server where the repository can be found.
revision – The branch/tag name we want to checkout.
group – The group name(s) for this project. We can declare a set of projects as members of a group, then sync only them. Omitting this attribute makes the project a member of the “default” group.
<default>
Now like the remote is specified , you can base you're manifest at a particular remote and define it as your default remote. it defines a default values for attributes we are using, when syncing the system. In this case, we set the default branch to checkout each project on its “master” branch and the default remote as “aosp”. If we omit those attributes when defining a project, the defaults defined here will be used. Other interesting attributes:
sync-j
The value for this will be the number of jobs to use when syncing the system. Parallelization helps get the job done quicker, but could also get the computer or the network stuck. Using 4 threads is what commonly used for syncing.
sync-c
syncing only the current branch/tag from git. This will checkout for each project only the current branch/tag that we specify for it, and not any other branches that exists on the repository. This will help save some space and bandwidth (and also time), but if you’ll need to switch between branches on a specific project later on – you’ll need to fetch it manually.
Local_Manifest :
​
If you wanted to change the manifest.xml list, you could edit default.xml directly. However, this would make your local copy of the manifest conflict with the official version on github. This could create issues when the official manifest is updated, as it would clash with your changes.
SO NEVER THINK OF EDITING DEFAULT.XML:silly:
Now The Question Arises how we can control the sync?
This is where local manifests come into play.
Creating a local manifest allows you to customize the list of repositories used in your copy of the source code by overriding or supplementing the default manifest. In this way, you can add, remove, or replace source code in the official manifest with your own. By including repositories (which need not even reside on GitHub) in a local manifest, you can continue to synchronize with the repo sync command just as you would have previously. Only now, both the official repositories from the default manifest and the additional repositories you specify will be checked for updates.
Hence Local_manifest.xml is BOON to Developers:highfive:
Uses of Local_manifest.xml
1) Adding and removing repositories
To add to the contents of the default manifest, create a file called local_manifests.xml under the .repo directory, this can also be created via terminal by using following steps:
A) open terminal (Ctrl+Alt+T) and type the following command and hit Enter.
Code:
cd path_of_ur_folder/.repo
B) Type following command
Code:
nano local_manifest.xml
Now type the content you wanna add to local_manifest.xml. After completing press "ctrl+O" and then hit enter to save it. to exit nano editor press "ctrl+X"
Simple Isn't it?:laugh:
Let's start with an Example which we can use to describe the scenario:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="github" fetch="git://www.github.com/" />
<remove-project name="CyanogenMod/android_hardware_qcom_fm" />
<project path="hardware/qcom/fm" name="aogp/hardware/qcom/fm" remote="github" revision="cm-11.0"/>
</manifest>
Meaning of Above Terms
1) <?xml version="1.0" encoding="UTF-8"?>
It is a standard XML declaration, telling interpreters this is an Extensible Markup Language file. Once this is established, the <manifest> and </manifest> tags enclose some contents which the repo command will recognize.
2) <remote name="github" fetch="git://www.github.com/" />
First, a remote for git is declared and given the name "github". In git, a remote essentially refers to a place and method for accessing a git repository. In this case, www.github.com contains special up-to-date repositories for fm qcom hardware from "AOGP" platform. This is equivalent to the following git command:
git remote add github git://www.github.com/
3) <remove-project name="CyanogenMod/android_hardware_qcom_fm" />
This line removes a project (specifically, cyanogenmod/android_hardware_qcom_fm) declared in the default manifest. After running repo sync, it will no longer be available in the source tree.
4) <project path="hardware/qcom/fm" name="aogp/hardware/qcom/fm" remote="github" revision="cm-11.0"/>
This line defines a new project. In this case, it replaces the removed project android_hardware_qcom/fm with one from other, using the remote that was defined above.
When adding a new project that replaces an existing project, you should always remove that project before defining the replacement.
You can simply add a new project to the source code, such as when you want to add your own app to the build.
Note that when adding new projects, there are at least three parts defined:
• remote -- the name of the remote. this can be one that was defined in either the default manifest or local_manifest.xml.
• name -- the name of the git project-- for github it has the format account_name/project_name.
• path -- where the git repository should go in your local copy of the source code.
• revision -- (optional) which branch or tag to use in the repository. If this attribute is omitted, repo sync will use the revision specified by the <default ... /> tag in the default manifest.
After creating .repo/local_manifests.xml, you should be able to repo sync and the source code will be updated accordingly
This was all about Repo and Manifest
Now i'm gonna give you some tips that will help you a more better way in developing.!!!
TIPS AND TRICKS
Tip#1 Syncing a full new source tree in minutes!
​
Suppose you wanna compile multiple roms for device. For example, you may want to have an AOGP source tree as well as a CM tree.
Obvisouly, you could repeat the same steps, to repo init and then repo sync -j8 for both. But that would be twice as time consuming. isn't it?
No issues, there is a simple trick to download the source within few minutes(depending on your internet speed). Lets say that you have already initialized and synced a CM source tree, in ~/roms/cm11.
Now, we will prepare a new repo for AOGP tree, in ~/roms/aogp. Here comes the trick: We will use the --reference flag of repo init to indicate to repo that we already have a local repository that it can take information from, instead of downloading everything from Internet again:
So Lets say u wanna begin with AOGP, So here's the steps you got to follow :
Code:
mkdir roms/aogp &&cd roms/aogp
Code:
repo init --reference=~/roms/cm11 -u git://github.com/AOGP/android.git -b cm-11.0
You should notice a big time difference, from hours for a full repo sync, down to minutes using this trick!
Did u understood what it exactly did? NO!
here's simple words explaining about reference flags. In this tip (reference flag) the repo tool does it checks the locally downloaded source and skips downloading that it Symlinks the code from the existing source to the new source.
Tip#2 Using CCACHE a.k.a Compiler's Cache tool
​
CCACHE also known as a compiler cache tool, which caches the output of the compiler, to save time when compiling a file which has not been changed since the last compile. It is really a best companion of rom developers
To enable CCACHE,
use your favorite editor.. I ll be using nano editor
1) Open a terminal ( cntrl + alt + t ) and type
Code:
nano .bashrc
2) Add the following code :
Code:
export USE_CCACHE=1
After you log out and back in again, this change will take effect.
By default, the Android build process creates a subfolder named “out” within the root of your source tree. While for most users this is best, in some situations it can be advantageous to move the output directory to another file system. If, for example, you have a striped RAID array, it is beneficial to store the output directory on this array. All of the files within the out directory can be re-generated in the event of filesystem problems (if the sources were held on another filesystem).
To change the output directory to another filesystem, use the command
Code:
export OUT_DIR_COMMON_BASE= /<path_of_your_choice>/.ccache
Code:
prebuilts/misc/linux-x86/ccache/ccache -M 50G
The suggested cache size is 50-100G.
On OSX, you should replace linux-x86 with darwin-x86
The above defined output directory will created a new folder, named after your current source tree directory. For instance, if you have source trees as /source/tree1 and /source/tree2 and OUT_DIR_COMMON_BASE is set to /output, then output directories will be/output/tree1 and /output/tree2.
It is therefore important to ensure you do not have multiple sources stored in directories with the same name, as they would end up sharing an output directory, with unpredictable results.
Tip#3 Playing with local_manifest.xml
​
In many Manifest.xml you ll find many stuff not needed by our device. Also there are files needed and that is not present in the default.xml.
* Adding Projects to local_manifest.xml
So, to add projects to your local_manifest.xml for your device refer the following format that explains the same.
Code:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project path=" directory in work tree" name="name of the repository in remote" remote="name of remote defined earlier" revision="branch of the repository" />
</manifest>
Still have some doubts?? the following example will clear it..
Suppose i wanna add device tree, kernel and vendor for my device which is needed in Building ROM Guide Above i ll follow the above format and will make a new one for my device.
Device Example Used Here : Samsung Galaxy Grand Duos GT-I9082
Code:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project path="device/samsung/i9082" name="pawitp/android_device_samsung_i9082" remote="github" revision="cm-11.0" />
<project path="vendor/samsung/i9082" name="k2wl/android_vendor_samsung_i9082" remote="github" revision="master" />
<project path="kernel/samsung/i9082" name="pawitp/android_kernel_samsung_i9082" remote="github" revision="cm-11.0" />
</manifest>
This will download your device Identity needed for Rom Building
* Remove Unwanted Stuff From default.xml
As I mentioned above the command for removing project, you can use that command to remove the unwanted stuff from default.xml
As majority of the people here are using Linux. As dawin tool chains are used by MAC OS, So darwin tool chains and darwin packages are useless for linux users. You can remove the same by using remove project command.
For Example :
Code:
<project path="prebuilts/gcc/darwin-x86/arm/arm-eabi-4.6" name="platform/prebuilts/gcc/darwin-x86/arm/arm-eabi-4.6" groups="pdk,darwin,arm" />
<project path="prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.6" name="platform/prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.6" groups="pdk,darwin,arm" />
<project path="prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.6" name="platform/prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.6" groups="pdk,darwin,mips" />
<project path="prebuilts/gcc/darwin-x86/x86/i686-linux-android-4.6" name="platform/prebuilts/gcc/darwin-x86/x86/i686-linux-android-4.6" groups="pdk,darwin,x86" />
Before Removing Darwin Lines see below
After Removing Darwin Lines
From above you can notice earlier there were 462 projects to be downloaded but after removing darwin lines its slimmed to 444 projects.
Less projects to download sync completes faster
*Remove all the official device not required by you for compiling.
There will be many devices that are officially supported by ROM developers and there Tree will be added to Default.xml which are useless for your device.
The device may be in the following format
Code:
android_device_companyname_codename
For Example :
Code:
android_device_samsung_codename
*Similarly Remove all the kernel source not required by you as it will take more time and your precious bandwidth.
* Remove all unnecessary vendor trees from the manifest.. Why do you need the blobs for a device you are not building for !!
Hope these tips helps you a lot...!!!
Any doubts.. post on this thread.. !!
credits:; @Jacleagle for editing and screenshots..
Making CM Device Tree Compatible With Your Rom For Compiling
​
Now has we know that how to download sources the next step is to compile the source for your mobile. But Some modification are needed to compile.
There are many devices with just CM.... but the cm device tree has to be modified to compile with other roms .. .
This guide will tell u specific to slimroms and will give u an idea in general ... i will be taking Galaxy Grand Duos as an example
IF YOU ARE BUILDING FOR ANOTHER DEVICE , SIMPLY RENAME i9082 to the name of your device AND SLIM TO WHICHEVER ROM YOU ARE BUILDING .
Ok Now lets start with it.
There are mainly 3 files in CM Tree Which Should Be Modified They are,
1) cm.mk
2) cm.dependencies
3) AndroidProducts.mk
The Image below shows the general device tree .... the 3 files marked in red are the files that have to be edited .
1) Rename cm.mk to slim.mk
The Image Below Shows The Differences Between The CM.MK AND SLIM.MK
As You can see That WE HAVE JUST REPLACED CM WITH SLIM AND ADDED THE BOOTANIMATION PATH ( THE BOOTANIMATION PATH IS NOT ReQUIRED IN ALL ROMS... ONLY SLIMROMS,VANIRAOSP,LIQUIDSMOOTH AND SOKP REQUIRE THIS)
The Boot Animation Values Have To Be Changed As Per YOUR DEVICE RESOLUTION
FOR EXAMPLE IF UR SCREEN IS HD (XHDPI) THEN IT SHOULD BE AS FOLLOWS
Code:
# Bootanimation
TARGET_SCREEN_HEIGHT := 1280
TARGET_SCREEN_WIDTH := 720
PRODUCT_COPY_FILES += \
vendor/slim/prebuilt/common/bootanimation/720.zip:system/media/bootanimation.zip
Now you all must be thinking why did we rename cm.mk to slim.mk.
A Simple Answer is we go to the vendor folder and check the name and replace it. ( SOME ROM's MIGHT GIVE AN ERROR)
...for example in vaniraosp if you rename cm.mk to vanir.mk
IN SUCH A CASE SIMPLY RENAME THE "cm.mk" to "vanir_i9082.mk" and your problem is sorted Simple isn't it
So now you must be wondering about the product name ...as in the above image only the "cm" changes to "slim" with the same logic of the vendor name
In this case we see that slim is the vendor ...so we rename the cm.mk to slim.mk
this same rule applies to the content inside the slim.mk too ... we first make sure that the files are available in that location .
As you can see the image above the files exist in the vendor/slim/config.. so that means we are moving on the right track
NOTHING ELSE NEEDS TO BE TOUCHED IN THIS FILE SO NOW 33.33% OF OUR DEVICE TREE IS READY FOR COMPILING WITH THE SLIMROM SOURCE :laugh:
2) Now we have to move second file "cm.dependencies"
This file will be simply renamed by Vendor Name ...
In This Case "slim" ....so we rename it to "slim.dependencies"
SO NOW 66.66% COMPLETED
3) The Last And The Final Change Required Is In The "AndroidProducts.mk"
In This File you Simply Rename The " device_i9082.mk" to whatever you renamed the "cm.mk" to . in this case it is "slim.mk" so "device_i9082.mk" will be renamed to "slim.mk" check the image below to understand better
Hurrrray NOW OUR DEVICE TREE IS FULLY COMPATIBLE WITH THE SLIMROM SOURCE.
ALL THE BEST!!!!!! :laugh::laugh:
CREDITS
A BIG THANX TO @k2wl and @xenon92 ...THE ONLY REASON I STARTED DEVELOPMENT :highfive:
​
How to apply patches to the source ?
There are many devices that need patches for the core functions to work . So in this guide i will be talking about applying patches from github and the Gerrit Code Review HERE AGAIN I WILL BE TAKING I9082 AS AN EXAMPLE
I) APPLYING PATCHES FROM THE GERRIT CODE REVIEW .
NOTE: IF THE ROM YOU ARE COMPILING IS BASED ON CYANOGENMOD AND THE COMMIT IS MERGED ... THEN THE PATCH DOESNT HAVE TO BE APPLIED
this is how a gerrit code review typically looks . To apply a patch from here ...
STEP 1: You first have to click on patch and then copy the link
STEP 2:In your terminal navigate to the place it has to be applied (in this case the path is "frameworks/native")
as you can see the command boxed in blue .. it should look somewhat similar
after the patch is applied it asks for an input to continue ... in such a case simply press "q"
CONGRATULATIONS YOU HAVE APPLIED THE PATCH FROM THE GERRIT CODE REVIEW!!!
NOW WE MOVE ON TO APPLYING PATCHES DOWNLOADED FROM GITHUB GISTS
(GENERALLY THE FORMAT IS ".diff" or ".patch")
STEPS TO BE FOLLOWED
STEP1: DOWNLOAD THE GIST
You can simply download the gist as shown in the image below
THIS IS HOW A PATCH TYPICALLY LOOKS
these patches are used generally for unofficial cm ports or official devices of cm for other roms not based on CM
Generally the CM devs write which location has to be patched .... otherwise simply use the search bar To apply the patch above we first have to enter the hardware/broadcom/libbt folder
STEP 2: We then copy, the file that we downloaded earlier, to the folder that has to be patched in this case hardware/broadcom/libbt
STEP 3: APPLYING THE PATCH
Code:
cd nameoftheromfolder/hardware/broadcom/libbt
git checkout .
patch -p1 < nameofthefile.diff or nameofthefile.patch
It should look something like this
ITS AS SIMPLE AS THIS ..... ALL THE BEST !!! HOPE THIS GUIDE HELPS ... IF YOU HAVE ANY ISSUES OR QUESTIONS PLEASE POST IT HERE ...SO I CAN HELP :-d
THANX TO CYANOGENMOD , PAWITP ,K2WL AND XENON92
reserved
Excellent, only this time I find someone who is pleased to provide this detail android science. I really appreciate this. Thank you very much :highfive:
Kindly permit marking thread, personally for reference material. :good:
Woow such a great guide! Huge thanks, will do this in the evening
Thanks for this very useful thread.
Excellent step by step guide!!!! Hats off and thank you for taking the time!!!
Git Knowledge
Before i start,i would like to express my gratitude to GitSCM,Github and others who have provided a learning platform for everyone to use Git and learn Git
If any information was stated wrongly here,please correct me and I am open to suggestions and criticism
First of all,let's start off with the basics
git init
- The git init command is used to create a new git repository in your folder.It can be used to convert an existing, unversioned project to a Git repository or initialize a new empty repository.When the command git init is being executed,in the folder itself,it will create a .git subdirectory and in order to view the sub directory,you need to hold CTRL+H to view it.In the .git subdirectory itself contains the metadata for the repo.
git clone
- The git clone command is used to copy an existing Git repository into your folder.The cloned repository will contain all its own history and manages its own files,and its a totally isolated environment from the original repository.Important note: This is where we should always remember to keep authorship when you clone something and upload to your own github.Always remember to keep the history commits when you upload.The tutorial is here(With courtesy to @Mazda)
git add
- The git add adds a change in the working directory to the staging area.Normally once it is added,it doesnt really get recorded yet until you execute the command git commit.Therefore,if you need to manage your files,execute git status to view the file changes.The various commands are
Stages the changes that was made in the file
Code:
git add <file>
Stages the changes that was made in a folder/directory
Code:
git add <directory/folder>
git commit
- The git commit command stages the snapshot to the project.This command is used after the command git add is executed and the git commit command will do the job in recording the changes you have made and sending it to the project history which will then be uploaded into Github or BitBucket.Some commands that normally developers use
The -m stands for message in full term --message
Code:
git commit -m "Hello"
The -a command is used to tell Git to stage all file changes,be it modified or deleted.Everything is added
Code:
git commit -a
The --reset-author command is used to change back to its original committer if the commits authorship have been changed
Code:
git commit --reset-author
More is coming soon!
nice
well this is the most complete guide that a first time user for ROM development should know. :good:..nice effort
reserved
About Linux
is that possible to build rom using linux os other than ubuntu ( like arch linux, kali ) ???
yeah
Nelson George said:
is that possible to build rom using linux os other than ubuntu ( like arch linux, kali ) ???
Click to expand...
Click to collapse
according to me yes you can use other linux OS but @jackeagle suggests you to use Ubuntu 13.10 as he used this version while making the guide
thnx alot @jackeagle for this awesome guide

[Q] Error in Downloading and Building Source Code from android.source.com

I am new to android source code development. I am using Ubuntu 14.04. I used official web "source.android" as a guideline for setting up and downloading source code.
Installed:
1) Python 2.7.10
2) GNU Make 3.82
3) Git latest
4) OpenJDK: sudo apt-get install openjdk-6-jdk
Downloaded following source code:
Build Number: JDQ39, android-4.2.2_r1, Jelly Bean, Galaxy Nexus, Nexus 7, Nexus 4, Nexus 10
It downloaded approximately 65GB, is it fine?
In guide line provided on source.android.com:
a) HADN'T USED SEPARATE OUTPUT DIRECTORY.
b) HADN'T OPTIMIZED A BUILD ENVIRONMENT
c) WASN'T ABLE TO CONFIGURE: USING AUTHENTICATION
d) AFTER EDITING CODE DON'T KNOW HOW TO VERIFY GIT TAG
When I type command "lunch aosp_arm-eng" after ". build/envsetup.sh" it says:
"build/core/product_config.mk:223: *** Cannot locate config makefile for product "aosp_arm". Stop.
** Don't have a product spec for: 'aosp_arm'
** Do you have the right repo manifest?"
I have tried instruction sets from various forums but hadn't found any solution. Kindly guide me how to solve this error while building source code.

Help me Compiling CyanogenMod 13 on Ubuntu 16.04

Hi developers. I am very much newbie to whole android development and trying to learn how android works and compiling a rom for myself. Can somebody make a tutorial about compiling CyanogenMod 13 in Ubuntu 16.04 with open jdk 8 ? There are many written tutorials in internet and different guides have me different command instructions. And the android official porting guide is confusing to me. I have no prior knowledge in Java and not much in Linux commands. I am stucked at Initializing my build environment. I have downloaded the compressed source code of CM 13 from this http://forum.xda-developers.com/android/software/sources-android-sources-highly-t3231109 and extracted to a working directory naming "android"
Now after extraction, this folder contains a .repo folder containing 12GB of source code.
(whats the actual size ?)
Then followed this tutorial https://nathanpfry.com/how-to-setup-ubuntu-16-04-lts-xenial-xerus-to-compile-android-roms/
then at android dir, which is my working directory, typing these commands gave me errors attached below.
proceeded to bashrc steps without any problem, then when I typed repo init -u https://github.com/CyanogenMod/android.git -b cm-13.0 to initialize the repo, got an error message attached below. (5th attachment)
Well. As I already have those source codes in .repo, and extracted inside my working directory 'android' so I run repo sync commands which gives me an output attached below. (2nd attachment)
Then after typed these commands
cd .repo/manifests
git fetch origin
git reset --hard origin/cm-13.0
repo sync
And it started to download few things again and
gives me another result with an error (Attached below 3rd attachment).
Then typed cd vendor/cm/
it gives me a shock by no such file or directory exists. See vendor error.png attachment and I am stucked. (4th attachment)
no commands taking properly after that.. prebuilts commands stated as invalid, no device specific code downloaded (I am using a Micromax Bolt Q370 device), no breakfast command taking.. nothing. I am stucked. Whats wrong I am doing ?
I have downloaded 12 GB of data.
(Mobile Data is so expensive)
P.S. I am also uploading some snapshots of my Ubuntu home and working directory so that you can understand what's wrong with no such file or directory error. I dont want to download the whole source code again, and point me out if I am acting like a noob. Your guides will be appreciated and grateful. Have a good day.
I haven't compiled a Rom before? But none of the guides you linked are from source.android.com. Best to do a "make clean" and follow the offical guide provded by Google and adapt as needed. Also for a functioning Rom you'll probably need the proprietary binary blobs for your phone.
Best thing about the android/Google guide is that they are using ubuntu, and assume that you are to, so the guide is specifically aimed for ubuntu, making your life easier.
https://source.android.com/source/index.html
The android source guide is bit complicated for me as I am new to both git and repository things.
A video for CM 13 with a step to step guide will be appreciated at current time. I think it won't be a problem who already has repository installed and built CM 13 before.
Dont use openjdk 8, use 7 as of now 8 is still experimental.
You can try build without sync it first. Just use whatever comes from extracted tar.xz. add your device, kernel, vendor tree. Do source build/envsetup.sh , add_lunch_combo , lunch and then make otapackage.
Please check CyanogenMod build wiki.
Terminal is not taking build/env command. Well buddy, do you have cm 13 repo ?
Check out my attachments. The directories. Are they missing anything ?
The Wiki and Android Source page guides are confusing to me. Sorry I am a beginner but determined to learn
Sorry, I based my previous comment for non-repo archive. For .repo folder you should try to extract the source first and then proceed with build/envsetup.sh, etc, etc
.repo is aleady extracted to my working directory 'android', contains 13GB of source code.
Now if i give envsetup command, my linux terminal doesn't understand it and responses an invalid command error.
vikoadi said:
Dont use openjdk 8, use 7 as of now 8 is still experimental.
You can try build without sync it first. Just use whatever comes from extracted tar.xz. add your device, kernel, vendor tree. Do source build/envsetup.sh , add_lunch_combo , lunch and then make otapackage.
Please check CyanogenMod build wiki.
Click to expand...
Click to collapse
Somebody said me that openjdk 7 is incompatible for CM 13
I am done with repo sync but there are many questions in my mind and things to learn. I made a separate post of these question here http://forum.xda-developers.com/android/help/questions-compiling-cyanogenmod-13-t3496186/page1

✦✦✦ [GUIDE] Build LineageOS ✦ How To use Github ✦✦✦

{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
How-to Build LineageOS​
Introduction​
These instructions will hopefully assist you to start with a stock device, unlock the bootloader (if necessary), and then download the required tools as well as the very latest source code for LineageOS (based on Google’s Android operating system) for your device. Using these, you can build both LineageOS and LineageOS Recovery image from source code, and then install them both to your device.
It is difficult to say how much experience is necessary to follow these instructions. While this guide is certainly not for the very very very uninitiated, these steps shouldn’t require a PhD in software development either. Some readers will have no difficulty and breeze through the steps easily. Others may struggle over the most basic operation. Because people’s experiences, backgrounds, and intuitions differ, it may be a good idea to read through just to ascertain whether you feel comfortable or are getting over your head.
Remember, you assume all risk of trying this, but you will reap the rewards! It’s pretty satisfying to boot into a fresh operating system you baked at home . And once you’re an Android-building ninja, there will be no more need to wait for “nightly” builds from anyone. You will have at your fingertips the skills to build a full operating system from code to a running device, whenever you want. Where you go from there– maybe you’ll add a feature, fix a bug, add a translation, or use what you’ve learned to build a new app or port to a new device– or maybe you’ll never build again– it’s all really up to you.
What you’ll need
* A device (supported by LineageOS)
* A relatively recent 64-bit computer (Linux, OS X, or Windows) with a reasonable amount of RAM and about 100 GB of free storage (more if you enable ccache or build for multiple devices). The less RAM you have, the longer the build will take (aim for 8 GB or more). Using SSDs results in considerably faster build times than traditional hard drives.
* A USB cable compatible with the OnePlus One (typically micro USB)
* A decent internet connection & reliable electricity
* Some familiarity with basic Android operation and terminology. It would help if you’ve installed custom roms on other devices and are familiar with recovery. It may also be useful to know some basic command line concepts such as cd for “change directory”, the concept of directory hierarchies, that in Linux they are separated by /. etc.​​
Summary
1. Install SDK
2. Install build packages
3. Java
4. Create the directories
5. Install the repo command
6. Initialize the LineageOS source repository
7. Download the source code
8.Prepare the device-specific code
9. Extract proprietary blobs
10. Turn on caching to speed up build
11. Configure jack
12. Start the build
13. Install the build
Build LineageOS and LineageOS Recovery​
1. Install SDK
If you haven’t previously installed adb and fastboot, you can download them from Google. Extract it using:
Code:
unzip platform-tools-latest-linux.zip -d ~
Now we have to add adb and fastboot to our path. Open ~/.profile and add the following:
Code:
# add Android SDK platform tools to path
if [ -d "$HOME/platform-tools" ] ; then
PATH="$HOME/platform-tools:$PATH"
fi
Then, run this to update your environment.
Code:
source ~/.profile
2. Install build packages
Several packages are needed to build LineageOS. You can install these using your distribution’s package manager.
You’ll need:
Code:
bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev
For Ubuntu versions older than 16.04 (xenial), substitute:
libwxgtk3.0-dev → libwxgtk2.8-dev
3. Java
Different versions of LineageOS require different JDK (Java Development Kit) versions.
LineageOS 11.0-13.0: OpenJDK 1.7 (install openjdk-7-jdk)*
LineageOS 14.1: OpenJDK 1.8 (install openjdk-8-jdk)
* Ubuntu 16.04 and newer do not have OpenJDK 1.7 in the standard package repositories. See Ask Ubuntu question How do I install openjdk 7 on Ubuntu 16.04 or higher Note that the suggestion to use PPA openjdk-r is outdated (the PPA has never updated their offering of openjdk-7-jdk, so it lacks security fixes); skip that answer even if it is the most upvoted.
4. Create the directories
You’ll need to set up some directories in your build environment.
To create them:
Code:
$ mkdir -p ~/bin
$ mkdir -p ~/android/system
5. Install the repo command
Enter the following to download the repo binary and make it executable (runnable):
Code:
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
Put the ~/bin directory in your path of execution
In recent versions of Ubuntu, ~/bin should already be in your PATH. You can check this by opening ~/.profile with a text editor and verifying the following code exists (add it if it is missing):
Code:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Then, use this to update your environment.
Code:
source ~/.profile
6. Initialise the LineageOS source repository
Enter the following to initialize the repository:
Code:
$ cd ~/android/system
$ repo init -u https://github.com/LineageOS/android.git -b lineage-16.0
7. Download the source code
To start the download of the source code to your computer:
Code:
$ repo sync
The Lineage manifests include a sensible default configuration for repo, which we strongly suggest you use (i.e. don’t add any options to sync). For reference, our default values are -j 4 and -c. The -j 4 part means that there will be four simultaneous threads/connections. If you experience problems syncing, you can lower this to -j 3 or -j 2. -c will ask repo to pull in only the current branch, instead of the entire LineageOS history.
8. Prepare the device-specific code
After the source downloads, ensure you’re in the root of the source code (cd ~/android/system), then type:
You have to change DEVICE with the codename of your device (for example: Oneplus ONE codename is bacon)
Code:
$ source build/envsetup.sh
$ breakfast "DEVICE"
This will download your device’s device specific configuration and kernel.
Important: Some maintainers require a vendor directory to be populated before breakfast will succeed. If you receive an error here about vendor makefiles, jump down to Extract proprietary blobs. The first portion of breakfast should have succeded, and after completing you can rerun breakfast​
9. Extract proprietary blobs
Method 1
Now ensure your device is connected to your computer via the USB cable, with ADB and root enabled, and that you are in the ~/android/system/device/your_device/codename folder. Then run the extract-files.sh script:
Code:
$ ./extract-files.sh
The blobs should be pulled into the ~/android/system/vendor/your_device folder. If you see “command not found” errors, adb may need to be placed in ~/bin.
Method 2 (Recomended)
Search for your device blobs on TheMuppets or Donkeycoiote and add them to local manifest
10. Turn on caching to speed up build
You can speed up subsequent builds by running:
Code:
$ export USE_CCACHE=1
And adding that line to your ~/.bashrc file. Then, specify the maximum amount of disk space you want cache to use by typing this from the top of your Android tree:
Code:
$ prebuilts/misc/linux-x86/ccache/ccache -M 50.0G
Where 50G corresponds to 50GB of cache. This needs to be run once. Anywhere from 25GB-100GB will result in very noticeably increased build speeds (for instance, a typical 1hr build time can be reduced to 20min). If you’re only building for one device, 25GB-50GB is fine. If you plan to build for several devices that do not share the same kernel source, aim for 75GB-100GB. This space will be permanently occupied on your drive, so take this into consideration. See more information about ccache on Google’s Android build environment initialization page.
11. Configure jack
Jack is the new Java compiler used from Lineage 14. It is known to run out of memory
Simple fix is to run this command:
Code:
$ export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"
Adding that command to your ~/.bashrc file will automatically configure Jack to allocate a sufficient amount of memory.
If this doesn't help, you can reduce the number of Jacks to 1 in config.properties
$HOME/.jack-server/config.properties
jack.server.max-service=1
12. Start the build
Time to start building! Now, type:
Code:
$ croot
$ brunch [COLOR="red"]device[/COLOR]
Remember, device is the codename for your device
The build should begin.
13. Install the build
Assuming the build completed without errors (it will be obvious when it finishes), type the following in the terminal window the build ran in:
Code:
$ cd $OUT
There you’ll find all the files that were created. The two files we’re interested in are:
recovery.img, which is the LineageOS recovery image.
lineage-14.1-build_date-UNOFFICIAL-device.zip, which is the LineageOS installer package.
Success! So… what’s next?​
You’ve done it! Welcome to the elite club of self-builders. You’ve built your operating system from scratch, from the ground up. You are the master/mistress of your domain… and hopefully you’ve learned a bit on the way and had some fun too.
Now, what to do next? You can jump to next section of this guide to understand how Github works and how to pick some commits from other developers/teams to improve your custom ROM​
This guide was taken from Official LineageOS wiki and all credits goes to LineageOS Maintainers ​
What is Github and how to use it
GitHub is a code hosting platform for version control and collaboration. It lets you and others work together on projects from anywhere. It is a powerful tool with many features available and here i´m going to talk about how you can use it to help you build and customize your "Custom ROM"​
Summary
1. Repositories
2. How to add/remove repositories
3. How to add/remove remotes
4. Repository Fork
1. Repositories
Now that you have built custom lineage from source to your device, you can explore deeper and see how things work and change them according to your needs.
First we are going to se what is inside .repo folder
Code:
cd ~/working_dir/.repo
ls
It will show you something similar to this:
Inside the .repo folder are the necessary "manifest files" that tell the repo sync command what to include or remove from our project when synchronizing with the source
Open manifest.xml
Code:
gedit ~/working_dir/.repo/manifest.xml
Inside that file you have all information about which repositories belongs to source. These are the base repositories to build LineageOS.
Inside ~/working_dir/.repo/local_manifests/roomservice.xml you can see the repositories needed to build for your specific device. This file is created after breakfast device step and includes, besides others, device tree and kernel.
2. How to add/remove repositories
Lets take a look at how we use roomservice.xml to add/remove repo's from our project, i will use Oneplus ONE device tree for example
Code:
<project name="LineageOS/android_device_oneplus_bacon" path="device/oneplus/bacon" remote="github" revision="cm-14.1" />
* project name="LineageOS/android_device_oneplus_bacon Name of repository (without https://github.com)
* path="device/oneplus/bacon" Here is where the files will reside in our working directory
* remote="github" Is the for remote we are using, in this case is github (see below how to add/remove remotes to your project)
* revision="cm-14.1" Revision is the branch we want to sync
Image:
3. How to add/remove remotes
Code:
<remote fetch="https://github.com" name="github" />
* remote fetch="https://github.com Url for remote you want to add to your project (in this case, we are working with github)
* name="github" This is the name for remote
Now that you understand the concept of repository, you can "fork" one and start making your
changes and keep it up to date with LineageOS source. For that, you need a Github Account.​
4. Repository Fork
In this example, i will fork Oneplus ONE device tree
1. Create Github Account
2. Go to https://github.com/LineageOS/android_device_oneplus_bacon and tap on Fork button. After that you can see that repository on you Github account
Image:
3. Now that you have "forked" one repository, you need to edit ~/working_dir/.repo/local_manifests/roomservice.xml and change the default location to your location on your github.[/SIZE]
Image:
This is the basic steps you need to understand how to use Github to keep your code saved and updated. On next section, i will tell you how use Git so you can work on your project and start to pick some cool commits from others projects.​
Reserved
Reserved
Hello ,
Thanks for your tutorial. It was very well explained.
I have a question in the step: "Prepare the device-specific code".
The last available branche of my device at https://github.com/LineageOS/android_device_samsung_treltexx/tree/cm-13.0, is the cm-13.0 version,
Should I tell which of the options on the device?
$ Source build / envsetup.sh
$ Breakfast "[COLOR =" Red] Samsung Galaxy Note 4 (Exynos) or treltexx [/ COLOR]
Another question: since the last branche is from cm-13.0, if I follow your tutorial, will it compile a, lineage 14.1 rom? Or CYanogenmod 13.0?
Thank you
John Jefferson said:
Hello ,
Thanks for your tutorial. It was very well explained.
I have a question in the step: "Prepare the device-specific code".
The last available branche of my device at https://github.com/LineageOS/android_device_samsung_treltexx/tree/cm-13.0, is the cm-13.0 version,
Should I tell which of the options on the device?
$ Source build / envsetup.sh
$ Breakfast "[COLOR =" Red] Samsung Galaxy Note 4 (Exynos) or treltexx [/ COLOR]
Another question: since the last branche is from cm-13.0, if I follow your tutorial, will it compile a, lineage 14.1 rom? Or CYanogenmod 13.0?
Thank you
Click to expand...
Click to collapse
Since your device tree doesn't have 14.1 branch you have to sync Lineage 13.0 branch
Code:
repo init -u https://github.com/LineageOS/android.git -b cm-13.0
After that you have to sync your especific device repos
Code:
$ source build/envsetup.sh
$ breakfast treltexx
A3 2017
Hi , I have Galaxy A3 2017 I got to point of breakfast and I cound download files for my phone. What I have to do if I want to have Lineage OS Nuggat in my phone. I hate original rom :-{
breakfast a3y17lte
including vendor/cm/vendorsetup.sh
build/core/product_config.mk:249: *** Can not locate config makefile for product "lineage_a3y17lte". Stop.
build/core/product_config.mk:249: *** Can not locate config makefile for product "cm_a3y17lte". Stop.
build/core/product_config.mk:249: *** Can not locate config makefile for product "lineage_a3y17lte". Stop.
Device a3y17lte not found. Attempting to retrieve device repository from LineageOS Github
Repository for a3y17lte not found in the LineageOS Github repository list. If this is in error, you may need to manually add it to your local_manifests/roomservice.xml.
build/core/product_config.mk:249: *** Can not locate config makefile for product "lineage_a3y17lte". Stop.
build/core/product_config.mk:249: *** Can not locate config makefile for product "lineage_a3y17lte". Stop.
** Don't have a product spec for: 'lineage_a3y17lte'
** Do you have the right repo manifest?
Is that mean that I have to wait for support from LineageOS dvlpr team <?
Roman
roman01110 said:
** Don't have a product spec for: 'lineage_a3y17lte'
** Do you have the right repo manifest?
Is that mean that I have to wait for support from LineageOS dvlpr team <?
Roman
Click to expand...
Click to collapse
Yes
Thanks for the great post! I have two questions to ask:
1. How to change LINEAGE_VERSION? Currently when performing brunch I've got
Code:
LINEAGE_VERSION=14.1-20170311-UNOFFICIAL-oneplus3
and I wish to change it to
Code:
LINEAGE_VERSION=14.1-20170311-HAZUKI-oneplus3
to distinguish my personal modified build.
2. When I wish to sync again to obtain latest commits, how far should I go back? Is performing "repo sync" and then "brunch oneplus3" already good enough? Do I need to perform "make clean" or something similar?
Thanks in advance!
I'm trying to build this for my galaxy s5 and I'm using that same guide to the letter and I'm just getting errors. And all those packages listed in op don't work either. I also get an error when extracting proprietary blobs. The extracting isn't the error it's that all the files aren't found in source code at all?!? I'm splitting bloody atoms trying to figure this crap out. Any help at all??
Hazuki Amamiya said:
Thanks for the great post! I have two questions to ask:
1. How to change LINEAGE_VERSION? Currently when performing brunch I've got
Code:
LINEAGE_VERSION=14.1-20170311-UNOFFICIAL-oneplus3
and I wish to change it to
Code:
LINEAGE_VERSION=14.1-20170311-HAZUKI-oneplus3
to distinguish my personal modified build.
2. When I wish to sync again to obtain latest commits, how far should I go back? Is performing "repo sync" and then "brunch oneplus3" already good enough? Do I need to perform "make clean" or something similar?
Thanks in advance!
Click to expand...
Click to collapse
1. In order to add some code to your build, you have to get familiar with git/GitHub. I'm preparing my next chapter to talk about it
2. Yes, you have to "make clean" everytime before build
thatsupnow said:
I'm trying to build this for my galaxy s5 and I'm using that same guide to the letter and I'm just getting errors. And all those packages listed in op don't work either. I also get an error when extracting proprietary blobs. The extracting isn't the error it's that all the files aren't found in source code at all?!? I'm splitting bloody atoms trying to figure this crap out. Any help at all??
Click to expand...
Click to collapse
You have to show all your errors and all your steps in order to get help!
I'm using the exact same directions in the OP. No different order exactly the same order only for my specific device. The first pic is when I extract the proprietary blobs from the lineage ROM zip. The second pic is after trying to build it I get the ninja wrapper error 1 at the end. Oh and I'm running ubuntu 16.10 on VirtualBox. And my build environment was setup step by step off the android website
thatsupnow said:
I'm using the exact same directions in the OP. No different order exactly the same order only for my specific device. The first pic is when I extract the proprietary blobs from the lineage ROM zip. The second pic is after trying to build it I get the ninja wrapper error 1 at the end. Oh and I'm running ubuntu 16.10 on VirtualBox. And my build environment was setup step by step off the android website
Click to expand...
Click to collapse
Why did you run: " ./extract-files.sh ~/original"
FSadino said:
* A relatively recent 64-bit computer (Linux, OS X, or Windows) with a reasonable amount of RAM and about 100 GB of free storage (more if you enable ccache or build for multiple devices). The less RAM you have, the longer the build will take (aim for 8 GB or more). Using SSDs results in considerably faster build times than traditional hard drives.
Click to expand...
Click to collapse
Can you tell me, where the space is nescessary in the file-sytem on a linux-PC?
Of course /home needs much space, as the build is done there, but where else?
JamBax said:
Can you tell me, where the space is nescessary in the file-sytem on a linux-PC?
Of course /home needs much space, as the build is done there, but where else?
Click to expand...
Click to collapse
It depends on which Linux distribution you install. Usually between 10Gb/15Gb should be enough for file system partition "/"
FSadino said:
It depends on which Linux distribution you install. Usually between 10Gb/15Gb should be enough for file system partition "/"
Click to expand...
Click to collapse
It is kubuntu 16.04.02, so this means all the hard disk space will be for /home filesystem, correct?
Another question, where is the space for the cache, for i can't see any parameter.
edit ok, looks like the cache is located at /home/..ccache, is there a possibility to move this location?
Could it be, that java 8 can be used for 13.0 also? I did not install java 7, but was able to build a working lineage 13.0.
JamBax said:
It is kubuntu 16.04.02, so this means all the hard disk space will be for /home filesystem, correct?
Click to expand...
Click to collapse
You have to make root partition for system (/) with 10Gb/15Gb and home partition (/home) with the remaining disk space.
Another question, where is the space for the cache, for i can't see any parameter.
edit ok, looks like the cache is located at /home/..ccache, is there a possibility to move this location?
Click to expand...
Click to collapse
Search on Google "how export ccache to other location"
Could it be, that java 8 can be used for 13.0 also? I did not install java 7, but was able to build a working lineage 13.0.
Click to expand...
Click to collapse
Yes
I have a question. I repo synced lineage 13. The build was successful but doesn't boot. I am building for Moto E surnia. I breakfast surnia it didn't ask for vendor files but built correctly. What could be wrong? The kernel log doesn't tell me too much. It's frustrating. All my previous builds booted up before.( I compiled DU for the surnia) Also use the same environment to build Twrp recoveries. I am downloading lineage 14 to try again. Maybe someone can point me in the right path please
Hi, I am building klte version of CrdroidAndroid ( a LineageOS based ROM) on a ubuntu 16.04 LTS VM.
I am getting the following error. I am not sure what to do here. I have been cleaning the build folder and ccache and trying to build. I keep ending at this error. Any help to solve this issue is greatly appreciated.
----------------------------------
/usr/bin/x86_64-linux-gnu-ld: /home/sadanand/crdroid/android/system/out/host/linux-x86/obj/SHARED_LIBRARIES/libart_intermediates/base/allocator.o: relocation R_X86_64_PC32 against protected symbol `_ZN3art18g_malloc_allocatorE' can not be used when making a shared object
/usr/bin/x86_64-linux-gnu-ld: final link failed: Bad value
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
------------------------------
Thanks
[email protected] said:
I have a question. I repo synced lineage 13. The build was successful but doesn't boot. I am building for Moto E surnia. I breakfast surnia it didn't ask for vendor files but built correctly. What could be wrong? The kernel log doesn't tell me too much. It's frustrating. All my previous builds booted up before.( I compiled DU for the surnia) Also use the same environment to build Twrp recoveries. I am downloading lineage 14 to try again. Maybe someone can point me in the right path please
Click to expand...
Click to collapse
Try build with vendor files
sada23 said:
Hi, I am building klte version of CrdroidAndroid ( a LineageOS based ROM) on a ubuntu 16.04 LTS VM.
I am getting the following error. I am not sure what to do here. I have been cleaning the build folder and ccache and trying to build. I keep ending at this error. Any help to solve this issue is greatly appreciated.
----------------------------------
/usr/bin/x86_64-linux-gnu-ld: /home/sadanand/crdroid/android/system/out/host/linux-x86/obj/SHARED_LIBRARIES/libart_intermediates/base/allocator.o: relocation R_X86_64_PC32 against protected symbol `_ZN3art18g_malloc_allocatorE' can not be used when making a shared object
/usr/bin/x86_64-linux-gnu-ld: final link failed: Bad value
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
------------------------------
Thanks
Click to expand...
Click to collapse
Try to use GCC 4.9 or if you already using it try update to GCC 5

Categories

Resources