Related
Alright, I'm wanting to modify the theme of my rom (eclipse 2.0.2 to be exact). I'll explain my steps below, but the problem I'm having is when flashing the update.zip from my SD card during BSR, I get "E: There is a syntax error in the update" and nothing happens.
Here's my steps. I'm using APK manager 4.9, trying to modify Eclipse 2.0.2.
1. I've installed APK Manager and it's running fine.
2. I grab "framework-res.apk" from Eclipse /system/framework directory and place it inside APKManager's "place-apk-here-for-modding" dir.
3. I run APKManager and choose option 9 (Decompile APK)
4. Once decompiled, I edit the files inside APKManager's "project" dir.
5. I then run APKManager and choose option 11 ("Compile APK"). This places "unsignedframework-res.apk" in the "place-apk-here-for-modding" dir.
6. I take this new file, rename it to "framework-res.apk" and place it in a zip file, along with the META-INF. Here is my dir structure inside the .zip:
Code:
/META-INF/com/google/android/update-script
/system/framework/framework-res.apk
7. I place the following code inside "update-script"
Code:
show_progress 0.1 0
copy_dir PACKAGE:system SYSTEM:
set_perm_recursive 0 0 0755 0644 SYSTEM:framework
show_progress 0.1 10
8. I then sign the .zip using "Testsign" (http://forum.xda-developers.com/showthread.php?t=538020)
9. I now place the newly signed .zip onto my sd card.
10. I reboot my phone into BSR, clear cache/dalvik cache, and attempt to install update from zip.
11. After selecting my .zip and starting the update process, I get the syntax error.
Any ideas? What am I doing wrong?
-------------------------
UPDATE
-------------------------
This topic is solved!
To make this even simpler, download Framework Flasher and easily create flashable update.zip files! http://forum.xda-developers.com/showthread.php?p=21113455
The structure of the files must be like the following:
update.zip/system/framework/framework-res.apk
Store file here
update.zip/META-INF/com/google/android/updater-script
Code:
ui_print("Installing...");
show_progress(0.1, 0);
run_program("/sbin/busybox", "mount", "/system");
package_extract_dir("system", "/system");
show_progress(0.1, 10);
show_progress(0.2, 0);
show_progress(0.2, 10);
set_perm_recursive(0, 0, 0755, 0644, "/system/framework/framework-res.apk");
ui_print("Done!")
run_program("/sbin/busybox", "umount", "/system");
update.zip/META-INF/com/google/android/update-binary
You will need to pull this from a ROM or Theme .zip
Thanks!
Would this be better off posted in another Droid x2 forum? Or is this the correct forum? I'm still needing help with this. I just can't seem to get it to work for some reason. Thanks again!
Sent from my DROID X2 using XDA App
This is the correct forum. Hopefully one of our fantastic themers decide to poke their head in and answer but to me it sounds like a problem while creating your zip file.
Sent from my DROID X2 using xda premium
Not sure if this is your issue but I'm pretty sure there's an update to APK Manager. I'm also playing around with theming and I believe the version I have is 5.
Yeah I definitely think the problem is due to either the zip sign our the update-script file.
As for updating apk manager, I'll try it, but I read somewhere that apk manager has bugs and to stick with 4.9. I did however update apktool.jar to the latest version.
Sent from my DROID X2 using XDA App
Don't rename the file in step 6. Do option 12 to sighn the apk. That will create sighnedframework-res. Rename that file and put it in your zip.
I use version 5. Think the option is still 12 to sign the file.
EDIT: Sorry I see step 8 where you sign the apk. I missed that. Never used 4.9 myself.
Sent from my DROID X2 using Tapatalk
hedwig34 said:
Don't rename the file in step 6. Do option 12 to sighn the apk. That will create sighnedframework-res. Rename that file and put it in your zip.
I use version 5. Think the option is still 12 to sign the file.
EDIT: Sorry I see step 8 where you sign the apk. I missed that. Never used 4.9 myself.
Sent from my DROID X2 using Tapatalk
Click to expand...
Click to collapse
Thanks for that reply. I've since downloaded APKManager v5 and signed the APK like you said. I signed the .zip as well. However, I still ended up getting the syntax error.
After more research, I learned the differences between update-script and updater-script. So, I've converted to use the newer method (updater-script).
Inside my updater-script:
Code:
show_progress(1.000000, 0);
mount("yaffs2", "MTD", "system", "/system");
set_progress(0.200000);
package_extract_dir("system", "/system");
set_progress(0.400000);
set_perm(0,0,0644,"/system/framework/framework-res.apk");
set_progress(0.500000);
unmount("/system");
set_progress(0.900000);
ui_print("Update complete. FINALLY");
set_progress(1.000000);
I'm no longer getting the syntax error like before, but now, all I see is the following messages:
Code:
Finding update package...
Opening update package...
Installing update...
THEN IT JUST FREEZES. I end up having to remove my battery and reboot my phone.
Why is this so hard for me?
I do believe its your update script it does not look right at all to me but I'm not using same device will have a look later when I get up
sent from my dhd
leith51 said:
I do believe its your update script it does not look right at all to me but I'm not using same device will have a look later when I get up
sent from my dhd
Click to expand...
Click to collapse
Well, after even more research, I've learned some more. I've ditched the UPDATE-SCRIPT idea since updater-script is the preferred method of flashing.
In order to run updater-script, you need the "update-binary" files as well. As far as I know, all this file does is interpret the updater-script so it can be read. So I grabbed update-binary from a theme .zip that was posted on these forums and am using that.
Along with that, here is my modified updater-script
Code:
show_progress(0.200000, 10);
ui_print("Installing...");
mount("MTD", "system", "/system");
show_progress(0.500000, 40);
package_extract_dir("system", "/system");
show_progress(0.100000, 10);
ui_print("Done!");
unmount("/system");
This code seems to be working, but not 100% yet. I was getting status 6 errors until I converted the newline characters from windows to unix. Now that I've done that, I'm getting Status 7 errors.
So that's where I stand now. With a Status 7 error. Below is my updated .zip structure just for clarification:
Code:
/META-INF/com/google/android/(updater-script and update-binary)
/system/framework/(framework-res.apk)
I'm getting close, but not quite there.
i also am trying to figure this out, i hope you figure it out man
try this script
ui_print("Installing...");
show_progress(0.1, 0);
run_program("/sbin/busybox", "mount", "/system");
package_extract_dir("system", "/system");
show_progress(0.1, 10);
show_progress(0.2, 0);
show_progress(0.2, 10);
set_perm_recursive(0, 0, 0755, 0644, "/system/framework/framework-res.apk");
ui_print("Done!")
run_program("/sbin/busybox", "umount", "/system");
if this does not work let me know also like i said i dont have the device so are you you sure its mtd and not emmc ?
leith51 said:
try this script
ui_print("Installing...");
show_progress(0.1, 0);
run_program("/sbin/busybox", "mount", "/system");
package_extract_dir("system", "/system");
show_progress(0.1, 10);
show_progress(0.2, 0);
show_progress(0.2, 10);
set_perm_recursive(0, 0, 0755, 0644, "/system/framework/framework-res.apk");
ui_print("Done!")
run_program("/sbin/busybox", "umount", "/system");
if this does not work let me know also like i said i dont have the device so are you you sure its mtd and not emmc ?
Click to expand...
Click to collapse
Wow thanks! The busybox method worked flawlessly, no problem.
I'll update my original post in this topic to help whoever is needing help with this. I also created a script that will automate this entire process for you! Check the original post in this topic for all the details.
Thanks to everyone that helped!
Hi community,
Sorry for bumping this old thread but I'm having some issues when trying this stuff, I created the update.zip file but can't flash it.
The error I get with flashboot is
$ fastboot update update.zip
ERROR: could not clear input pipe; result e000404f, ignoring...
ERROR: could not clear output pipe; result e000404f, ignoring....
archive does not contain 'android-info.txt'
error: update package 'update.zip' has no android-info.txt
And
$ adb sideload upload.zip
shows error installation aborted on the device
This is the only thread that I've seen when users are reporting that the operation was successfully accomplished, although my device is different that's why I'm posting here.
Any help or comment is appreciated,
King regards.
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 (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
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 ) And voila, now you have your own CWM flashable zip
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
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: 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
Command: format()
Example: format("ext4", "EMMC", "/dev/block/mmcblk0p11"); or format("ext4", "EMMC", "/dev/block/mmcblk0p11", "0");
Explanation: First major command to vary with update-binary. Make sure you use the right command based on the binary or you'll get an error when you flash via CWM. First part denotes partition type,2nd is EMMC for most phones, Ithink ? (Please Confirm) and 3rd is the partition to be wiped. To be honest, I have no clue what the "0" does but thats the way I got it working. Always unmount a partition first before formatting. *ALWAYS*
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. Its preferable to mount in this manner as opposed to using busybox because this method is universal whereas when busybox is missing or misconfigured, you get Errors and its not easy to resolve.
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: 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: 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.
Click to expand...
Click to collapse
These commands should be enough to get you started Ill post a few more tomorrow when Im properly awake.. Very sleepy now Sorry guys,, Will upload rest later 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. Finally Finished Part III Sorry For Dealy
III. An Example Of A Working Updater-Script with functions explained.
For the sample, we'll go through my installer Script for the Xperiance Rom Series Addon Package. Its not much to go on, but sometimes, editing someone else's finished work makes it alot easier to learn yourself Let me know if you guys want any more help Feel free to PM me anytime Cheers
####
#Your Stylish Intro Never forget it
####
ui_print(" ");
ui_print(" ");
ui_print("==============================================");
ui_print("| Xperiance Lite v1.0 |");
ui_print("==============================================");
ui_print("| Xperiance Lite By Min3r |");
ui_print("| Xperia U ST25i |");
ui_print("| Working On 6.1.1.[B.1.10/B.1.54/C.1.10] |");
ui_print("|********************************************|");
ui_print("| Addons Pack |");
ui_print("|********************************************|");
ui_print("| AC!D Audio Engine by Team AC!D |");
ui_print("| Cybershot Experience 4.7 by Rizal Lovins |");
ui_print("| InfiniteView Mod by reaper61616 |");
ui_print("| Jellybean 4.2 Keyboard |");
ui_print("| Xperia T Statusbar by destroyy |");
ui_print("==============================================");
ui_print("Flashing in Progress.....");
ui_print(" ");
ui_print(" ");
#Mount System & Data
mount("ext4", "EMMC", "/dev/block/mmcblk0p10", "/system");
mount("ext4", "EMMC", "/dev/block/mmcblk0p11", "/data");
#Copying all the Directories
package_extract_dir("system", "/system");
#Setting Required Permissions
set_perm_recursive(0, 0, 0777, 0777, "/system/etc/init.d");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/beatsbass");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/beatsnormal");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/image_beatbox_bt");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/image_beats_wireless_bt");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/image_gec");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/image_gec_bt");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/image_htc_earbud");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/image_htc_midtier");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/image_ibeats");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/image_ibeats_solo");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/image_ibeats_solo_v2");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/image_ibeats_v2");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/load_mg_driver");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/load_sony_driver");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/mm-audio-acdb-test");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/mm-audio-native-test");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/pm_snd");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/snd");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/sound");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/sound8960");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/xaplay");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/snd3254");
set_perm_recursive(0, 2000, 0755, 0755, "/system/etc/init.d/10acidmod");
set_perm(1000, 1000, 0644, "/system/app/SystemUI.apk");
set_perm_recursive(1000, 1000, 0777, 0777, "/system/app/SystemUI.apk");
set_perm(1000, 1000, 0644, "/system/app/QuickPanelSettings.apk");
set_perm_recursive(1000, 1000, 0777, 0777, "/system/app/QuickPanelSettings");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/mm-gs-camctrl-test");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/MPQStrMgrTest");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/MPQUnitTest");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/MPQVideoRendererTestApp");
ui_print(" ");
ui_print(" ");
#Wiping Dalvik Cache
delete_recursive("/data/dalvik-cache");
#Unmounting
unmount("/system");
unmount("/cache");
Click to expand...
Click to collapse
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
Changelog
29/12 : Added Sample Script & Rearranged commands in order of the natural order in which they are likely to be used
Created : 27/12
Most wanted for me
Sent from my Xperia U using Forum Runner
drsanket_xperia_u said:
Most wanted for me
Sent from my Xperia U using Forum Runner
Click to expand...
Click to collapse
Sorry for delay bro.. I managed to get net working temporarily but the speed is low, huge lag at times and frequent disconnecting.. It took me over 3 tries to just make the thread :/ Requests keep timing out
Impressive. Thx.
Explanations r really helpful
This is some awesome guide. Always wanted it
---------- Post added at 03:22 PM ---------- Previous post was at 03:21 PM ----------
drsanket_xperia_u said:
Most wanted for me
Sent from my Xperia U using Forum Runner
Click to expand...
Click to collapse
Me too
Why not busybox mount?
Hit
{
"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"
}
For keep up my Developing!!
That question came to my mind too first time I saw this usage ;P It took me a while to guess the answer (This is my own derived answer.. If any experienced devs know better, please enlighten us all )
There are loads of busybox binaries and not all are fully compatible with our phones. So why create a dependency on them when we have an inbuilt function to do the same ?
Plus, the obvious fact that we are limiting usage to just 1 binary instead of calling up busybox as well should be sufficient Hope it helps
Cheers
This is a great guide.
You mentioned the update-binary is good for 2012 xperia line up, would this include xperia t (LT30a).
can i put this in my zip file, or do i need to sign it with the sign.rar?
Again Thanks.
Glad you liked it mate Several ppl asked me at the same time so I thought it would be better if I made a guide so everyone can use it I hope I can complete it soon.. Keep getting interrupted at hostel when I try to make
And yes, it should work But in case it doesnt, just get a binary from any of the zips for custom roms there Also, I believe signing is based mostly on the script not binary so shouldnt be necessary. But as a precaution, Id advice you do it all the same to avoid issues You can resign an edited zip (without deleting the old certificates.etc )
Sample Script added And if you have any doubts about how a specific script works, feel free to post here or message me
And Ill see about adding more advanced function in future updates for Advanced users ;D
Great work bro..!!
Earlier i used to do it without knowing what i was doing
Now i know what i am doing Thanks a lot..!!
Can u please explain a lil more on busybox and binary thing?? I didn't get it... :silly:
Busybox is a binary which adds alot of unix shell commands to Android. Unfortuntately, not all Busybox binaries (versions of a software,kinda ) work without bugs, and some are incompatible with some phones.. So the less you depend on busybox for your operations, The more likely it is to work properly Plus, if update-binary works, then you can be sure that mounting can work fine
Thanks mate
Wow, Thanks for the GUIDE man... :good: for ya +1
Thanks
Sent from my GT-S5570 using xda app-developers app
it will be great if there is a video tutorial
Sent from my Xperia U using xda premium
To be honest, I don't think it will be necessary but If enough people are interested, Ill try making one, next week Till then, if you have any doubts, Feel free to PM me anytime
hello min3r broo wow finally I gonna learn about updater-script
thanks for these tut
reading now...:angel:
Great information pal,can you please try to post an easy and friendly tutorial explaining what all changes are to be done in framework.jar,services.jar etc while porting a rom to make it boot..this would be really be of great help..
Troubadour666 said:
Hi all @Biftor ROM dualbooters,
Only DorimanX 8.43 was added instead of original kernel.
DualBoot-Biftor™ Rom-V14-JB-XWMS1-No Wipe.zip - 453.78 MB
thanks
Click to expand...
Click to collapse
Original @Biftor thread : http://forum.xda-developers.com/showthread.php?t=2026911
thanks to @GamingDj for this video he made for @Biftor , so you can see the power of the DEV
Hi everybody,
Here is the story :
Some 7 days ago, i received a PM from Wiz1152 who told me that he tested one my updater-script provided for 2nd ROM and had success with it.
He gave a test with an updater-script i touch for use BIFTOR V9 ROM as 2nd ROM.
As he also has sent his PM to Biftor , he finaly asked us if we can share a thread to show ppl how to have Biftor V9 in 2nd ROM.
So i prepared this post to tell all ppl interested by a JB sammy 4.1.2 as 2nd rom that they could find here soon all tips, tricks and tweaks i have learnt on XDA to have Biftor V9 rom and also all jb sammy 4.1.2 rom, as a 2nd rom, with the only kernel i know to do this, DorimanX kernel, V8.xx version only.
Ambitious you can say, but i hope this would help many users to make any JB 4.1.2 ROM they want as their BEST 2nd ROM.
Before you thank me, thanks all these people, i've learnt by reading their threads and posts.
(i must say that sometimes, for a better undertanding of what i was doing for my 2nd ROM,
i had to PM some of them, and i always received a large and efficient detailled response
from each of them, i encourage you to always ask to DEV what are your troubles)
Disclaimer : before starting any operation, you have to know that you can damage your phone, use at your own risk !
before you mix my things , you have to know that you can damage and brick your tel
For the kernel you will GO here for your dualboot :
thanks DorimanX
For the ROMs i extract and mod updater-script here,
Biftor
Salesale
Indie
Wanam
I'm going to use mods from the following dev as demos, and one day,
you'll try some themes and mods from them, so thank them like me :
Spannaa
ApriliaM3
Carotix
engloa
and much others posts from XDA thread....
Like me, you should learn a lot with the NeatRom Family Members from this INCREDIBLE NEATROM FULL & LITE ROM THREAD
In this thread, i will never provide a link with an updater-script that will flash a kernel or a modem.
My modded updater-script doesn't work well if you flash a modded for 2nd ROM JB sammy 4.1.2 ROM on 1rst position ROM too.
The only one kernel i talk to you about in this thread is DORIMANX KERNEL all V8.xx releases. It's saying in XDA
that there is no BEST KERNEL for I9100 (and other tel), as we know too, there is no BEST ROM , but DorimanX V8.xx
all releases are the only one i can use to have my dualboot safe, so for me, it is the BEST KERNEL i use
expect all image are not too big for viewing, so works in progress, available very soon.
Preambule and Summary of this thread
I make this thread myself to show ppl my method to port all JB SAMMY 4.1.2 ROM
(MS1, LSE, LS8, LSJ, LSD, LSN, LSS and LSW) on 2nd ROM while having an AOSP 4.2.2 ROM at 1rst position.
You're always reading that it's impossible to dualboot jb sammy 4.1.2 roms,
and in fact, yes, it's impossible if we flash this type of ROM on our 2nd
rom as we usualy do it before JB SAMMY 4.1.2 ROM are outed with a permitted
kernel to do dualboot.
Samsung provide us JB 4.1.2 BIGs versions ROMs with so many bloatwares than ICS version before,
and for that they are obliged to add an extended partition named \PRELOAD\ to put all of them in.
So, as a stock kernel doesn't manage 2nd rom, we have to find a custom kernel to do this,
and we have to manage this \PRELOAD\ partition too, to flash rom in 2nd ROM.
I give you here all my learning from over XDA threads since 4 months of dualbooting JB SAMMY 4.1.2 ROMs.
All you have to know it's that we have to extract apks app files which are in \preload\ folder of a ZIP ROM
in an another partition when we want to run a JB SAMMY 4.1.2 700Mo BIG ROM as 2nd ROM,
with DorimanX kernel, 8.xx Version ONLY ! DorimanX kernel ONLY.
In 2nd ROM usage, DorimanX says us to put \preload\ folder content of a ZIP ROM in \DATA\ partition ,
exactly in \data\sec_data\ folder !
Somes months ago, 1rst version of dualboot have used \data\app\app\ folder as a deported \preload\ folder,
but this was abandonned, by me for instance, when DorimanX says me to use \data\sec_data\ folder instead
of \data\app\app\.
Why do we must need a valid 2nd ROM running ?
AFAIK, It's interesting to have a "robust" 1st rom like a ROOTBOX ROM and having a 2nd rom
like a jb 4.1.2 rom can give us totaly managment of all we want to change in our system without flashing
anything else at all (except kernel, modem and rom), we can theme and mod as we want and just reboot to take changes on.
With the help of soft like WINSCP i will show in a post below, just make your change and reboot, and finaly enjoy change you're made
(as command line utility, Putty seems to be a good alternative to ADB).
To enable WINSCP communication between your PC and your TEL, I also explain here how to include somes binaries
in your future modded ZIP JB 4.1.2 ROM for 2nd ROM, before flashing it, so you'll have an another way to pass some
command lines without ADB utility , but in a Putty terminal.
The good questions are :
How can we port a BIG ROM like 600-700Mo space large systems partitions (system & preload)
in our I9100 which ROM we want to run as a 2nd ROM with \SYSTEM\ partition about only 500Mo space large?
how to bypass the use of the \PRELOAD\ partition use when we run the JB 4.1.2 ROM as 2nd ROM ?
We know that Samsung add many more bloatware than possible in the JB 4.1.2
Firmware, and because of this addition, they must have to add a new partition they named
\PRELOAD\ , Samsung has deported many system files in this partition, in the
\preload\symlink\system\app\ folder.
As kernel stock doesn't manage directly files in \PRELOAD\ partition sub-folders,
and kernel stock doesn't know there are many apks in \preload\symlink\system\app\
to manage, Samsung has symlinked these apks to \SYSTEM\ partition in \system\app\
with many LNs files in \system\app\ folder.
Some rare Kernel can dualboot, like DorimanX kernel, and it give us the capabilities to port
a JB SAMMY 4.1.2 ROM in 2nd ROM by the deporting of all APKs in the \preload\symlink\system\app\
folder (when 1rst rom installed) to a sub-folder of the 2nd ROM \DATA\ partition,
named \data\sec_data\ (when ported rom in 2nd rom)
We can do this because DorimanX kernel v8.xx permit it .
At this point of dev, you have to know that while runing your 2nd rom as i show you this way,
your BEST kernel (DorimanX now because you use it now!!) makes the \PRELOAD\ partition
mounting point as a mirror of the \SYSTEM\ partition mounting point (of 2nd ROM too),
and now, you went to understand that you can easilly, completely, port your BEST JB SAMMY 4.1.2 ROM
in 2nd position ROM
When DorimanX boots our 2nd ROM, it do it as if \PRELOAD\ partition doesn't exist, i like to imagine that
An another way of a understanding this is :
with DorimanX kernel, when we have two roms like i have, and when you run your 4.2.2 1rst ROM like mine
(or a rootbox rom for sample), you can see your 1rst ROM \SYSTEM\ partition in the folder named \system\,
but we can see a named \preload\ folder, and you have to know that it's the \SYSTEM\ partition of your 2nd !
And so, after you have enable and well runing your 2nd ROM, you will be able to make all manipulations you want
on your system phone as you will never believe and dream it like that.
Plus, lastest DorimanX V8.xx kernel give us total mounted of 2nd ROM \DATA\ partition while
we are runing our 4.2.2 1rst rom, in a named \data_sec_rom\ folder ;
and when we run our new flsehly modded JB 4.1.2 2nd ROM, we can see 1rst ROM \DATA\ partition
in a named \data_pri_rom\ folder, so, again, imagine all advantages with that, you can manage
all apks and all folders of the two ROMs installed in your tel.
You have to know too that when you'are runing 1rst ROM, folder \data_sec_rom\ is the mounted
point of \sdcard\.secondrom\DATA.IMG file, corresponding of 2nd ROM \DATA\ partition, with
total access in it.
This image below shows us what we can do with all folders and partitions of 2nd ROM mounted while
we were runing our 1rst 4.2.2 ROM.
And i need between 1 and 5-6 steps to explain here all you have to do to accomplish this :
{
"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"
}
You will find in this thread all the needed steps and all the tools for you to put your BEST JB SAMMY 4.1.2
ROM in 2nd ROM, with DorimanX kernel V8.xx installed.
NEXT POST TO MAKE :
1 - HOW TO ENABLE WINSCP AND PUTTY COMMUNICATIONS BETWEEN PC and TEL
2 - WHY I ONLY USE DORIMANX KERNEL V8.xx.
3 - What is doing, line by line, an UPDATER-SCRIPT from a JB SAMMY 4.1.2 ROM flashed as 1rst ROM (BIFTOR ROM inside demonstration)
4 - HOW TO MOD UPDATER-SCRIPT with \PRELOAD\ partition managment folder pushed in \DATA\ partition of a 2nd ROM,(on \data\sec_data\ folder) with two detailled ROMs such as :
- Biftor ROM and its last addon. (biftor_preload_symlink)
- NeatROM FULL & LITE portage to 2nd ROM
5 - Attachments
6 - How to theme and mod our new BEST 2nd ROM freshly flashed.
- vrtheme cwm flasher
- normal cwm mods
Requirements :
Tools you will use on your PC :
- WINRAR (to open, add, suppress all you want in the ZIP)
some advise with it : please you must let winrar working & repacking well before closing it, if not,
you can have 'big surprise' with broken zip and remember you have to never create or rename
a folder in the opened ZIP in winrar, by winrar menu choice, you must have just to delete a
folder instead of renaming it, and just re-drag it from you PC. be carrefull of this)
- Notepad ++ (you can use this simply guide i made to perform your use)
- WINSCP software (instead of ADB command lines, i use WINSCP to access my
tel folders and partitions by WIFI, i use droidsshd.apk app in tel to enable telnet access
(in WINSCP STAGE we can see all detail to enable this way of access )
- Initial JB SAMMY 4.1.2 ROM from DEV you want to use in 2nd ROM
- in this repos of samples i make : https://mega.co.nz/#F!6tQRBZCY!Fg0i0WNN00s4DznvVOuP5g, one of my
updater-script i modded for some lastest lsw 4.1.2 roms i found on i9100'xda thread.
(i expect after reading this thread, you can mod youself your BEST ROM for 2nd ROM)
- if you want to VRTHEME or MOD your new freshly 2nd ROM, take my toolpack here
On your TEL, runing a custom rom AOSP, AOKP CM in 1rst rom, in an external SD folder, you have put :
- Dorimanx V8.xx lastest kernel ZIP
- The ROM with my updater-script added as replacement of original
- insure you have a space for the 2nd rom created as the method below in the KERNEL step.
Binaries addons to enable WINSCP communications STEP
One day i ask myself how to bypass myself from adb command line.
I remember as an old Ipod user i'm that i can have access to its system partition with the use of winscp soft.
i try to find by myself the necessary binaries, and i find them .
i make myself an winscp-pack.rar or CWM-winscp-pack.zip to easily install it when i flash a rom, also this pack could be copied
in our new modded 2nd ROM structure before we flash it.
After that step, which can make communicate winscp installed on your PC with your i9100 system, on your personnal network.
Here, we can see how to put my winscp-pack.rar in our \system\ partition , by copying structure folder winscp-pack in external sdcard and
then with rootexplorer (or such a same tool) , we copy all folders form sdcard we have just talk to \system\ partition folders. we verify rights and change them if there are not good and we reboot.
you will find in some posts below WINSCP-PACK.rar (delete .pdf at end of WINSCP-PACK.rar.pdf) and CWM-winscp-pack.zip to flash.
use the first if you want put it manually in your future modded ZIP ROM 2nd ROM or on your phone like i describe you.
Now that we have the necessaries binaries installed on our system, we must have an application to enable SCP communication .
I found over the net an APK soft, Droidsshd.apk (https://code.google.com/p/droidsshd/)
i download APK from there, put it on my external sdcard and install it like normal apk by launching it using Rootexplorer.
result : it gives me a new installed APKs in \data\app\ named br.com.bott.droidsshd-1.apk.
below, a little video to show how to set-up droidsshd.apk V0.5 options.
On your PC, once you have installed WINSCP download before, you have to set WINSCP options like this :
I specialized myself with dual-boot but i think this WINSCP-PACK could be integrated in ALL S2 JB SAMMY 4.1.2 ROMS, 1rst or 2nd position flashing.
I think that when you will have enable WINSCP to access on your phone like me , your understanding of your
system phone will change and so you will quickly learn more and more about your system phone , like i do it my friend !
This large confused image (my 1rst SHOOT) below resumes to you how you can integrate my winscp toolpack in your rooted tel or rom'zip
Here, an image shows you how you can fix and manage rights on files while runing WINSCP interface .
what we can do when WINSCP and TEL are communicating?
You can manage the entire system of your phone, in an explorer interface.
You can theme and add mods in your 2nd rom without flashig anything else (except vrtheme.zip files)
OTHER TWEAKS :
One day, i ask DorimanX how to mount the data partition from 2nd rom while runing 1rst rom,
he send me this 1rst response :
==================================================================================
all you do for adapt JB SAMMY to sec ROM is only your things, i am not interested.
about mounting the sec rom data!
i have added auto mount to kernel script!
so in next kernel it's will be by auto from now.
if you want to test now.
then do this!
using adb as su
losetup
this will show you all used LOOP devices.
see one that free (missing number)
then do this
mkdir /data_sec_rom;
chmod 777 /data_sec_rom;
losetup /dev/block/loop4 /sdcard/.secondrom/data.img;
mount -t ext4 /dev/block/loop4 /data_sec_rom;
ls -la /data_sec_rom;
i have used loop4 but if you see it already used then use other number!
then just go to /data_sec_rom;
and all files there
have fun.
==================================================================================
One another day, i ask DorimanX how to mount 1rst ROM \SYSTEM\ partition while i'm running my 2nd rom,
(dont forget that in 2nd rom, preload = system , so where is the mounted 1rst rom \SYSTEM\ partition ?)
so his response was :
==================================================================================
not mounted.
but exist
ADB:
mkdir /temp_system
chmod -R 777 /temp_system
mount -t ext4 /dev/block/mmcblk0p9 /temp_system
then you get system of PRI rom in folder /temp_system
==================================================================================
With this last sequence command lines, we have all systems partition mounted while we run our second rom, that's great, no ?
KERNEL STEP : Why DorimanX V8.xx ?
For dualboot like i do, we have to choose the good kernel that's can make it possible,
I know how to make it possible with only DORIMANX KERNEL 8.xx version,
the only one kernel i use since several months to improve my works on dualboot.
the 1rst step for dualboot like me is to flash Kernel DorimanX V8.xx lastest.
when you'have flash DorimanX V8.xx, ensure that your 1rst ROM boots and run well.
If your choice is made, you can continue .
just, If you have only one ROM and its Stock Kernel, you have to download lastest
Dorimanx Kernel here V8.xx and flash it to avoid second rom options opened and activated
After flashing Dorimanx V8.xx Kernel, you have to "initiate" space for your 2nd rom like the steps i describe below :
(so we assume you have Dorimanx V8.xx Kernel.ZIP in your external sdcard or internal)
Procedure to change stock kernel with DorimanX v8.xx and how to initialize 2nd ROM :
- in recovery mode of your current kernel (if you have this boot option )
- flash Dorimanx V8.xx Kernel.ZIP i say you to put in your External SDCARD before.
- again , if with your actual kernel permit it, reboot recovery,
- wait and it's booting on DorimanX v8.xx kernel CWM installed, with dual-boot options opened
go to :
- dual-boot menu
- wipe 2ndROM data/cache
So what is accomplished during this step:
wipe data\cache procedure have making (and formating if exist) the DATA.IMG file in an INTERNAL SDCARD \.secondrom sub-folder.
(expect you have 5Go minimum space free on your INTERNAL SDCARD before using a 2nd ROM)
(dont really know if CACHE.IMG is created too in this step)
DATA.IMG will be mounted as the \DATA\ partition when we run our 2nd ROM, while booting with Dorimanx V8.xx Kernel.
Other interesting Menu for 2nd ROM usage :
- mount and storage (if you need to perform some taskx on your 2nd rom partitions,
you will be use these choice below), you will find here many choice to mount and format partitions .
- mount /secondrom_cache
- mount /seconrom_data
- mount /secondrom_system
- format /secondrom_cache
- format /seconrom_data
- format /secondrom_system
You can have a look at this great site about what i'm talking here, (with many interested screens i take from site).
Before continuing, and for a good understanding, I think you have to read my little noob explaination about my understanding about a 2nd rom.
What about the large space \SYSTEM\ and \PRELOAD\ partitions of a JB SAMMY 4.1.2 ROM and on a 2nd ROM too?
JB sammy 4.1.2 are coming with so much bloatwares which take so much space in system partition
that "Samsung DEV" has decided to add a 2nd extended partition system , named \PRELOAD which
contain some most important apks for the system, deported in, instead of being in \SYSTEM partition
like in ICS or GB firmware.
As runing an entire system ROM is depending of system or app apks only exclusively stored in \system\app\ folder
(or \data\app\ and in \system\framework\ too but not talking about it here), Samsung DEV used symlinking
method to create symlink from all APKS in \preload\symlink\system\app\ folder to \system\app\ folder.
Also, you must know that when we run a ROM like a 4.2.2 rom, like a rootbox rom for example, in 1st position,
the \PRELOAD\ partition (\SYSTEM\ partition of 2nd ROM down, is showed and can been totaly accessibled.
When you understand that you can understand everything here
this image below shows the structure phone which become when you have your 2nd ROM installed
on your tel, (screenshot of winscp folder view while phone running on 1rst rom.)
About Biftor V9 ROM i take to my show, how can i do to put this structure folder on
the left side of image below, on my tel 2nd position rom ,when i'm runing my 2nd ROM following these folders (in the right side of image):
let's see this in next 2 posts : HOW TO FINALY MODDED UPDATER-SCRIPT FOR YOUR BEST ROM IN 2ND ROM
Updater-script Analyse
Here we can find the most important part of this thread !
For a flash in 2nd position, we have to understand how updater-script runs its lines when we flash a JB 4.1.2 ROM as a unique 1rst ROM.
1rst, in many XDA threads and on other forums, you must know that you will find many ROMs, with full wipe or not. Dont care about it now, my purpose is to use 2nd rom as tests roms so it's not necessary to keep some line in modded updater-script, like formating partition or wiping, we can manage this ourselves , no? And because of winscp access , we can do what we want too.
lines like :
- formating system or data partition, we can manage them.
- flashing kernel, kernel has been already flashed before, dorimanx v8.xx lastest.
- flashing modem, modem of 1rst rom already exist and is i think it's fine
2nd, and see below, this is a list of tasks executed by an original updater-script : (on 1rst rom usage)
- presentation rom and dev
- unmount some partitions
- formatting \system\ and \preload\ partitions sometimes, without mounting them
- wiping data lines
- re-mounting system and preload partitions
- extracting zip \data folder if exist in zip rom, on data partition mounted before
- extracting zip \system folder to system partiton mounted before
- extracting zip \preload folder to preload partition mounted before
- installing busybox lines
- symlinking system binaries
- symlinking apks from preload partition to system partition
- the fix of the effective rights on new system partition flashed
- the EFS backuping
- flashing kernel lines
- flashing modem lines
- unmounting partitions lines
- "say thanks dev" lines
it's saying that BIFTOR ROM is a rom that ppl want to have as their 2nd ROM,
so i take its updater-script for my purpose of demonstration :
Here, images with detailled blocks lines of BIFTOR V9 updater-script :
NEXT : FINALY, YOUR BEST ROM IN 2ND ROM
Put ALL THE BESTs ROMs in 2nd ROM - DorimanX V8.xx ONLY : BIFTOR,NEATROM,WANAM....
SO, if you understand what i'm saying before, my Biftor V9 updater-script for 2nd ROM purpose is :
ATTENTION
DELETE BLUE LINES IN THIS BLOCK
ADD OR REPLACE RED LINES IN SAME PLACE AS I SHOW YOU HERE
Code:
show_progress(0.500000, 0);
ui_print("");
ui_print("");
ui_print("!..............................................!");
ui_print("!.........Welcome To Biftor Rom V9 JB..........!");
ui_print("!.........Welcome To Biftor Rom V9 JB..........!");
ui_print("!.........Welcome To Biftor Rom V9 JB..........!");
ui_print("!.........Welcome To Biftor Rom V9 JB..........!");
ui_print("!.........Welcome To Biftor Rom V9 JB..........!");
ui_print("!.........Welcome To Biftor Rom V9 JB..........!");
ui_print("!.........Welcome To Biftor Rom V9 JB..........!");
ui_print("!..............................................!");
ui_print("A R M I N");
ui_print("AA RR MM II NN");
ui_print("AAA RRR MMM III NNN");
ui_print("AAAA RRRR MMMM IIII NNNN");
unmount("/system");
unmount("/cache");
unmount("/preload");
ui_print("mounting...");
ui_print("mount System");
run_program("/sbin/mount", "/dev/block/mmcblk0p9", "/system");
ui_print("mount data");
run_program("/sbin/mount", "/dev/block/mmcblk0p10", "/data");
ui_print("mount cache");
run_program("/sbin/mount", "/dev/block/mmcblk0p7", "/cache");
[COLOR="Blue"][B]ui_print("mount preload");
run_program("/sbin/mount", "/dev/block/mmcblk0p12", "/preload");[/B][/COLOR]
delete_recursive("/system");
[COLOR="Red"][B]delete_recursive("/data/sec_data");[/B][/COLOR]
delete_recursive("/cache");
delete_recursive("/data/dalvik-cache");
[COLOR="Blue"][B]delete_recursive("/preload");[/B][/COLOR]
delete_recursive("/data/data/com.android.providers.settings");
delete_recursive("/data/data/com.android.settings");
delete_recursive("/data/data/com.android.SystemUI");
delete("/data/system/batterystats.bin");
package_extract_dir("data", "/data");
set_perm(2000, 2000, 0771, "/data/local");
set_perm_recursive(1000, 1000, 0771, 0644, "/data/app");
ui_print("Installing system ...");
show_progress(0.500000, 80);
package_extract_dir("system", "/system");
[COLOR="Red"][B]package_extract_dir("preload/symlink/system/app", "/data/sec_data");[/B][/COLOR]
No change HERE :
Code:
set_perm(0, 1000, 0755, "/system/xbin/busybox");
run_program("/system/xbin/busybox", "--install", "-s", "/system/xbin");
symlink("/system/xbin/busybox", "/system/bin/busybox");
ui_print("Simlinking ...");
symlink("busybox", "/system/xbin/[");
symlink("busybox", "/system/xbin/[[");
symlink("busybox", "/system/xbin/acpid");
symlink("busybox", "/system/xbin/addgroup");
symlink("busybox", "/system/xbin/adduser");
symlink("busybox", "/system/xbin/adjtimex");
symlink("busybox", "/system/xbin/ar");
symlink("busybox", "/system/xbin/arp");
symlink("busybox", "/system/xbin/arping");
symlink("busybox", "/system/xbin/ash");
symlink("busybox", "/system/xbin/awk");
symlink("busybox", "/system/xbin/basename");
symlink("busybox", "/system/xbin/lzop");
symlink("busybox", "/system/xbin/lzopcat");
symlink("busybox", "/system/xbin/makedevs");
|
|let the line i switch here
|
symlink("busybox", "/system/xbin/makemime");
symlink("busybox", "/system/xbin/man");
symlink("toolbox", "/system/bin/start");
symlink("toolbox", "/system/bin/stop");
symlink("toolbox", "/system/bin/sync");
symlink("toolbox", "/system/bin/top");
symlink("toolbox", "/system/bin/umount");
symlink("toolbox", "/system/bin/uptime");
symlink("toolbox", "/system/bin/vmstat");
symlink("toolbox", "/system/bin/watchprops");
symlink("toolbox", "/system/bin/wipe");
symlink("Roboto-Regular.ttf", "/system/fonts/DroidSans.ttf");
symlink("Roboto-Bold.ttf", "/system/fonts/DroidSans-Bold.ttf");
Most important lines changing :
ALL THE LINES of this block below have their "symlink("/preload/symlink/system/app/" chain replaced by "symlink("/data/sec_data/" chain.
I show you at middle of this post how Biftor want you to replace all these lines by a called external script during process flash
Code:
[COLOR="Red"]symlink("/data/sec_data/AllshareMediaServer.apk", "/system/app/AllshareMediaServer.apk");
symlink("/data/sec_data/AllSharePlay.apk", "/system/app/AllSharePlay.apk");
symlink("/data/sec_data/AllshareService.apk", "/system/app/AllshareService.apk");
symlink("/data/sec_data/ApplicationsProvider.apk", "/system/app/ApplicationsProvider.apk");
symlink("/data/sec_data/BackupRestoreConfirmation.apk", "/system/app/BackupRestoreConfirmation.apk");
symlink("/data/sec_data/BadgeProvider.apk", "/system/app/BadgeProvider.apk");
symlink("/data/sec_data/BasicLiveWallpapers.apk", "/system/app/BasicLiveWallpapers.apk");
symlink("/data/sec_data/BCService.apk", "/system/app/BCService.apk");
symlink("/data/sec_data/BluetoothAvrcp.apk", "/system/app/BluetoothAvrcp.apk");
symlink("/data/sec_data/BluetoothMap.apk", "/system/app/BluetoothMap.apk");
symlink("/data/sec_data/CapabilityManagerService.apk", "/system/app/CapabilityManagerService.apk");
symlink("/data/sec_data/CertInstaller.apk", "/system/app/CertInstaller.apk");
symlink("/data/sec_data/ChromeBookmarksSyncAdapter.apk", "/system/app/ChromeBookmarksSyncAdapter.apk");
symlink("/data/sec_data/ClipboardSaveService.apk", "/system/app/ClipboardSaveService.apk");
symlink("/data/sec_data/ClockPackage.apk", "/system/app/ClockPackage.apk");
symlink("/data/sec_data/ContextAwareService.apk", "/system/app/ContextAwareService.apk");
symlink("/data/sec_data/CSC.apk", "/system/app/CSC.apk");
symlink("/data/sec_data/DigitalClock.apk", "/system/app/DigitalClock.apk");
symlink("/data/sec_data/DefaultContainerService.apk", "/system/app/DefaultContainerService.apk");
symlink("/data/sec_data/Divx.apk", "/system/app/Divx.apk");
symlink("/data/sec_data/DrmProvider.apk", "/system/app/DrmProvider.apk");
symlink("/data/sec_data/DSMForwarding.apk", "/system/app/DSMForwarding.apk");
symlink("/data/sec_data/DSMLawmo.apk", "/system/app/DSMLawmo.apk");
symlink("/data/sec_data/EdmVpnServices.apk", "/system/app/EdmVpnServices.apk");
symlink("/data/sec_data/EnterprisePermissions.apk", "/system/app/EnterprisePermissions.apk");
symlink("/data/sec_data/FaceLock.apk", "/system/app/FaceLock.apk");
symlink("/data/sec_data/FlashBarService.apk", "/system/app/FlashBarService.apk");
symlink("/data/sec_data/FmmDM.apk", "/system/app/FmmDM.apk");
symlink("/data/sec_data/FmmDS.apk", "/system/app/FmmDS.apk");
symlink("/data/sec_data/FmRadio.apk", "/system/app/FmRadio.apk");
symlink("/data/sec_data/Gmail.apk", "/system/app/Gmail.apk");
symlink("/data/sec_data/GmsCore.apk", "/system/app/GmsCore.apk");
symlink("/data/sec_data/GoogleBackupTransport.apk", "/system/app/GoogleBackupTransport.apk");
symlink("/data/sec_data/GoogleCalendarSyncAdapter.apk", "/system/app/GoogleCalendarSyncAdapter.apk");
symlink("/data/sec_data/GoogleContactsSyncAdapter.apk", "/system/app/GoogleContactsSyncAdapter.apk");
symlink("/data/sec_data/GoogleFeedback.apk", "/system/app/GoogleFeedback.apk");
symlink("/data/sec_data/GoogleLoginService.apk", "/system/app/GoogleLoginService.apk");
symlink("/data/sec_data/GooglePartnerSetup.apk", "/system/app/GooglePartnerSetup.apk");
symlink("/data/sec_data/GoogleServicesFramework.apk", "/system/app/GoogleServicesFramework.apk");
symlink("/data/sec_data/GoogleTTS.apk", "/system/app/GoogleTTS.apk");
symlink("/data/sec_data/HelvNeueLT.apk", "/system/app/HelvNeueLT.apk");
symlink("/data/sec_data/InputDevices.apk", "/system/app/InputDevices.apk");
symlink("/data/sec_data/InputEventApp_U1_EUR_OPEN.apk", "/system/app/InputEventApp_U1_EUR_OPEN.apk");
symlink("/data/sec_data/JobManager.apk", "/system/app/JobManager.apk");
symlink("/data/sec_data/KeyChain.apk", "/system/app/KeyChain.apk");
symlink("/data/sec_data/Keystring_factory_JBUP.apk", "/system/app/Keystring_factory_JBUP.apk");
symlink("/data/sec_data/LogsProvider.apk", "/system/app/LogsProvider.apk");
symlink("/data/sec_data/MediaUploader.apk", "/system/app/MediaUploader.apk");
symlink("/data/sec_data/minimode-res.apk", "/system/app/minimode-res.apk");
symlink("/data/sec_data/MobileTrackerEngineTwo.apk", "/system/app/MobileTrackerEngineTwo.apk");
symlink("/data/sec_data/MtpApplication.apk", "/system/app/MtpApplication.apk");
symlink("/data/sec_data/MusicFX.apk", "/system/app/MusicFX.apk");
symlink("/data/sec_data/MusicPlayer.apk", "/system/app/MusicPlayer.apk");
symlink("/data/sec_data/NetworkLocation.apk", "/system/app/NetworkLocation.apk");
symlink("/data/sec_data/OmaCP.apk", "/system/app/OmaCP.apk");
symlink("/data/sec_data/OmaDrmPopup.apk", "/system/app/OmaDrmPopup.apk");
symlink("/data/sec_data/PackageInstaller.apk", "/system/app/PackageInstaller.apk");
symlink("/data/sec_data/PanningTryActually.apk", "/system/app/PanningTryActually.apk");
symlink("/data/sec_data/PCWClientS.apk", "/system/app/PCWClientS.apk");
symlink("/data/sec_data/PhoneErrService.apk", "/system/app/PhoneErrService.apk");
symlink("/data/sec_data/Phonesky.apk", "/system/app/Phonesky.apk");
symlink("/data/sec_data/Phone_Util_U1_EUR_OPEN.apk", "/system/app/Phone_Util_U1_EUR_OPEN.apk");
symlink("/data/sec_data/PopupuiReceiver.apk", "/system/app/PopupuiReceiver.apk");
symlink("/data/sec_data/Preconfig.apk", "/system/app/Preconfig.apk");
symlink("/data/sec_data/PreloadInstaller.apk", "/system/app/PreloadInstaller.apk");
symlink("/data/sec_data/PRUI.apk", "/system/app/PRUI.apk");
symlink("/data/sec_data/SamsungCamera.apk", "/system/app/SamsungCamera.apk");
symlink("/data/sec_data/SamsungIME.apk", "/system/app/SamsungIME.apk");
symlink("/data/sec_data/SamsungTTS.apk", "/system/app/SamsungTTS.apk");
symlink("/data/sec_data/SecBluetooth.apk", "/system/app/SecBluetooth.apk");
symlink("/data/sec_data/SecBrowser.apk", "/system/app/SecBrowser.apk");
symlink("/data/sec_data/SecCalculator2.apk", "/system/app/SecCalculator2.apk");
symlink("/data/sec_data/SecCalendarProvider.apk", "/system/app/SecCalendarProvider.apk");
symlink("/data/sec_data/SecContacts.apk", "/system/app/SecContacts.apk");
symlink("/data/sec_data/SecContactsProvider.apk", "/system/app/SecContactsProvider.apk");
symlink("/data/sec_data/SecDownloadProvider.apk", "/system/app/SecDownloadProvider.apk");
symlink("/data/sec_data/SecDownloadProviderUi.apk", "/system/app/SecDownloadProviderUi.apk");
symlink("/data/sec_data/SecFactoryPhoneTest.apk", "/system/app/SecFactoryPhoneTest.apk");
symlink("/data/sec_data/SecFileShareClient.apk", "/system/app/SecFileShareClient.apk");
symlink("/data/sec_data/SecFileShareServer.apk", "/system/app/SecFileShareServer.apk");
symlink("/data/sec_data/SecGallery2.apk", "/system/app/SecGallery2.apk");
symlink("/data/sec_data/SecHTMLViewer.apk", "/system/app/SecHTMLViewer.apk");
symlink("/data/sec_data/SecLauncher2.apk", "/system/app/SecLauncher2.apk");
symlink("/data/sec_data/SecLiveWallpapersPicker.apk", "/system/app/SecLiveWallpapersPicker.apk");
symlink("/data/sec_data/SecMediaProvider.apk", "/system/app/SecMediaProvider.apk");
symlink("/data/sec_data/SecMemoWidget.apk", "/system/app/SecMemoWidget.apk");
symlink("/data/sec_data/SecMms.apk", "/system/app/SecMms.apk");
symlink("/data/sec_data/SecNoteMyFiles.apk", "/system/app/SecNoteMyFiles.apk");
symlink("/data/sec_data/SecOmaDownloadProvider.apk", "/system/app/SecOmaDownloadProvider.apk");
symlink("/data/sec_data/SecPhone.apk", "/system/app/SecPhone.apk");
symlink("/data/sec_data/SecSetupWizard.apk", "/system/app/SecSetupWizard.apk");
symlink("/data/sec_data/SecSettings.apk", "/system/app/SecSettings.apk");
symlink("/data/sec_data/SecSettingsProvider.apk", "/system/app/SecSettingsProvider.apk");
symlink("/data/sec_data/SecTelephonyProvider.apk", "/system/app/SecTelephonyProvider.apk");
symlink("/data/sec_data/SecurityProvider.apk", "/system/app/SecurityProvider.apk");
symlink("/data/sec_data/SerialNumberLabelIndicator_JBUP.apk", "/system/app/SerialNumberLabelIndicator_JBUP.apk");
symlink("/data/sec_data/serviceModeApp_U1_EUR_OPEN.apk", "/system/app/serviceModeApp_U1_EUR_OPEN.apk");
symlink("/data/sec_data/SetupWizard.apk", "/system/app/SetupWizard.apk");
symlink("/data/sec_data/SharedStorageBackup.apk", "/system/app/SharedStorageBackup.apk");
symlink("/data/sec_data/shutdown_JBUP.apk", "/system/app/shutdown_JBUP.apk");
symlink("/data/sec_data/SlideShow.apk", "/system/app/SlideShow.apk");
symlink("/data/sec_data/SmartcardService.apk", "/system/app/SmartcardService.apk");
symlink("/data/sec_data/SNS.apk", "/system/app/SNS.apk");
symlink("/data/sec_data/SPlannerAppWidget.apk", "/system/app/SPlannerAppWidget.apk");
symlink("/data/sec_data/SPPPushClient_Prod.apk", "/system/app/SPPPushClient_Prod.apk");
symlink("/data/sec_data/Stk.apk", "/system/app/Stk.apk");
symlink("/data/sec_data/SyncmlDS.apk", "/system/app/SyncmlDS.apk");
symlink("/data/sec_data/SystemInfo_U1_EUR_OPEN.apk", "/system/app/SystemInfo_U1_EUR_OPEN.apk");
symlink("/data/sec_data/SystemUI.apk", "/system/app/SystemUI.apk");
symlink("/data/sec_data/TasksProvider.apk", "/system/app/TasksProvider.apk");
symlink("/data/sec_data/TwDVFSApp.apk", "/system/app/TwDVFSApp.apk");
symlink("/data/sec_data/UserDictionaryProvider.apk", "/system/app/UserDictionaryProvider.apk");
symlink("/data/sec_data/VideoPlayer.apk", "/system/app/VideoPlayer.apk");
symlink("/data/sec_data/VoiceRecorder.apk", "/system/app/VoiceRecorder.apk");
symlink("/data/sec_data/VoiceSearchStub.apk", "/system/app/VoiceSearchStub.apk");
symlink("/data/sec_data/VpnDialogs.apk", "/system/app/VpnDialogs.apk");
symlink("/data/sec_data/WAPPushManager.apk", "/system/app/WAPPushManager.apk");[/COLOR]
In this block, you have to delete BLEUE lines.
Code:
ui_print("Done!");
ui_print("");
ui_print("Setting Permissions");
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 0, 0755, 0755, "/system/etc/init.d");
set_perm(0, 0, 0755, "/system/etc/init.d/85sqlite");
set_perm(0, 0, 0755, "/system/etc/init.d/Seeder");
set_perm(0, 0, 0755, "/system/etc/init.d/08darky_zipalign");
set_perm(0, 0, 0755, "/system/etc/be_photo");
set_perm(0, 0, 0755, "/system/etc/be_movie");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
set_perm(0, 3003, 06755, "/system/bin/ip");
set_perm(0, 3003, 02750, "/system/bin/netcfg");
set_perm(0, 3004, 02755, "/system/bin/ping");
set_perm(0, 2000, 06750, "/system/bin/run-as");
set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");
set_perm(0, 0, 0755, "/system/etc/bluetooth");
set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf");
set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf");
set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");
set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");
set_perm(0, 0, 06755, "/system/bin/su");
symlink("/system/bin/su", "/system/xbin/su");
set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");
set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor");
set_perm_recursive(0, 0, 0755, 0644, "/system/vendor/firmware");
set_perm(0, 2000, 0755, "/system/vendor/firmware");
set_perm(0, 0, 0777, "/system/etc/init.d/85sqlite");
set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
set_perm(0, 1000, 0755, "/system/xbin/busybox");
set_perm(0, 0, 0644, "system/etc/permissions/com.sonyericsson.navigationbar.xml");
set_perm(0, 0, 0755, "system/etc/customization");
set_perm(0, 0, 0755, "system/etc/customization/content");
set_perm(0, 0, 0755, "system/etc/customization/settings");
set_perm(0, 0, 0755, "system/etc/customization/content/com");
set_perm(0, 0, 0755, "system/etc/customization/content/com/sonyericsson");
set_perm(0, 0, 0755, "system/etc/customization/content/com/sonyericsson/r2r");
set_perm(0, 0, 0755, "system/etc/customization/content/com/sonyericsson/r2r/client");
set_perm(0, 0, 0755, "system/etc/customization/content/com/sonyericsson/wallpaperpicker");
set_perm(0, 0, 0755, "system/etc/customization/content/com/sonyericsson/wallpaperpicker/wallpapers");
set_perm(0, 0, 0755, "system/etc/customization/settings/com");
set_perm(0, 0, 0755, "system/etc/customization/settings/com/sonyericsson");
set_perm(0, 0, 0755, "system/etc/customization/settings/com/sonyericsson/android");
set_perm(0, 0, 0755, "system/etc/customization/settings/com/sonyericsson/android/support");
set_perm(0, 0, 0755, "system/etc/customization/settings/com/sonyericsson/androidapp");
set_perm(0, 0, 0755, "system/etc/customization/settings/com/sonyericsson/androidapp/storefront");
set_perm(0, 0, 0755, "system/etc/customization/settings/com/sonyericsson/appextensions");
set_perm(0, 0, 0644, "system/fonts/SoMADigitLight.ttf");
set_perm(0, 0, 0644, "system/framework/com.sonyericsson.navigationbar_impl.jar");
set_perm(0, 0, 0644, "system/app/UxpNxtLockScreen.apk");
symlink("/system/xbin/busybox", "/system/bin/busybox");
run_program("/system/xbin/busybox", "--install", "-s", "/system/xbin");
show_progress(0.100000, 0);
[COLOR="Blue"][B]ui_print("Backing up EFS");
package_extract_file("Biftor/efs_backup.sh", "/tmp/efs_backup.sh");
set_perm(0, 0, 0755, "/tmp/efs_backup.sh");
run_program("/tmp/efs_backup.sh");
ui_print("Flashing kernel ...");
package_extract_file("Biftor/flash_image", "/tmp/flash_image");
set_perm(0, 0, 0777, "/tmp/flash_image");
assert(package_extract_file("Biftor/zImage", "/tmp/zImage"),
run_program("/tmp/flash_image", "/dev/block/mmcblk0p5", "/tmp/zImage"),
delete("/tmp/zImage"));
ui_print("Flashing modem ...");
assert(package_extract_file("Biftor/modem.bin", "/tmp/modem.bin"),
run_program("/tmp/flash_image", "/dev/block/mmcblk0p8", "/tmp/modem.bin"),
delete("/tmp/modem.bin"));
delete("/tmp/flash_image");
delete("/tmp/efs_backup.sh");[/B][/COLOR]
run_program("/sbin/umount", "/system");
run_program("/sbin/umount", "/data");
run_program("/sbin/umount", "/cache");
[COLOR="Blue"][B]run_program("/sbin/umount", "/preload");[/B][/COLOR]
ui_print("complete enjoy it");
ui_print("Thanks for using Biftor ROM");
ui_print("");
ui_print("");
ui_print("");
ui_print("");
ui_print("");
ui_print("");
ui_print("");
ui_print("");
ui_print("");
ui_print("B I F T O R");
SPECIAL biftor_symlink_preload USE :
We can replace all the symlink lines in original updater-script by a called external script.
I want to talk about all lines with "symlink("/preload/symlink/system/app/" chain replaced by "symlink("/data/sec_data/" chain.
When we tchat about it, Biftor provide me a biftor_script_test2.zip that contains a \tmp\biftor_symlink_preload file to add in our final ZIP ROM modded for 2nd position run.
Like me, if you want to use this file; just put this file in \Biftor\ folder of your ZIP ROM and do the change below in your future updater-script
In updater-script , we can call this biftor_symlink_preload script like this : replace all the block lines with :
symlink("/data/sec_data/xxxxxxxxxxxxxxxx.apk", "/system/app/xxxxxxxxxxxxxxxxxxxxxx.apk");
with only these 6 lines between ##### lines
##############Biftor###########
show_progress(0.100000, 0);
package_extract_file("Biftor/biftor_symlink_preload", "/tmp/biftor_symlink_preload");
set_perm(0, 0, 0777, "/tmp/biftor_symlink_preload");
run_program("/tmp/biftor_symlink_preload");
delete("/tmp/biftor_symlink_preload");
###############
in your updater-script , you will have now :
Code:
symlink("toolbox", "/system/bin/sync");
symlink("toolbox", "/system/bin/top");
symlink("toolbox", "/system/bin/umount");
symlink("toolbox", "/system/bin/uptime");
symlink("toolbox", "/system/bin/vmstat");
symlink("toolbox", "/system/bin/watchprops");
symlink("toolbox", "/system/bin/wipe");
symlink("Roboto-Regular.ttf", "/system/fonts/DroidSans.ttf");
symlink("Roboto-Bold.ttf", "/system/fonts/DroidSans-Bold.ttf");
[COLOR="DarkRed"][B]##############Biftor###########
show_progress(0.100000, 0);
package_extract_file("Biftor/biftor_symlink_preload", "/tmp/biftor_symlink_preload");
set_perm(0, 0, 0777, "/tmp/biftor_symlink_preload");
run_program("/tmp/biftor_symlink_preload");
delete("/tmp/biftor_symlink_preload");
###############[/B][/COLOR]
ui_print("Done!");
ui_print("");
ui_print("Setting Permissions");
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 0, 0755, 0755, "/system/etc/init.d");
set_perm(0, 0, 0755, "/system/etc/init.d/85sqlite");
set_perm(0, 0, 0755, "/system/etc/init.d/Seeder");
Here the result in image :
Have a see of biftor_symlink_preload file script detail :
#!/system/bin/mksh
mount -o remount rw /system
cd /data/sec_data
apk_list=( `ls | grep .apk` )
odex_list=( `ls | grep .odex` )
items=${apk_list[*]}" "${odex_list[*]}
for item in ${items[@]}
do
ln -s /data/sec_data/$item /system/app/$item
done
In an original preload_symlink for 1rst rom, like in NeatRom we have :
#!/system/bin/mksh
mount -o remount rw /system
cd /preload/symlink/system/app
# Can't create array with /sbin/sh, hence we use mksh
apk_list=( `ls | grep .apk` )
odex_list=( `ls | grep .odex` )
items=${apk_list[*]}" "${odex_list[*]}
for item in ${items[@]}
do
ln -s /preload/symlink/system/app/$item /system/app/$item
done
do you see the <> symlinking ?
IMPORTANT : other symlink_preload script can be encountered
If this file exists in one of any folder of your future modded ZIP ROM, never forget to change its countains,
this file is <> named , depending of DEV have name it, you can take my universal symlink_preload_for_2nd_rom_only, rename it
as DEV name it in its ROM and place it in the same folder that you find it in the original ZIP ROM. is that seems clear to your ?
In provide 2 version of Biftor ROM V9 updater-script to use to have his great rom in 2nd ROM: just download what you want with the symlink file if needed.
My analyse and result for NeatRom FULL and LITE ROMs updater-script for 2nd ROM:
We can find some other updater-script with some other commands ,
i think with aroma-installer in, like WANAM 14.6 ROM ,
so this is my analyse and result for WANAM V14.6 ROM :
some modded updater-script and others tools to mod and theme your BEST 2nd ROM
General Attachments :
all file i provide have to be renamed, without ".pdf" at their end, there are txt files.
Biftor™ Rom-V9-JB- XWLSS-No Wipe
you will find here 2 versions of Biftor ROM V9 updater-script that you can use to have his great rom in 2nd ROM: just download what you want and rename it as the blue colored caracters.
VERSION A : For2ndRomONLY-BIFTORV9-updater-script-without-external-symlink-script.pdf"
VERSION B :For2ndRomONLY-BIFTORV9-updater-script-with-called-external-symlink-script.pdf + biftor_symlink_preload.pdf (drag it in your modded ZIP ROM opened with WINRAR in \Biftor\ folder, if you use this updater-script.
A litle gift : 2ndRomONLY-updater-script-Biftor™ Aroma-Mod-V2-JB-LS8-LSD-LSE-LSN-LSS-LSW.pdf
XWLSW NeatRom Full & XWLSW NeatROM Lite v4.8
For2ndRomONLY-updater-script-I9100XWLSW_NeatROM_Full.pdf
and
For2ndRomONLY-updater-script-I9100XWLSW_NeatROM_Lite.pdf
WanamLite JB LSW V14.6
For2ndRomONLY-updater-script-GT-I9100_WanamLite.XWLSW.V14.6.NO-WIPE.pdf
TOOLS
universal symlink_preload_for_2nd_rom_only.pdf to rename to symlink_preload and replace in ZIP ROM for 2nd ROM usage.
Winscp-Pack.zip to flash (see post 3)
Winscp-Pack.rar to uncompress and drag in ZIP ROM (see post 3)
CWM_symlinker_data-data_sec_to_system_app - For2ndRomONLY.zip (to recreate symlinks of apks from \data\sec_data to \system\app\ folder)
CWM_VRTHEMER - For2ndRomONLY.zip to make your own vrtheme_mod file for your new 2nd rom.
[how to] put U BEST Mod or Vrtheme CWM File in U BEST 2nd ROM "coolly" flashed :)
Coming soon
You will find here, with my personnal understanding :
- what is a mod or a theme ?
- APK file analyse before mod or theme it .
- Analyse and good understanding of a ZIP MOD or VRTHEME file : (detail for 1rst rom exploitation)
- updater-script and symlink_preload purpose for 2nd ROM[/COLOR]
- detailled installtheme.sh analyse universal script for 2nd ROM
- Finaly, [how to] put U BEST Mod or Vrtheme CWM File in U BEST 2nd ROM "coolly" flashed
Hi Great Great Great +1000
You finally success my friend this is the best, I know your hard work, this is very useful
Thanks
i am here for anything
Keep it Up Your Good work my friend
+1000
Goodluck
Armin.
Sent from my GT-I9100 using xda premium
Thanks really great work!!!
whats the useful of that ?
WAAAAAAWWWW,
just like to say it's an awesome tutorial, now everybody can do this, and I don't have time anymore for maintaining the thread.
Nice work,
Work in progress
next show , next week : how to port themes and mods like : (with 'alive' Aroma)
Biftor™ Aroma-Mod-V2-JB-LS8-LSD-LSE-LSN-LSS-LSW : updater-script ported for 2nd rom
Jelly Bean Style Reloaded 1.07 - AROMA : updater-script, create_sec_data_symlinks and installtheme.sh ported for 2nd rom
[AROMA]Criskelo Theme v5.1 [Bitfor v9.X] : updater-script and installtheme.sh ported for 2nd rom
thanks
i realize now that i have not enough time to post this "big show" "how to port themes and mods to 2nd rom", but i can share if someone want to test.
thanks
Amazing .. So much hard work... Thanks
Sent from my GT-I9100 using xda premium
OMG. I don't want dualboot thanks
Emre9110 said:
OMG. I don't want dualboot thanks
Click to expand...
Click to collapse
Don't bother reading or commenting then buddy
Sent from my GT-I9100 using Tapatalk 4 Beta
Amazing tutorial. Huge thumbs up and hopefully I can understand at least some of it by the time I finish my third read
Sent from my GT-I9100 using xda premium
@
Troubadour666 and Biftor
This is a very good tutorial BUT there are lots of people that will not understand it, as seen in other posts. I still think it would be worth posting a complete Biftor v9 2nd rom zip for people just to download and flash but of-course this is down to you too.
wis1152 said:
@
Troubadour666 and Biftor
This is a very good tutorial BUT there are lots of people that will not understand it, as seen in other posts. I still think it would be worth posting a complete Biftor v9 2nd rom zip for people just to download and flash but of-course this is down to you two.
Click to expand...
Click to collapse
Sent from my GT-I9100 using Tapatalk 4 Beta
about uploading an entire rom for 2nd position
Hi Wiz
i think i will do this when i finish next last part of thread, "vrthemes and moding a 2nd rom".
Is it so hard to download an "updater-script + some addons" PACK i made for a rom to be run in 2nd position, and drag them in ZIP ROM opened with, at the same place there are in my RAR PACK extracted by ppl?
the only thing we have to do to run a ROM in second position is to modify its updater-script and preload_symlink script.
RAR are 10ko large, ROM is 700Mo .
but if ppl are so embarassed with reading my english and understand my work, i upload rom on sunday i think.
thanks
ppl find BIFTOR_V9_FOR_2ndROM.ZIP here now NOT GOOD, DELETED
if you still dont boot your BEST ROM in 2nd ROM and rest on a black screen, please go download this tool from post #7 "universal symlink_data_sec_data_for_2nd_rom_only.pdf" , rename it with .ZIP at the end instead of .PDF, put in your SDCARD EXT, REBOOT recovery, flash it in your 2nd rom by dual-boot menu.
universal symlink_data_sec_data_for_2nd_rom_only.pdf : http://forum.xda-developers.com/attachment.php?attachmentid=2053031&d=1371592714
thanks.
Cause symlink process doesn't works, i re-upload 2ndRomONLY-BiftorRom-V9-JB- XWLSS-No Wipe-V9_XWLSS_Fix-PATCHED-V2.zip here without biftor_settings.apk and XWLSS FIX PATCHED included.
thanks a lot and i apologized for last bad version too.
Can someone make for me a flashable zip to replace the system/app
And system/framework
Folders with another folders from my choice
Cuz I have deodexed them but
I don't have android sdk to push them through abd
Thanks in advance
Sent from my GT-S7562 using xda premium
Does your device have a custom recovery? Do you know the mount points?
You don't need the full SDK for adb, and depending on what all you are replacing you could do it with a root file explorer or a terminal emulator
Sent from my Nexus 4 using Tapatalk 2
I do have cwm recovery
But what is this mount points ??
Anyway
I think if I changed this files through root explorer or terminal emulator
The phone will freeze in the process
And won't boot again
Cuz while the system is on the android will be running this apps and changing them while the phone is on will cause the phone to stop working before the process finish
Sent from my GT-S7562 using xda premium
depending on what your flashing could make your phone freeze true but you didnt really explain what your are in need of flashing.
adding a system app wont harm anything, changing the framework-res.apk will, but again i dont have all the info on what your trying to flash so its all a guess
by mount points i mean location of system partition etc, but you can try to bypass this
here is an example of what your updater script should look like (again just guessing being i would need more detail)
Code:
ui_print("Installing Mods..");
run_program("/sbin/busybox", "mount", "/system");
package_extract_dir("system", "/system");
run_program("/sbin/busybox", "umount", "/system");
ui_print("Installation complete!");
probably would need to set permissions as well but again would need more info
About the mounting points I can mount it manually through the recovery
I need a zip to replace all the apks and jars in this directory
Maybe wiping the two directories
And placing a new ones
Sent from my GT-S7562 using xda premium
I want replace everything in the system/app and system/framework directories
I have deodexed everything inside them but I don't have android sdk to push them
Sent from my GT-S7562 using xda premium
well again, you dont need the whole sdk to have adb, which even for more than just this case its a handy tool to have, and you should have it if your modding androids
The script bellow will wipe /system/app and /system/framework and then drop your files in those place and set their permissions
just create a file called updater-script and put this in there (unix format) and grab an update-binary for your device and put both files in META-INF/com/google/android
then at the same level as META-INF, make a folder called system, in that folder have two more folders, app and framework, place files you want to flash in the proper folders
now zip it all up, sign it (or change sig check in recovery) and flash
Code:
ui_print("Installing Mods..");
ui_print("Deleting first..");
delete_recursive("/system/app");
delete_recursive("/system/framework");
ui_print("Mounting System..");
run_program("/sbin/busybox", "mount", "/system");
ui_print("Extracting Files..");
package_extract_dir("system", "/system");
ui_print("Setting Permissions..");
set_perm_recursive(0, 0, 0755, 0644, "/system/app");
set_perm_recursive(0, 0, 0755, 0644, "/system/framework");
run_program("/sbin/busybox", "umount", "/system");
ui_print("Installation complete!");
Thanks gona try it and will report back
Sent from my GT-S7562 using xda premium
It worked thank you very much
Sent from my GT-S7562 using xda premium
Disclaimer
I will not be responsible if you screw up with your device.
Do make a Nandroid backup first.
Before we start
Downloads
WinRAR
Notepad++
Template Zip
Lets get started
I have provided you with the template zip inside which by making changes we can create our flashable zips. All necessary files are inside Template zip
Open up the template zip. There you will see two folders "META-INF" and "system". [In "META-INF" all the coding stuff resides and in "system" all your apps and media files resides.]
META-INF
In META-INF have one folder "com" and three files [We don't have to edit these three files]
Now open "com" folder and inside it open "google" folder then "android" folder.
Now inside "android" folder you will see two files "update-binary" [We don't have to edit this file, leave it as it is.] and "updater-script"[It is the file which is used to tell custom recovery what to do with the flashable zip ].
We have to edit "updater-script" file by using notepad++. [Scroll below to see how to edit updater-script]
System Folder
It is the folder where all of your apks, zips, libs reside.
Inside System Folder make folders as following:
If you want to flash an app and make it system app create "app" folder and if not a system app make "priv-app" folder. You can also make "lib" folder along with "app" folder if your apps uses libs.
If you want to flash a bootanimation or ringtones etc make "media" folder.
If you want to flash something else ask it below.
How to edit "updater-script"?
What is updater-script?
updater-script is a file written in edify script language which instructs the recovery to perform certain tasks.
updater-script is located in /META-INF/com/google/android/updater-script in flashable zip
Some basic rules:
Every statement must end with a semicolon (; )
Comments must start with #
Strings must be delimited by double quotes (” “)
Commands
Now i will try to explain commands used in updater-script in very easy language or noob language.
Code:
format("yaffs2", "MTD", "system", "/system");
The above command is used to format the specified partition
Syntax explanation:
format - The main command to direct the recovery to format using the following parameters
"yaffs2" - Filesystem type used in the device
"MTD" - Type of the partition used in the file system
"system" - Name of the partition to be formatted
"/system" - Location of the partition to be formatted
======================================================================================================
Code:
ui_print("Format Completed");
The above command directs the recovery to display the following text enclosed in double quotes in the user interface (display).
After successful formatting it displays "Format Completed" in the device screen.
======================================================================================================
Code:
mount("yaffs2", "MTD", "system", "/system");
The mount command directs the recovery to mount the following file system and the following partition
The text syntax is same as format command as instead of formatting it mounts.
======================================================================================================
Code:
package_extract_dir("system", "/system");
This command searches for the directory (folder) named "system" in the root of the zip file and copies all the content of the "system" folder from the zip file into the "/system" partition which is already mounted by the previous mount command ie it copies all the folder items inside system folder like apps, media etc as explained above.
======================================================================================================
Code:
package_extract_file("autoroot.sh", "/tmp/autoroot.sh");
This command searches for the file named "autoroot.sh" in the root of the zip file and copies the file to "/tmp" folder and names it as "autoroot.sh" (here it does not change the name)
======================================================================================================
Code:
symlink("mksh", "/system/bin/sh");
The above command creates a symlink.
What is symlink?
Symlink is nothing but shortcuts, for example if a file is required in two different places instead of copy pasting the file in two different locations, the file is copied to one of the two locations and in the other location a shortcut to the file(symlink) is created. The source and the symlink can have different names (actually this is the prime use of symlinks).
Let me explain it in a noob friendly manner.
Take the above symlink, it creates a shortcut(symlink) for the command "mksh" and places it in the path of the operating system. The shortcut(symlink) directs to the file "/system/bin/sh" , so whenever the os gets a request to execute the "mksh" command, the actual
binary that gets excuted will be "/system/bin/sh" .
Creating symlinks saves a lot of space because instead of copying the whole file and placing it in requiered places we are just creating shortcuts which directs to the source file which can be placed anywhere in the file system (generally placed in the path of the os).
======================================================================================================
Code:
set_perm_recursive(0, 0, 0755, 0644, "/system");
The above command is used to set permission recursively for the files and folders present inside a folder (in this case for "/system" folder).
Explanation of syntax:
0 - uid - It defines that the following permission is set for the user id 0 .
0 - gid - It defines that the following permission is set for the group id 0 .
0775 - Dirmode - It defines that 0775 permission to set to directories contained within the specified directory.
0644 - Filemode - t defines that 0644 permission to set to files contained within the specified directory.
"/system" - Target directory to set the above mentioned permissions.
======================================================================================================
Code:
set_perm(0, 3003, 06755, "/system/bin/ip");
The above command is used to set permission for a individual file (in this case for "/system/bin/ip" file).
syntax explanation:
0 - uid - It defines that the following permission is set for the user id 0 .
3003 - gid - It defines that the following permission is set for the group id 3003 .
06775 - It defines that 06775 permission to set to the specific file.
"/system/bin/ip" - Target file to set the above mentioned permissions.
Other Permission commands:
Use to push new files to /data partition and /system partition.
ui_print(“Setting permissions…”);
set_perm_recursive(1000, 1000, 0771, 0644, “/data/app”);
set_perm_recursive(0, 0, 0755, 0644, “/system”);
set_perm_recursive(0, 0, 0777, 0777, “/system/etc/init.d”);
set_perm_recursive(0, 2000, 0755, 0755, “/system/bin”);
set_perm(0, 3003, 06755, “/system/bin/ip”);
set_perm(0, 3003, 02750, “/system/bin/netcfg”);
set_perm(0, 3004, 02755, “/system/bin/ping”);
set_perm(0, 2000, 06750, “/system/bin/run-as”);
set_perm_recursive(1002, 1002, 0755, 0440, “/system/etc/bluetooth”);
set_perm(0, 0, 0755, “/system/etc/bluetooth”);
set_perm(1000, 1000, 0640, “/system/etc/bluetooth/auto_pair_devlist.conf”);
set_perm(1002, 1002, 0440, “/system/etc/dbus.conf”);
set_perm(1014, 2000, 0550, “/system/etc/dhcpcd/dhcpcd-run-hooks”);
set_perm(0, 2000, 0550, “/system/etc/init.goldfish.sh”);
set_perm_recursive(0, 0, 0755, 0555, “/system/etc/ppp”);
set_perm_recursive(0, 2000, 0755, 0644, “/system/vendor”);
set_perm_recursive(0, 2000, 0755, 0644, “/system/vendor/etc”);
set_perm(0, 2000, 0755, “/system/vendor/lib”);
set_perm(0, 2000, 0755, “/system/vendor/lib/hw”);
set_perm_recursive(0, 2000, 0755, 0755, “/system/xbin”);
set_perm(0, 0, 06755, “/system/xbin/su”);
set_perm(0, 1000, 0755, “/system/xbin/busybox”);
======================================================================================================
Code:
unmount("/system");
This command just unmount the system.
======================================================================================================
iflesh Command:
Code:
Ifelse(condition),(do_this),(else_do_this);
Example:
Code:
ifelse mount("yaffs2", "MTD", "system", "/system") == "system", ui_print("Mounted!"), ui_print("Mount Failed!");
Ifelse command can be explained simply as asking the system to do something based on the result of a condition.
From example:
The ifelse command would attempt to mount the MTD partition named "system" to "/system".
If the mounting process succeeds (the condition), the script will display "Mounted!", else it will display "Mount Failed!"
======================================================================================================
Code:
abort()
It just abort's the script execution.
Note: It is usually paired with some other command for example the getprop command or with ifelse. Independently specifying abort() in the updater-script will kill the script abruptly right there so use this command carefully.
======================================================================================================
Code:
show_progress(fraction,duration)
Code:
show_progress(0.2,5);
fraction = a fraction of the bar (more on that in a moment)
duration = seconds
The "seconds" part just means how long the progress bar should take to fill up to the new level. It will not delay your script in any way: it will only take this much time if something else in the script is also taking that much time.
For example, if you run this snippet, you can watch the progress bar partially fill up pieces at a time. Each piece will take 5 seconds to fill, then pause for 2 seconds before the next piece starts (sleep command is for 7, so after the progress bar is done its 5 seconds of movement, there are 2 seconds of sleep left until the next command)
======================================================================================================
ALWAYS LEAVE TWO BLANK LINE AT THE END OF THE update-script (if the code contains 50 lines then 52 lines should be visible in the notepad++ including two blank line after the end of the script)
======================================================================================================
HOPE I HELPED YOU GUYS..... IF I MISS SOMETHING PLEASE LET ME KNOW.... AND DON'T FORGET TO PRESS THANKS....:good:
For More Info visit: http://forum.xda-developers.com/wiki/Edify_script_language
Reserved
Reserved
Excellent guide!!, thanks , it will help me a lot.
xxkirianxx said:
Excellent guide!!, thanks , it will help me a lot.
Click to expand...
Click to collapse
Its good that it helped you!!!
If I want to remove system folder and data folder so is it possible without any wrong effects
Sent from my Symphony V80 using XDA-Developers mobile app
lkdevil said:
If I want to remove system folder and data folder so is it possible without any wrong effects
Sent from my Symphony V80 using XDA-Developers mobile app
Click to expand...
Click to collapse
Whole system folder or a folder inside /system
META-INF Folder
hi. @TheRoyalSeeker
we only edit what in "updater-script" ( to make it flashable via recovery )
now my question is :
1. is (update-binary) always suitable for all android platform - KK, LP, even MM ?
2. or is it (update-binary) always suitable for any devices ?
if no.. so..
I believe I can make "META-INF" Folder or "updater-script" by myself, but for "CERT.RSA" , "CERT.SF" , "MANIFEST.MF" and "update-binary" could you tell me how or from where can I take or pull those file ?
I'm stuck on those 4 files
if yes.. so..
I dont really bother anymore, I just download any "template.zip" which is containing those files, and only editing "updater-script"
thank you very much for your reply. I'm kindly appreciate anyhelp.
maz izaackovich said:
hi. @TheRoyalSeeker
we only edit what in "updater-script" ( to make it flashable via recovery )
now my question is :
1. is (update-binary) always suitable for all android platform - KK, LP, even MM ?
2. or is it (update-binary) always suitable for any devices ?
if no.. so..
I believe I can make "META-INF" Folder or "updater-script" by myself, but for "CERT.RSA" , "CERT.SF" , "MANIFEST.MF" and "update-binary" could you tell me how or from where can I take or pull those file ?
I'm stuck on those 4 files
if yes.. so..
I dont really bother anymore, I just download any "template.zip" which is containing those files, and only editing "updater-script"
thank you very much for your reply. I'm kindly appreciate anyhelp.
Click to expand...
Click to collapse
"update-binary" is pretty much universal and the only problem that might occur is with x86 devices.
For extracting "update-binary" and other files you can use your ROM's zip.
Use template zip, i don't think any problem will occur.
TheRoyalSeeker said:
Disclaimer
For More Info visit: http://forum.xda-developers.com/wiki/Edify_script_language
Click to expand...
Click to collapse
bundle of thanks brother i really really appricate your hard work, today XDA successfull coz XDA have your kind of peoples
brother its help me alot,
i want to know something , i extracted the lollipop rom , the format it system,img,ext4 ........now i change the some permissions
now i want to again repack the rom so how can i repack it? pack in img,ext4
and 2nd Q is that,
i create a zip file , from stock system,img,ext4 and after create with meta folder, during installation in end its says , end with error 7 etc
after i reboot so it take 5 minuts and after BB is unknown with null imei, why?
Mr Hassan said:
bundle of thanks brother i really really appricate your hard work, today XDA successfull coz XDA have your kind of peoples
brother its help me alot,
i want to know something , i extracted the lollipop rom , the format it system,img,ext4 ........now i change the some permissions
now i want to again repack the rom so how can i repack it? pack in img,ext4
and 2nd Q is that,
i create a zip file , from stock system,img,ext4 and after create with meta folder, during installation in end its says , end with error 7 etc
after i reboot so it take 5 minuts and after BB is unknown with null imei, why?
Click to expand...
Click to collapse
Sorry, but I don't know how to repack system.img.ext4, i have never made a rom before or edited yet, so i will be unable to help about that.
Error 7 generally occurs due to some wrong scripting in updater-script or by using incompatible update-binary.
You can share your updater-script here, so i can check it.
TheRoyalSeeker said:
Sorry, but I don't know how to repack system.img.ext4, i have never made a rom before or edited yet, so i will be unable to help about that.
Error 7 generally occurs due to some wrong scripting in updater-script or by using incompatible update-binary.
You can share your updater-script here, so i can check it.
Click to expand...
Click to collapse
thanks for reply, check it
Mr Hassan said:
thanks for reply, check it
Click to expand...
Click to collapse
Sorry for replying too late, I have been too much busy lately and that's why I haven't been using XDA since last 20 days.
I am sure you might have fixed the problem by yourself as it has been many days since you posted the above post.
Again just want to apologise for not being able to reply.
TheRoyalSeeker said:
Sorry for replying too late, I have been too much busy lately and that's why I haven't been using XDA since last 20 days.
I am sure you might have fixed the problem by yourself as it has been many days since you posted the above post.
Again just want to apologise for not being able to reply.
Click to expand...
Click to collapse
thanks for again your reply ,
now i,m in next step, kindly if you have time so please visit and share your experience
https://forum.xda-developers.com/android/help/repack-img-giving-error-odin-invalid-t3577719