addFile($deodexsh, "deodex.sh"); //$updateScript .= "delete_recursive /data/dalvik-cache/".chr(10); } // If one package is marked sys (system) or thm (theme) then copy system directory from zip to phone if(strpos($exec,'sys:') !== false || strpos($exec,'thm:') !== false || strpos($exec,'blogo:') !== false || strpos($exec,'banim:') !== false || strpos($exec,'kern:') !== false || strpos($exec,'recovery:') !== false ) { $updateScript .= "copy_dir PACKAGE:system SYSTEM:".chr(10); } // If there is an app for removal create backup directories on sdcard if(strpos($exec,'rem:') !== false || strpos($exec,'del:') !== false ) { $cusapprmsh .= "mkdir /sdcard/sdx".chr(10)."mkdir /sdcard/sdx/backup".chr(10)."mkdir /sdcard/sdx/backup/app".chr(10); } foreach($del as $k1) { $type = explode(":",$k1); $sys = strpos($k1,'sys'); //add busybox backup and removal commands for each application if($type[0] == "rem") { $cusapprmsh .= 'busybox cp /system/app/'.$type[1].' /sdcard/sdx/backup/app/'.chr(10).'rm /system/app/'.$type[1].chr(10); } if($type[0] == "thm") { parse("themes/".$type[1]."/".$type[2]); } if($type[0] == "recovery") { parse("recovery/".$type[1]); } if($type[1] == "addgvskeymap") { parse("sys/".$type[1]); } if($type[1] == "stockkeymap") { parse("sys/".$type[1]); } if($type[0] == "kern") { parse($type[1]."/".$type[2]); } if($type[1] == 'rootv7') { //$ZIP -> zipDirectory("root","system"); //$ZIP->addFile(file_get_contents("root/system/bin/wlservice"), "system\bin\wlservice"); parse("root"); $updateScript .= "set_perm 0 0 0777 SYSTEM:etc/install-recovery.sh".chr(10)."set_perm 0 0 0777 SYSTEM:bin/wlservice".chr(10)."set_perm 0 0 0777 SYSTEM:bin/whoami".chr(10)."set_perm 0 0 0666 SYSTEM:etc/passwd".chr(10)."set_perm 0 0 0666 SYSTEM:etc/group".chr(10); } if($type[1] == 'livewallpaper') { //$ZIP->addFile(file_get_contents("wallpaper/system/app/LiveWallpapersPicker.apk"), "system\app\LiveWallpapersPicker.apk"); //$ZIP->addFile(file_get_contents("wallpaper/system/lib/libRS.so"), "system\lib\libRS.so"); //$ZIP->addFile(file_get_contents("wallpaper/system/lib/librs_jni.so"), "system\lib\librs_jni.so"); //$ZIP -> zipDirectory("wallpaper","system"); parse("wallpaper"); $updateScript .= "set_perm 0 0 0644 SYSTEM:lib/libRS.so".chr(10)."set_perm 0 0 0644 SYSTEM:lib/librs_jni.so".chr(10); } if($type[1] == 'youtube') { parse("youtubehd"); $updateScript .= "copy_dir PACKAGE:system SYSTEM:".chr(10); //zip addfile is broken in this version - joeykrims comment //$ZIP -> addFile(file_get_contents("apps/YouTube.apk"), "system\app\YouTube.apk"); } if($type[1] == '3dgallery') { parse("gallery3d"); //zip addfile is broken in this version - joeykrims comment //$ZIP -> addFile(file_get_contents("apps/Gallery3D.apk"), "system\app\Gallery3D.apk"); } if($type[1] == 'livewallpaper' || $type[0] == 'thm') { $updateScript .= "delete_recursive /data/dalvik-cache/".chr(10); } //if($type[0] == "blogo") //{ // parse("blogo-".$type[1]); //} if($type[0] == "blogo") { parse("blogo/".$type[1]); } if($type[0] == "banim") { parse("banim/".$type[1]."/".$type[2]); } if($type[1] == 'spranim') { $cusapprmsh .= "/sbin/busybox cp /system/bin/playlogo /sdcard/sdx/backup/playlogo".chr(10)."/sbin/busybox cp /system/media/bootani.qmg /sdcard/sdx/backup/bootani.qmg".chr(10); $updateScript .= "delete SYSTEM:bin/playlogo".chr(10)."delete SYSTEM:media/bootani.qmg".chr(10); } if($type[1] == 'baclear') { $updateScript .= "delete SYSTEM:media/bootanimation.zip".chr(10); } } if(strpos($exec,'kern:') !== false) { $kernelsh = "#!/system/bin/sh".chr(10)."#SDX sdx-developers.com scripted".chr(10)."flash_image boot /system/zImage".chr(10); $ZIP -> addFile($kernelsh, "kernel-update.sh"); $updateScript .= "run_program PACKAGE:kernel-update.sh".chr(10)."delete SYSTEM:zImage".chr(10); } if(strpos($exec,'recovery:') !== false) { $recoverysh = "#!/system/bin/sh".chr(10)."#SDX sdx-developers.com scripted".chr(10)."flash_image recovery /system/recovery.rfs".chr(10); $ZIP -> addFile($recoverysh, "recovery-flash.sh"); $updateScript .= "run_program PACKAGE:recovery-flash.sh".chr(10)."delete SYSTEM:recovery.rfs".chr(10); } if(strpos($exec,'blogo:') !== false) { $bootlogosh = "#!/system/bin/sh".chr(10)."#SDX sdx-developers.com scripted".chr(10)."flash_image boot3 /system/logo.png".chr(10); $ZIP -> addFile($bootlogosh, "bootlogo.sh"); $updateScript .= "run_program PACKAGE:bootlogo.sh".chr(10)."delete SYSTEM:logo.png".chr(10); } if(strpos($exec,'banim:') !== false) { $updateScript .= "delete DATA:local/bootanimation.zip".chr(10)."set_perm 0 0 0644 SYSTEM:media/bootanimation.zip".chr(10); } if(strpos($exec,'thm:') !== false) { parse("de03deodex"); } //$str.='mount -t rfs -o remount,ro /dev/stl5 /system'.chr(10); $cusapprmsh.="echo app backup and removal complete".chr(10); //if(strpos($exec,'rem:') !== false || strpos($exec,'app:') !== false) if(strpos($exec,'rem:') !== false || strpos($exec,'del:') !== false ) { $ZIP -> addFile($cusapprmsh, "cus-apprm.sh"); //$updateScript .= "delete_recursive /data/dalvik-cache/".chr(10); } // If there is an app for removal or an app for install //if(strpos($exec,'rem:') !== false || strpos($exec,'app:') !== false) if(strpos($exec,'rem:') !== false || strpos($exec,'del:') !== false ) { $updateScript .= "run_program PACKAGE:cus-apprm.sh".chr(10); } $updateScript .= "show_progress 0.2 10".chr(10); $ZIP -> addFile($updateScript, "META-INF/com/google/android/update-script"); // This is run at the end of the script to add the files from the parse function. if(isset($dirtozip)){ //added incase there are no directories sent to parse() // Loop through every key/value combination generated from parse() //dirtozip will remove all duplicate files keeping the one added first $dirtozip = array_unique($dirtozip); foreach($dirtozip as $key => $value) { // Run the addFile function with the values from $key and $value $ZIP->addFile(file_get_contents($key),$value,mktime()); } } // write the zip file to file $zipfile = $ZIP->build_zip(); // Force download the zip header("Content-type: application/octet-stream"); //added content length per slushpupie header("Content-length: ".strlen($zipfile)); header("Content-disposition: attachment; filename=custom-SDX-update.zip"); echo $zipfile; } else { ?>

