[Android Software Development] AdamOutler:
Introduction

Heimdall One-Click is a open-source stack of software intended to eliminate our dependence on Odin and provide an unrivaled safe method to perform a complete flash of a device. Heimdall One-Click will work on any device which Heimdall covers. Heimdall One-click and Heimdall One-Click Packager can be used to distribute custom or stock firmware upgrades or downgrades currently on most Samsung devices. Each of the sections in this post could be an entire post on its own. I want to consolodate this information into a single area here on XDA.

Heimdall One-Click is a project which I have been perfecting for months. After 147 revisions I feel it is time to release. It is my hope that the use of this software will enable users to safely flash and understand what is going on while they are flashing firmware. Heimdall One-Click is based on Heimdall by Benjamin Dobell.

The basic outline goes like this...

Obtain firmware

Use Heimdall frontend to package a tar.gz

Select your tar.gz file with Heimdall One-Click. Your final package will be a executable cross-platform JAR file for redistribution which will deploy everything needed to flash your ROM.

It's really that simple. See the Downloads and Source section. I will now discuss how everything works in depth.

Warning

You have the power to damage your device and others! Several times during the development cycle I had asked myself if it was ethical to release a packager. A lack of skill can easily brick a device. Building a flashable package is a skill and I do not want to see any One-Click Nukes released into the public. So I want to set some rules-of-thumb:

1. If you are unsure, do not package bootloaders into a distribution.

2. If you are going to package bootloaders, include boot.bin, Params.lfs, Sbl.bin and repartitioning option should be checked.

3. Always flash the firmware from Heimdall-Frontend before creating a one-click. Never assume it will work.

4. Please watch this video in its entirety before attempting to package a one-click.

[youtube]W6E8_iIaPHo[/youtube]

Heimdall & Heimdall Frontend

Heimdall is a cross-platform open-source tool suite used to flash firmware (aka ROMs) onto Samsung devices. Heimdall is an "upstream package" contained within Heimdall One-Click. Heimdall is Maintained by Benjamin Dobell http://xdaforums.com/member.php?u=2710388 from Glass Echidna. Heimdall has its own discussion thread here: http://xdaforums.com/archive/index.php/t-1104826.html

Heimdall Frontend allows a graphical user interface for flashing firmware, packaging and deploying Heimdall tar.gz files. It also provides several additional tools. Heimdall Frontend has its own discussion thread here: http://xdaforums.com/archive/index.php/t-1104826.html

Heimdall One-Click Packager

Heimdall One-Click packager is a tool which will take a Heimdall tar.gz file and package it into a Heimdall One-Click. Heimdall One-Click Packager is an open-source cross-platform(win/linux/mac) program with no dependencies. After execution, the user selects a tar.gz package for one-click and the program:

1. Decompresses firmware.xml from tar.gz

2. Deploys an empty one-click java jar.

3. Writes the Tar.gz and firmware.xml into the one-click jar thereby creating a new one-click executable firmware package.

Heimdall One-Click

Heimdall One-Click's job is simple; it deploys firmware with one click while keeping the user informed. Heimdall One-Click is an open-source cross-platform(win/linux/mac), dependency installing, easy-to-use, automation tool which can install firmware onto a device in download mode. Heimdall One-Click's operation is very simple from the outside, but the operation is very complex inside. See source code for more information. Heimdall One-Click has several safety features built in which make it the safest method of deploying firmware to any compatible device.

Why use Heimdall One-Click over Odin or other methods of software distribution?

Heimdall is Open-Source software. Without Open-Source software we would not have android or custom ROMs. Open-Source developers should support and expand the work of other Open-Source developers.

Odin is closed source and propritary. Not only is the application proprietary, but the drivers are also proprietary. Open-Source developers do not support Closed-Source work as it is a hindrance to development.

Heimdall supports Open-Source Tar.GZ compression which ensures file integrity and provides higher compression than zip formats. A 500 megabyte ROM can compress to less than 200 megabytes.

Heimdall can restore operation to a device which does not even have access to recovery mode. Heimdall does not require the kernel to be operational, it works at a higher level in the Secondary Bootloader.

A Heimdall One-Click is a single executable file which contains everything needed to flash a ROM.

A Heimdall One-Click works on Windows, Linux or Mac OS-X.

A Heimdall One-Click is not a final output format. Once you make a One-Click, the contents are not lost forever. The ROM package contained within can be unzipped using your favorite archive program, modified and redistributed.

Easiest, most portable, and foolproof method of flashing

Heimdall One-Click has been designed to be the easiest, most portable and foolproof method of flashing. The requirements are that the user knows how to put their device into "Download Mode" and that the user has Java installed on their computer.

Heimdall One-Click contains:

A deployable and unpackable firmware located in /com/adamoutler/heimdalloneclick/

Installer routines

Windows Drivers

Windows C++ Redistributable Package

Windows Heimdall binary

Linux32 Debian package

Linux64 Debian package

Mac OS-X Installation package

You can find a repository of prepackaged ROMs here at the Team Komin website: http://files.teamkomin.com/ Please note, some of these were packaged during beta testing so not all of them are high quality builds.

Obtaining firmware

Before you can package a ROM for distribution, you must have firmware to package. Here are two methods of obtaining firmware.

