A couple of people asked me how to create a CWM Flashable zip so I thought Id make a quick guide for it ;) Firstly, I've provided a quick runthough of making such a zip. Secondly, I've given a quick brief of the Edify Scripting Language which is used to make flashable zips ;)
And finally, Ill include a sample zip with detailed instructions of how it works :)
I. Creating your CWM flashable zip
Tools Required
1) Archiving tool (WinZip/WinRAR)
2) Unix based text editor (Anything for Linux Users, Notepad++ recommended for Windows users )
DO NOT use Notepad or Wordpad.
3) Good eyesight :D (Important to catch small typing mistakes lol )
How To
First, we create a new folder where we are gonna put all our files. Let that be ROM
Inside it, we gotta create this new Folder META-INF
Here's how the file Structure of META-INF is going to look like
META-INF
-->com
------>google
---------->android
-------------->update-binary
-------------->updater-script
The names colored in Blue are files while the others are folders. Just create the folders as per the Layout I just posted.
Now, you must be wondering about the two fines in question ?
The first file, update-binary is a binary file which performs all the actions of the CWM Flashable zip. There are loads of binaries each with their own properties and syntaxes. Ill show some of the common variations of the syntaxes next to the command.
I've attached a binary that works fine with Xperia phones. Just unrar the file and keep it in the directory as I said ;). You might need another for another rom though :p
The second and most important file of all is the updater-script. Note that it has no file extension. However, it can be edited like a normal textfile using Notepad++. This file will determine all the commands to be performed by the CWM zip. So here's where the commands go.. Ill explain the commands at the end of this. The commands are in a language called Edify. Google can give some hints of usage if nothing else ;)
Note : The Encoding of this updater-script should be ANSI and the EOL formatting should be Unix. Otherwise, Flash will fail with a Status 6 Error. If you get a Status Error 7, either the update binary is out of date( Unlikely) or you made a logical error.
After typing out all the commands, Click the Save As. Make sure to select "Any type" for Filetype to save as,then give the name updater-script.
After this, we proceed to add any files we want to flash to the zip. The updater-script is in charge of what file goes where.etc so if you understand how to do that properly, you're pretty much ready to make the files :)
Now, after adding all the files you want, we select the folders META-INF and all the other folders/files present in ROM (without the folder ROM itself) and create a ZIP Archive with *Compression Ratio set to STORE*.. That is very important. Dont make any edits,etc..
After making that zip,we now need to sign it to get CWM or any other recovery to flash it.Im including a zip that contains two files for Signing zip files. Rename your created zip to a.zip and place it in the same directory as the two files from Sign.zip.. Run Sign.bat and a new file update.zip :) If you open it, you'll notice 3 new files in the META-INF folder (This is the sign created for CWM to verify :D ) And voila, now you have your own CWM flashable zip ;)
This concludes Part 1 of the Guide. Sorry for the wait :p
II. Creating the Updater-Script using Edify
Now, we have to look into writing the updater-script to write the commands to be performed :) The Edify Language has all its commands separated by Semicolons. Presence of extra spaces or Newlines between two commands is not considered. With that said, I think we can start with a list of Commands :) Note: All address starting with a '/' are in Phone's system and not the zip file.
I've included a list of the commands you'll probably need
Quote:
Command: ui_print()
Example: ui_print("My Name is Sam!");
Explanation: As expected this command writes the line "My Name is Sam! " and shows it as output when this line is encountered in CWM. Can also support concatenation of strings ie, ui_print("My Name is" + "Sam"); is equally valid and same output.
Command: showprogress()
Example: showprogress(0.6, 10);
Explanation: This command will set the fraction of Progress Bar Filled to the first parameter specified in the time in seconds given as second parameter. eg, if previously, ProgressBar was 30%(0.3) filled, running that command would cause the Progress bar to slowly fill up so that when 10 seconds pass, The total percent filled is 60% (0.6) and ProgressBar stops filling up after that till another Progress statement is encountered.I read somewhere that using two digits of precision,ie 0.85.etc can cause errors so be wary.
Command: setprogress()
Example: setprogress(0.6);
Explanation: This command can be used to set the value of the Progressbar Instantaneously. However, note that the value of progress completed given (ie, 0.6) is less than or equal to the amount specified in the previous show_progress() command.
Command: delete()
Example: delete("system/app/YourApp.apk", "/system/app/a.apk");
Explanation: Simply deletes whichever files are specified in the parameters. Supports unlimited parameters. Do NOT use with folders. And make sure that in the example, System is mounted first so that it can delete the file correctly. No error is shown if file is missing or couldnt be deleted !
Command: delete_recursive()
Example: delete_recursive("/system/app");
Explanation: Deletes all the files in the specified folders and also the folders themselves. Accepts multiple arguements. See delete() for more details.
Command: set_perm()
Example: set_perm(0, 2000, 0777, "/system/etc/init.d/1script", "/system/app/12.apk");
Explanation: Sets the permission of the files specified as 777 with uid as 0 and gid as 2000. Google for Android User ids and Group Ids to get more clues. Supports multiple files. In example, 2 files are given.
Command: set_perm_recursive()
Example: set_perm_recursive(0, 2000, 0777, 0644, "Dir1", "Dir2");
Explanation: Sets the permission of all files in Dir1,Dir2.etc as 0644 (recursively searches Folders and subfolders for files) And sets 0777 as permission for folders (Checked Recursively).. uid will be 0 and gid 2000 in example.
Command: package_extract_dir()
Example: package_extract_dir("system", "/system");
Explanation: Extracts the contents of the folder system in zip to the directory of /system in phone.
Command: package_extract_file()
Example: package_extract_dir("system/app/a.apk", "/system/app/anew.apk");
Explanation: Extracts the file specified in zip to the directory of /system/app in phone and names new file as anew.apk in Example..
Command: package_extract_dir()
Example: package_extract_dir("system", "/system");
Explanation: Extracts the contents of the folder system in zip to the directory of /system in phone.
Command: mount
Example: mount("ext4", "EMMC", "/dev/block/mmcblk0p10", "/system");
Explanation: Mounts the partition in /dev/block/mmcblk0p10 as /system with filetype ext4 and Type EMMC. Similarly, you can mount data with mmcblkop11, and cache with mmcblkop12. This might vary with update-binary files but it works fine on the one I uploaded :) When you need to make an edit to Phone's Files, you need to mount the partition first
Command: unmount()
Example: unmount("/cache");
Explanation: Unmounts the partition marked at the address given in file. Always unmount your partitions before your script exists.. Its just plain etiquette ;)
|
These commands should be enough to get you started :D Ill post a few more tomorrow when Im properly awake.. Very sleepy now :( Sorry guys,, Will upload rest later :p And try to open a rom or two and take a peak at updater-script ;) Should give you a good idea until I upload my sample file as well ;) Cheers Gn
This concludes Part 2 of the Guide. Part 3 will be uploaded sometime in the morning ;) Sorry for the wait :p
Making this guide took me the better part of 2 hours so please take the 5 seconds necessary to hit the Thanks button to remind me my work isnt for naught ;)