[Android Software/Hacking General [Developers Only]] laufersteppenwolf:
Hey guys

I've been working on some scripts to automate my work for quite some time now and thought, why not share it? ;)

So that's what I'm gonna do now :D

For now, we have three scripts: one to build a ROM, one to compile a kernel, to make an anykernel updater zip and to set up and entire build environment on Arch and Ubuntu-based distros (2nd post). The kernel and anykernel scripts, however, are linked, which means the kernel script automatically executes the anykernel script so as soon as you compile a kernel, you get a recovery flashable zip.

A small note: These scripts were made for the LG Optimus 4x HD, but can easily be modified for any other device.

So, you may ask yourself now 'nice, but what do these script do exactly?' well, that's what I'm gonna tell you now ;)

ROM

The ROM build script can be found HERE

This script is made for CM 11, but can be easily modded to be used with other ROMs. I will also add some more scripts to support more ROMs in the future.

In order to make it compatible with your machine and your device, we have several configurable parameters in the beginning of the script:

# Configurable parameters
ccache_dir=/home/laufersteppenwolf/ccache/CM11
ccache_log=/home/laufersteppenwolf/ccache/CM11/ccache.log
jobs_sync=30
jobs_build=20
rom=cm
rom_version=11
device_codename=p880

If you want to use a special ccache dir, you can define it using the first parameter. Same for ccache's log.

The "jobs_sync" variable defines how many jobs will be running at the same time while running "repo sync" (---> the -j value)

The "jobs_build" variable defines how many jobs will be used for the make command

"rom" defines the ROM you are trying to compile (used in the lunch command, but also for the zip upload command)

"rom_version" defines the version of the ROM. You can change it to 10.2 or any other version depending on the CM version you are compiling.

Last but not least, the devices codename. In my case it's "p880", but you can just change it to your device (mako, hammerhead, maguro,...) and the lunch as well as the upload command will be changed to your device.

About the upload, if you have a goo.im account and also configured it in your ssh_config, you can just leave it the way it is. However, if you use a different file hoster, please edit the last command to your needs ;)

Furthermore, we have some more features. These, however, don't need to be defined inside the script, but added to the execution command.

You can execute the script with the command:

. build.sh [-h -n -r -c -ncc -d -j #]

But what do these flags do?

-h | --help

shows a help message and exits the script

-n | --nosync

skips the "repo sync" command

-r | --release

uploads the build when it's done

-c | --clean

executes "make clean" instead of "make installclean"

-ncc | --no_ccache

disables ccache

-d | --debug

shows some debug stuff (not really needed for the "normal" user ;) )

-j #

sets a custom number of jobs for the "make" command

Example:

. build.sh -c -r

This command syncs the repos, executes "make clean" instead of "make installclean" and uploads the build to the defined file hoster as soon as the build is done.

Kernel

The kernel build script can be found HERE

This script is made for the p880 (aka x3), but can be easily modded to work with your device.

We have 2 configurable parameters in the beginning of the script:

defconfig=cyanogenmod_x3_defconfig
jobs=32

"defconfig" defines the name of your defconfig to be used

And "jobs" defines the -j value to be used for make

All modules are being copied to ./out/modules/ and the zImage is being copied to ./out/zImage. Which means no more searching for modules inside the various folders, but having everything in one place ;)

If you take a look into the script, the created out dir is after the above command copied to "~/smb/kernel/out". This is where my network drive is mounted. Please change it to a path of your choice.

This folder now needs to have the files from the anykernel folder inside, because the anykernel build script is being executed next. What this script exactly does will be explained later.

When the anykernel updater zip is done, the script cd's back to the place it was initially executed and will then be done.

If you don't want to make an anykernel zip, just remove the commands after

find -name '*.ko' | xargs -I {} cp {} ./out/modules/

(well, maybe except for the commands that tell you the script it done ;) :p )

Anykernel updater zip

Wanna know what an anykernel updater zip is?

The anykernel updater zip only replaces the actual kernel (zImage) and not the whole boot.img. This means the ramdisk stays the same, which makes the kernel compatible with every ROM and Android version.

The script and it's needed tools can be found HERE

This script creates an anykernel updater zip from a given zImage and modules. The zImage has to be in the same folder as the script itself. The modules have to be in a folder called "modules", which also should be located in the same folder as the script. In the beginning of the script, you can define the name of the zip:

zipname="WWJB_v009_anykernel.zip"

IMPORTANT:

Please make sure to edit the updater-script so it is compatible with your device! Otherwise you can (hard) brick your device!

I am not responsible for possibly bricked devices!

Another feature of the anykernel updater is, you can mod the ramdisk while flashing (repacking the boot.img). This can be done inside THIS file. By default it creates an unsecured boot image. But you can edit way, way more using this method. For an example what can be done, you might wanna take a look at THIS file ;)

The signapk.jar and the sign keys were taken from the latest CM11 sources.

You have a question, suggestion, bug report? Please feel free to leave a reply in this thread ;) :)

Many thanks go to [MENTION=4775688]GermainZ[/MENTION] and [MENTION=3546299]doixanh[/MENTION] for helping me fighting with bash ;)

Thanks also go to Koush, for "inventing" the anykernel updater