Obtaining firmware from a live device

The following commands can be used on most Samsung Android devices to make a backup of everything but bootloaders. Bootloaders must be obtained from official builds and cannot be pulled off a working device after you have finished developing. This may not work on devices designed for RFS filesystems if the filesystems have been converted

Open a terminal to your device (terminal emulator or QuickSSHD, or adb shell)

Enter the following commands into the terminal

su
#Remove the target folder if it is present
rm -r -f /sdcard/firmwarepackage
#Write all zeros to data partition to zero flash memory until the partition is full
dd if=/dev/zero of=/data/big_zero bs=1048576
#Remove the zerod out dummy file
rm -r -f /data/big_zero
#Mount The /system folder as RW so we can read and write to it
mount -o remount,rw /system /system
#Drop all zeros into a file on the /system partition until it is full
dd if=/dev/zero of=/system/big_zero bs=1048576
#Remove the zerod out dummy file
rm /system/big_zero
#Make our folder to write the firmware package onto the SDCard
mkdir /sdcard/firmwarepackage
#Begin transfer of all relevant blocks to sdcard
dd if=/dev/block/stl9 of=/sdcard/firmwarepackage/factoryfs.img bs=4096
dd if=/dev/block/bml7 of=/sdcard/firmwarepackage/zImage bs=4096
dd if=/dev/block/stl10 of=/sdcard/firmwarepackage/dbdata.img bs=4096
dd if=/dev/block/stl11 of=/sdcard/firmwarepackage/cache.img bs=4096
dd if=/dev/block/bml12 of=/sdcard/firmwarepackage/modem.bin bs=4096
#Done
echo done

copy the files from your sdcard in the firmwarepackage folder to your desktop/laptop computer.

Never mount an RFS filesystem to your computer Your computer is not equipped to handle the RFS filesystem. All permissions data will be lost and the filesystem will be rendered useless.

Using Heimdall Frontend, you can download the part.pit from the options tab to obtain the partition tables for custom ROM use.

Use Heimdall frontend to package a tar.gz

Use Heimdall One-Click Packager to make a One-Click

Obtaining firmware from Odin packages

You will need a base firmware package to obtain bootloaders for your device. Firmware can be obtained from several sites. Some of the more common are:

http://Xda-developers.com developer forums

http://rootzwiki.com

http://sammobile.com

http://samfirmware.com

http://sampro.pl

It is important that these firmwares be verified on your own device before distribution.

Totally decompress the entire firmware package down to its individual files

Use heimdall-frontend to create a package

Use One-Click Packager to generate a one-click.

Recommended Distribution Instructions

Once you have verified that your package has been made correctly, you will want to distribute it. Here is a recommended blurb which I have found to be effective from multiple tests. Replace "MY ROM" with your ROM name and MYROM.COM with your download link.

You will need Java installed on your computer Do you have java?

right click and open with Java

Put your device in "Download Mode" and click the flash button

Problems? Enter "Recovery Mode" and select "factory reset"

Download MY ROM!

[ list=1]
[ *]You will need Java installed on your computer [url=http://www.java.com/en/download/installed.jsp?detect=jre&try=1]Do you have java?[/url]
[ *]right click and open with Java
[ *]Put your device in "Download Mode" and click the flash button
[ *]Problems? Enter "Recovery Mode" and select "factory reset"
[/list]
[ size=4][ url=MYROM.COM]Click here to Download My ROM![/url][/size]

Downloads and Source

Heimdall One-Click Packager: http://code.google.com/p/heimdall-one-click/downloads/list

Heimdall Frontend: http://www.glassechidna.com.au/products/heimdall/

Heimdall One-Click Source Code:http://heimdall-one-click.googlecode.com/svn/trunk/

Heimdall one-Click Change Log:Change Log: http://code.google.com/p/heimdall-one-click/source/list

Heimdall Source Code: https://github.com/Benjamin-Dobell/Heimdall

Conclusion and Disclaimer

The source and applications are released under the MIT License. I have provided these resources at no cost to you without warranty. I will not be held liable. It is up to you to use these programs responsibly.

History

Heimdall One-Click saw its first appearance as "One-Click UnBrick http://xdaforums.com/showthread.php?t=1153310". Since then, it has been tested and distributed as part of UnBrickable Mod, restoration back to stock, and upgrading firmware in the following threads:

http://xdaforums.com/showthread.php?t=1191924 http://xdaforums.com/showthread.php?t=1331381 http://xdaforums.com/showthread.php?t=1330491 http://xdaforums.com/showthread.php?t=1341666 http://xdaforums.com/showthread.php?t=1312391 http://xdaforums.com/showthread.php?t=1333423 http://xdaforums.com/showthread.php?t=1333424 http://xdaforums.com/showthread.php?t=1238093 http://xdaforums.com/showthread.php?t=1266172

http://xdaforums.com/showthread.php?t=1323527 http://xdaforums.com/showthread.php?t=1288130 http://xdaforums.com/showthread.php?t=1216790 http://xdaforums.com/showthread.php?t=1221491

Forward

We are looking to expand Heimdall to work on more devices. We need devices to work with. Please see http://www.glassechidna.com.au/open for more information