Joeykrim's Custom Android 2.1 Release DE03 ROM Updates

Disclaimer: Use this at your own risk.

All of this has been tested and developed for Android 2.1 DE03 with Recovery 2.1.3 or higher.
They must be installed prior to using this custom builder.

[Fresh Install] - [Customize Phone]

Install Android 2.1 DE03 - Fresh Install[back]
This will install your phone with Android 2.1 DE03, deleting ALL of your data. If you're only wanting to customize your current DE03 install then skip this section.
Customize Your Phone[back]
This will customize your phone with custom apps, themes, boot animations, etc. You must have Android 2.1 DE03 installed prior to using this - if not, go back to the Fresh Install section.
  • If a Theme or LiveWallpaper is selected below and applied to the phone, the dalvik cache will be cleared. The initial boot will take a few minutes longer.
  • If anything is selected below to be removed, it will be backed up to /sdcard/sdx/backup! Nothing is permanently removed.
Instructions:
  1. Check any combination of boxes below to combine those files and actions into one custom-SDX-update.zip file.
  2. Download this file and put it onto the /sdcard of the phone.
  3. Boot into recovery mode (usb unplugged, vol down + talk + end).
  4. Select Apply Update.zip and choose the zip.
  5. Reboot.
The default is nothing. If you select nothing, it does nothing. This will ONLY install the parts you select.

This ROM does not effect anything on the /data partition - meaning no data or settings will be changed by using this ROM.

Latest Stable Custom Kernels
joeykrim-SDX-kernel v2.0.4 (includes root)
LittleJTH-SDX-kernel v1.2 (includes root)
Vampirefo-SDX-2.0.6 (includes root and support for tether)
kronenpj-sdx-v6 (includes root and support for vpn and tether)
Stock DE03 Kernel |[include with] joeykrim-SDX-root-v7
Don't install a Kernel - Keep currently loaded Kernel - Default
LEGACY Custom Kernels (probably skip)
joeykrim-SDX-kernel v2.0.3 (includes root)
Custom Recovery
forcystos Recovery 3.1.1
joeykrim Recovery 2.1.3
Don't install a Recovery system - Keep currently loaded Recovery - Default
Custom/Modified
Live Wallpaper
HQ YouTube (original YouTube.apk backed up)
3D Gallery
3D Gallery with Stock Gallery backed up and removed
Remap Nuance Voice Hardware Button to Google Voice Search
Restore Stock Keymap Layout
Default - Do not modified Keymap Layout

Boot Logos
$blogo) { $to = str_ireplace("blogo/","",$blogo); if($to != 'preview') { if(is_file("blogo/preview/$to.txt")) { $text = file("blogo/preview/$to.txt"); echo("
"." ".$text[0]."
"); } else { echo("
$to
"); } } } ?> Don't install a Boot Logo.png - Default
Boot Animations
$banimdir) { $to = str_ireplace("banim/","",$banimdir); foreach(glob('banim/'.$to.'/*') as $banimb => $banimc) { $tob = str_ireplace("banim/$to/","",$banimc); if($tob != 'downloads' && $tob != 'sshots' && $tob != 'links') { $banim["$to"]["$tob"]=$tob; } } } foreach($banim as $user => $test) { foreach($banim["$user"] as $ibanim => $test2) { if(is_file("banim/$user/sshots/$ibanim.gif")) { echo("
".ucfirst($user)." - ".ucfirst($ibanim)."

\n"); } else { echo("
".ucfirst($user)." - ".ucfirst($ibanim)."

\n"); } } } ?> Clear All Custom Boot Animations (reverts to default glowing Samsung)
Don't install a Boot Animation - Keep Current Boot Animation on Phone - Default
Sprint Startup Animation
Backup and Remove Sprint Boot Animation
Theming
$themedir) { $to = str_ireplace("themes/","",$themedir); foreach(glob('themes/'.$to.'/*') as $themeb => $themec) { $tob = str_ireplace("themes/$to/","",$themec); if($tob != 'downloads' && $tob != 'sshots' && $tob != 'links') { $theme["$to"]["$tob"]=$tob; } } } foreach($theme as $user => $test) { foreach($theme["$user"] as $itheme => $test2) { if(is_file("themes/$user/sshots/$itheme-1.png")) { echo("
".ucfirst($user)." - ".ucfirst($itheme)."

\n"); } else { echo("
".ucfirst($user)." - ".ucfirst($itheme)."

\n"); } } } ?> DE03 Deodex Theme Template - Restores stock template

Don't install a Custom Theme - Keep currently loaded Theme - Default

App Removal
Please select the apps that you want to remove. They will automatically be backed up to /sdcard/sdx/backup/app/ and removed from /system/app.

Preconfigured Packages:

Standard | Extended | Advanced | Ultimate (Only Advanced Users)

BejeweledDemo.apk - Bejeweled Game - Demo
Term - Non functional terminal
KeyBoard SlideUp Counter - Counts the number of times the Keyboard is opened
nfl-prod-release.apk - Sprint NFL Live (Old version)
sfl-prod-release.apk - Sprint NFL Live (New version)
nascar09-prod-release.apk - Sprint Nascar
MoxierMail.apk - Moxier Mail - Used for work, exchange email and calendar
VSuiteApp.apk - Naunce Voice Control
Weather2-16.apk - Weather Channel
im.apk - Instant Messaging - AIM, Yahoo, MSN (exluding GTalk)
Sprint TV
Sprint TV Widget
Photos and Places - Shortcut uploads to Facebook, Twitter, etc
Email - Generic Email client - Yahoo, Hotmail, etc (excluding Gmail)
Sprint Navigation
Amazon Mp3
Sprint Visual Voicemail
Calendar
CalendarProvider - Supports the Calendar
AlarmClock - Alarm Clock
Brightness
FactoryTest
LatinImeTutorial.apk
PicoTts
SDSA.apk
Sprint_App_Updater.apk
TtsService
WlanTest
Accessibility - kickback.apk
Accessibility - soundback.apk
Accessibility - talkback.apk
Calculator.apk/odex