3 # version: beta v2.4.7, patches 2012.011.02.
5 # PDroid created by svyat. Official PDroid thread is
6 # http://forum.xda-developers.com/showthread.php?t=1357056
8 # The Auto-Patcher created by pastime1971 and mateorod
9 # Thread and support for the Auto-Patcher can be found at
10 # http://forum.xda-developers.com/showthread.php?p=27589651#post27589651
15 # 2012.05.12. (v0.2) allows user to specify a different version of patches
16 # 2012.05.13. (v0.3.0) force "patch -N", remove temp upon failure, generate log output
17 # 2012.05.13. (v0.3.1) revised the generation of updater-script (SGS2)
18 # 2012.05.15. added AOSP patches
19 # 2012.05.15. added crespo-aosp patches; device-specific patching if patch exists
20 # 2012.05.15. remove restore.zip upon failure
21 # 2012.05.15. (v0.4.1) added CM7 (GB) patches
22 # 2012.05.18. (v0.4.2) added checking for tool commands
23 # 2012.05.21. (v0.4.3) apply device-specific patches only when it is specified
24 # 2012.05.26. added task title to log
25 # 2012.05.31. (v0.4.4) CM9 patches updated, crespo-aosp added
26 # 2012.06.04. (v0.4.5) added checking tools and rom, added aroma installer support
27 # add patch outputs reroute
28 # 2012.06.15. CM9 patches updated
29 # 2012.06.16. (v0.4.6) AOKP patches updated, patch versions restructured
30 # 2012.06.17. (v0.5.0) patcher script reorganized, removed build.prop
31 # 2012.06.17. (v0.6.0) auto patcher script for pdroid and v6 patches
32 # 2012.06.19. (v0.6.1) add patches for CM7.2 Final
33 # 2012.06.20. (v0.6.2) updated CM 7.2 patches
34 # 2012.06.23. (v0.6.3) fix symlinks
35 # 2012.06.26. (v0.6.4) added 0618 patches for cm7 nightlies; removed 0619 cm7.2 final
36 # 2012.06.27. (v0.6.5) added new CM9 patches (20120626)
37 # 2012.06.27. (v0.6.6) added CM7 nightly patches (20120625) (finally!)
38 # 2012.07.02. (v0.7.0) Redid AOSP/AOKP; add Windows support (using Cygwin). Thanks kobik77!
39 # 2012.07.06. (v0.7.1) updated CM9 patches (20120706)
40 # 2012.07.08. (v0.7.2) updated AOKP (20120707) and CM9 (20120708) pdroid patches
41 # 2012.07.11. (v1.0.0) reworked script works on Linux, Mac OSX, and Windows (on Cygwin);
42 # added new ICS/JellyBean support for the new V6-Supercharger
43 # 2012.07.18. (v1.0.1) new CM7/CM9 Pdroid patches (20120718)
44 # 2012.07.23. (v1.0.2) updated CM9 patches (20120723)
45 # 2012.07.23. (v1.0.3) updated CM9 patches (20120724)
46 # 2012.08.06. (v1.5.0) updated smali/baksmali binaries to 1.33
47 # 2012.08.06. Added Pdroid/V6supercharger support for CM10 Jellybean!
48 # 2012.08.06. Improved PDroid stability and efficiency (Thanks CollegeDev)
49 # 2012.08.06. (v1.6.0) added aokp-jb patches for pdroid/v6supercharger, script update
50 # 2012.08.17. (v1.9.5) Added support for pdroid_addon, by CollegeDev.
51 # Added insecure boot.img mod
52 # Added support for aosp-jb (This needs testing, and may not be
53 # a wide patch due to large variation between AOSP roms.
54 # -Please report all experiences!
55 # Updated all v6supercharger patches w/new edits to ProcessList
56 # Major script overhaul in preparation for additional mods!
57 # 2012.08.20. (v1.9.6) Conditional support for Official cm10 and aokp-jb builds
58 # 2012.08.23. (v1.9.7) Final/confirmed pdroid support for Official CM10 and AOKP-JB
59 # 2012.09.04 (v1.9.8) Bundled cygwin-compatible tools (original was corrupt).
60 # For Cygwin, replaced h2b function with simple bash math
61 # conversion (req'd for compat w/ Cygwin tools).
62 # 2012.08.26. (v2.0.0) Added .apk patching
63 # Added 3G Dongle support for Nexus 7
64 # TabletUI support for Nexus 7 (maybe more)
65 # Google Voice support for Nexus 7
66 # mods are 3gdongle, tabletUI, voice, or nexus7suite (for all)
67 # Added provisional file copy menu to widen patching base
68 # 2012.09.11. (v2.0.1) Cygwin support fixes
69 # 2012.09.11. (v2.0.2) Bugfix for 3gdongle (all)
70 # 2012.09.16. (v2.1.0) Significant restructuring of core operations; added edit text file
71 # fix for "method-cap" errors in pdroid.
72 # 2012.09.20. (v2.1.1) Fix for Phone FC's; OSX support finalized; ContentResolver resolved
73 # 2012.09.28. (v2.1.2) Hotfix for failed pdroid patching. Logging improvements.
74 # 2012.10.07. (v2.1.5) Final pdroid support for CM7.2 Official Releases
75 # Added aosp-mod patches for pdroid patching of AOSP kangs
76 # Switched to Chainfire's (f)aapt for speed/space reasons
77 # 2012.10.13. (v2.1.6) New PDroid patches for aokp-jb and cm10 4.1.2
78 # Revert (f)aapt- temporary due to reported issues
79 # 2012.10.15. (v2.17) New (again) CM10 pdroid patches.
80 # Move files to be copied into $p/$R/$B
81 # -This required a bunch of file moving-report broken symlinks.
82 # Some error check on the old RIL delete functions (thanks bundrik)
83 # 2012.10.16. (v2.1.7.5) Fix FC on phone with CM10 pdroid patches
84 # 2012.10.19. (v2.1.9) Testing CM10 support for PDroid Extension by CollegeDev.
85 # 2012.10.22. (v2.2.0) aosp/aokp and cm10 support for pdroid extension by CollegeDev
86 # MAJOR reworking of patches and improved query. only 4 mod types:
87 # cm, aokp, aosp, and pa. See our OP for details.
88 # 2012.10.26. (v2.3.0) Final (LTS) version. Stable for now until upstream breaks any patches
89 # Thanks to KicknGuitar for the OSX testing!
90 # 2012.11.01. (v2.3.1) Fix for pdroid RIL deletion for older roms
91 # Better Build query logic and help messages
92 # 2012.11.02. (v2.3.5) Add Evervolv support for all mods- Thanks to new maintainer poncik!
93 # Fix method cap for pdroid/pd2.0 for AOKP and kangs
94 # 2012.11.06. (v2.4.0) Update pd2.0 patches to latest pd2.0 release- all except Evervolv
95 # add GsmService to smali.txt; improve rom probe
96 # 2012.11.08. (v2.4.2) Add Evervolv support for pd2.0; Device-specific scripts
97 # Will display error if using a mod on an inapplicable rom
98 # 2012.11.09. (v2.4.5) Error catch for random method issues, fix pd2.0 Evervolv and aosp-jb
99 # 2012.11.17. (v2.4.6) Fix pdroid for CM7. FINALLY!.
100 # 2012.11.17. (v2.4.7) Internal debugging improvements
101 # 2013.01.13. (v2.5.0) Added 'openpdroid' mod --Open-Source Pdroid framework
102 # BIG Improvements to help and error-catch. Try ./auto_patcher -h
103 # 2013.01.15. (v2.5.1) OpenPDroid support for Evervolv and ParanoidAndroid, hotfix for Mms
104 # 2013.01.15. (v2.5.2) Fix for cygwin temp files (kobik), provisional telephony files added
105 # 2013.01.16. (v2.5.2.5) Added a new provisional as a hotfix
107 # SHELL PROGRAMMING NOTES:
109 # [[ -n STRING ]] or [[ -z STRING ]]
112 CURRENT_ANDROID
="4.2.1"
114 # pass variables to children
118 PID
="openpdroid,3gdongle" # default example
123 echo " usage: ./auto_patcher <ROM> <MODS> <ROMTYPE>"
124 echo " example: ./auto_patcher CM10.zip $PID cm"
126 echo "Use ./auto_patcher -h for the help menu"
135 echo "Multiple MODS can be combined by separating them with a comma and NO SPACES!!!"
137 echo " usage: ./auto_patcher <ROM> <MODS> <ROMTYPE>"
139 echo " example: ./auto_patcher CM10.zip openpdroid,3gdongle cm"
145 echo "* press 'q' available patches or CTRL-c to quit the help menu *"
151 echo "AVAILABLE PATCHES"
153 echo "*******************************************************************"
154 echo "Note: There are ONLY 4 ROMTYPES: [pa, cm, aokp, and aosp]."
156 #find -H * \( -name aokp -o -name cm -o -name aosp* -o -name pa -o -name all -o -name generic \) -prune | sed -e 's/-.*//' | column -c 85 | more -d -3
157 find -H * \
( -name aokp
-o -name cm
-o -name aosp
-o -name pa
-o -name all
-o -name generic \
) -prune |
column -c 85 |
more -d -7
158 #-path './src/emacs' -prune
160 echo "!!! Do not put Android Version number on command line !!!!"
161 echo "*****************************************************************"
162 echo "Specific auto_patcher script options"
163 echo " ./auto_patcher -h mods Lists mods"
164 echo " -h <MODNAME> Specific <MOD> info"
165 echo " -h advanced Advanced usage+lists all available patch dates"
172 # From rom_error (bad romtype) and date_error (patch date w/o specifying romtype)
174 echo "!!!There are only four supported ROMTYPES: 1) cm 2) aokp 3) aosp 4) pa"
176 echo "Find out which of the above ROMTYPES your rom is based on and try again!"
177 echo "**********************************************"
185 echo "The Auto-Patcher Advanced Usage"
186 echo "*********************************"
188 echo "For those of you determined to try everything..."
190 echo "You can also try adding a patch date as a final argument."
192 echo " ./auto_patcher <ROM> <MOD> <ROMTYPE> <DATE>"
194 echo "Please note: There are only four ROMTYPES: {pa, aokp, aosp and cm}"
195 echo " -The various appellations after that are for internal use only!"
197 echo "The Auto-Patcher has a pretty great rom probe, specifying the date is"
198 echo " deprecated...you don't need to, we promise."
203 [[ -n $ROOT ]] && \rm
-rf "$ROOT"/tmp
*
208 GARBAGE
=($
(find $@
-name "*.orig")) && rm -rf ${GARBAGE[@]} && echo "GARBAGE= ${GARBAGE[@]}" >> "$LOG"
209 GARBAGE
=($
(find $@
-name "*.rej")) && rm -rf ${GARBAGE[@]} && echo "GARBAGE= ${GARBAGE[@]}" >> "$LOG"
214 # General purpose error. Used for errors in main, as opposed to probe or set-up.
216 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
217 printtask
"!!! error: $@"
218 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
224 # Smali binary error. Problem often goes away on second run.
226 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
227 printtask
"!!! error: $@"
228 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
230 if [[ `grep 'method index is too large' "$LOG"` != "" ]]; then
231 printtask
"!!! Problem with method cap !!!"
232 printtask
"... attempting fix ..."
233 . patches
/common
/framework.jar.sh
2>&1 > ${JAR}.log
234 printtask
"... rebuild framework.jar ..."
235 java
-Xmx512M -jar smali.jar
-a $API tmp
/${FILE}.out
/smali
-o tmp
/${FILE}.out
/classes.dex
>> "$LOG" 2>> "$LOG"
236 [ -f tmp
/${FILE}.out
/classes.dex
] || print_error
"Could not resolve method cap issue- please submit log"
238 printtask
"!!! This error is generally due to an unknown bug in the smali binary!"
239 echo "In our experience, it goes away if you run the patcher a second time."
240 echo " Please run the Auto-Patcher with the same command once again."
242 echo "If after the third attempt the same thing happens,"
243 echo " please upload your logfile to our support thread!"
251 # Function that exposes attempts to apply a mod to an upsupported Android version
253 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
254 printtask
"!!! error: $@"
255 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
262 # Remind users to include a romtype if they are going to specify a patch date
264 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
265 printtask
"!!! error: $@"
266 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
268 echo "Please put a ROMTYPE before the patch date and run again!!"
273 # For when an unsupported romtype is manually entered on the command-line
275 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
276 printtask
"!!! error: $@"
277 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
282 # For conflicting packages
284 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
285 printtask
"!!! error: $@"
286 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
293 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
294 printtask
"!! error: $@ "
295 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
297 printtask
"!! The Auto-Patcher could not find its patches and/or tools!"
299 echo "* Did you run ./batch.sh first?"
301 echo "The patch_patches.tgz and patch_tools.tgz need to be in this directory,"
302 echo " one way or another..."
309 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
310 printtask
"!! error: $@ "
311 printtask
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
312 printtask
"Your set-up is missing a dependency."
313 echo "We require JDK, tar, patch and cpio."
316 echo "Each distro is different"
317 echo "but ensure you have them all installed and try again."
325 echo -e $@ |
tee -a "$LOG"
330 printtask
"File for which patching failed:"
331 printtask
"---------------------------------------------"
333 printtask
"${FAIL##*/}"
335 echo "---------------------------------------------"
337 echo "We can try to add a premade copy of those files."
338 echo "This sometimes works."
340 printtask
"You only need to report this if running the program gives you problems!!!"
343 askconsent
&& return 0 ||
return 1
348 echo -n "Do you want to proceed ? (YES/no) "
350 echo "askconsent final = ${PROCEED}: for $FAIL" >> "$LOG"
353 return 0; # successful:
354 echo "*** You (or ApG) have elected to use a prepatched copy of $FAIL ***" >> "$LOG"
358 echo "*** You have declined to insert $FAIL by not answering 'yes' at the prompt. ***" >> "$LOG"
365 # Function for devices that use SDcard installs. Also to be tested for CM7
366 # since CM7 seems to use an updater-script that wipes EMMC. Testing
368 \rm
$UPDATER_LOC/$UPDS
369 \
cp patches
/common
/$UPDATER_LOC/$UPDS $UPDATER_LOC
370 echo "run_program(\"/sbin/busybox\", \"umount\", \"/system\");" >> UPDATE.txt
371 cat UPDATE.txt
>> $UPDATER_LOC/$UPDS
373 echo "New updater-script being used:" >> "$LOG"
374 echo "-----------------------------" >> "$LOG"
375 cat $UPDATER_LOC/$UPDS >> "$LOG"
381 echo $
(cygpath
-ua "$1") |
sed 's:/$::g'
384 #[[ $(echo $1 | awk '/^\//') == $1 ]] && echo "$1" || echo "$PWD/$1"
385 [[ ${1:0:1} == "/" ]] && echo "$1" ||
echo "$PWD/$1"
388 echo $
(readlink
-f "$1")
391 if [[ ${1:0:1} == "/" ]]; then
393 elif [[ ${1:0:2} == "./" ]]; then
404 echo "The Auto-Patcher $VERSION"
405 echo "*******************************"
407 echo "The available mods are"
408 echo "****************************************************"
409 echo "* pdroid openpdroid voice v6supercharger *"
410 echo "* voice insecure secure external_internal *"
411 echo "* tabletUI 3gdongle pd2.0 *"
412 echo "****************************************************"
414 echo "To find out more about any mod, simply enter:"
415 echo " ./auto_patcher -h <MODNAME>"
421 DEPENDENCY
="None" # default
422 DEV
="Unknown" # default
423 CEILING
=$CURRENT_ANDROID # Default is that everything works...we'll see.
431 echo "**************************************"
432 echo "The Auto-Patcher ate a kitten once..."
433 echo "**************************************"
438 (advanced_help
&& find -H * -name 2012*) |
more -d
444 DESC
="Use on wifi-only tablets to have the software register as 'voice-enabled'. Allows VOIP like Google Voice to function."
445 DESC
="bongostl's setup method here: http://forum.xda-developers.com/showthread.php?t=1823701"
452 DESC
="A memory-management tool. It requires smali edits for Android roms 4.0+. The Auto-Patcher applies all 50+ edits recommended by the dev."
454 DEPENDENCY
="The V6 Supercharger Script. Get it at http://forum.xda-developers.com/showthread.php?t=991276/"
459 DESC
="Security Software that safely manages permissions w/o causing FC's. No longer under development. Try the open-source expansion of this program, PDroid Manager. (It's the 'openpdroid' mod within the Auto-Patcher)."
461 DEPENDENCY
="The Pdroid app. You can get it at http://forum.xda-developers.com/showthread.php?t=1923576"
466 DESC
="An expansion of the PDroid application/framework."
468 DEPENDENCY
="The free PDroid2.0 app available at http://forum.xda-developers.com/showthread.php?t=1923576"
473 DESC
="A fork of the open-source PDroid and Pdroid2.0 framework."
474 DEV
="FFU5y/wbedard/mateorod/Community"
475 DEPENDENCY
="The PDroidManager app freely available from Google Play or http://forum.xda-developers.com/showthread.php?t=1994860"
479 echo "No mod named 'opendroid'. You probably mean 'openpdroid'. Try again."
485 DESC
="Swap internal and external storage."
489 DESC
="Make any boot.img insecure and allow remount as well as adb push/pull of system files. True root."
493 DESC
="Make any boot.img secure."
498 DESC
="Allows 3gdongles to work on wifi tablets w/o 3rd party applications."
500 DEPENDENCY
="None, but read the troubleshooting guide at http://forum.xda-developers.com/showthread.php?t=1798631"
505 DESC
="Changes the user interface of Phones and Phablets to the popular Tablet UI."
511 DESC
="??? Unknown modtype ??? Check your spelling or the mod list!"
512 #DESC1="./auto_patcher -h mods"
514 # strip decimals from android version (i.e. 2.3.7 becomes 237) so we can do math
516 COMPATF
=${FLOOR//[.]/}
517 COMPATC
=${CEILING//[.]/}
521 if [ -f patches
/$P/$A/$R/$B/$FILE ]; then
522 echo "... Patching $APK failed, but we will copy over a prepatched file ..."
523 \
cp -av patches
/$P/$A/$R/$B/$FILE $FILE >> "$LOG"
525 print_error
"failed patching $APK!!!"
529 for P
in ${PID[@]}; do
531 if [[ "$NVID" -lt "$COMPATF" ]]; then
532 mismatch_error
"Your Android $VID rom is too old! The minimum for $P is \n !!! Android $FLOOR!"
534 if [[ "$NVID" -gt "$COMPATC" ]]; then
535 mismatch_error
"Sorry, $P has not been made available for Android $VID yet!"
542 echo $
(cygpath
-da "$1")
550 #contains () { for e in "${@:2}"; do [[ "$e" = "$1" ]] && return 0; done; return 1; }
552 parse
() { echo "${1%%_*}"; }
555 if [ -f system
/build.prop
]; then
556 result
=(`grep $1 system/build.prop | tr -d '\r' | tr '=' ' '`)
565 jar
-xvf "$ROMX" system
/framework
/framework2.jar
>> $LOG
566 if [ -s system
/framework
/framework2.jar
]; then
575 MID
=$
(getbuildprop ro.build.romversion
)
576 if [[ "$MID" == "Evervolv"* ]]; then
579 MID
=$
(getbuildprop ro.build.display.id
)
580 if [[ "$MID" == "ev"* ]]; then
590 CMID
=$
(getbuildprop ro.modversion
)
591 PAID
=$
(getbuildprop ro.pa.version
)
592 MID
=$
(getbuildprop ro.build.display.id
)
593 [[ "$MID" == "" ]] && MID
=$
(parse $
(getbuildprop ro.build.display.id
))
594 DID
=$
(getbuildprop ro.product.device
)
595 [[ "$DID" == "" ]] && DID
=$
(getbuildprop ro.build.product
)
596 if [[ -n $PAID ]]; then
611 VID
=$
(getbuildprop ro.build.version.release
)
612 if [ ${#VID} -lt 4 ]; then # in case of non-standard versioning in build.prop (defy!)
615 ANDR
="${VID%.*}" # Cut to 1 significant digit to cover specific range or release.
617 if [ "$ANDR" == "2.3" ]; then
621 elif [ "$ANDR" == "4.0" ]; then
624 MID
=$
(getbuildprop ro.rommanager.developerid
)
625 [[ "$MID" == "" ]] && MID
=$
(parse $
(getbuildprop ro.modversion
))
626 DID
=$
(getbuildprop ro.product.device
)
627 [[ "$DID" == "" ]] && DID
=$
(getbuildprop ro.build.product
)
630 pa|cm9|cm|cyanogenmod
*)
640 echo "!!! $MID is not supported yet, trying generic latest !!!"
643 elif [ "$ANDR" == "4.1" ]; then
646 CMID
=$
(getbuildprop ro.cm.version
)
647 if [[ -n $CMID ]]; then
650 MID
=$
(getbuildprop ro.build.display.id
)
651 [[ "$MID" == "" ]] && MID
=$
(parse $
(getbuildprop ro.build.display.id
))
652 DID
=$
(getbuildprop ro.product.device
)
653 [[ "$DID" == "" ]] && DID
=$
(getbuildprop ro.build.product
)
655 cm10|cm
*|cyanogenmod
*)
668 RID
=`aosp_mod_check`;
672 elif [ "$ANDR" == "4.2" ]; then
675 CMID
=$
(getbuildprop ro.cm.version
)
676 MID
=$
(getbuildprop ro.build.display.id
)
677 [[ "$MID" == "" ]] && MID
=$
(parse $
(getbuildprop ro.build.display.id
))
678 DID
=$
(getbuildprop ro.product.device
)
679 [[ "$DID" == "" ]] && DID
=$
(getbuildprop ro.build.product
)
682 cm10|cm
*|cyanogenmod
*)
699 print_error
"unknown ROM version $VID"
701 echo "... result of ROM check: version= $VID rom= $RID ..."
705 # Advanced build date query
706 # This should set the patch date automatically.
709 UTC
=$
(getbuildprop ro.build.
date.utc
)
711 # Difference in how OS X and Linux/Cygwin handles 'date' utility
714 BDID
=`date -r $UTC +%Y%m%d`
715 echo "#### Darwin Build Query used ####" >> "$LOG"
718 BDID
=`date -d "1970-01-01 UTC $UTC seconds" +"%Y%m%d"`
719 echo "#### Standard Build Query ####" >> "$LOG"
723 # If patch date is specified on CLI, use that patch date
724 if [ $# -gt 3 ]; then
730 # CM7 roms do not have UTC time stamp- so no build query.
732 echo "*** CM7 roms default to latest patches. If using an older rom ***"
733 echo "*** specify patch date on command line. Use -h to see available patches ***"
736 for P
in ${PID[@]}; do
737 [ -d patches
/$P/$ANDR ] && A
=$ANDR || A
=all
738 [ -d patches
/$P/$A/$RID ] && R
=$RID || R
=generic
739 [ -d patches
/$P/$A/$R/$BID ] && B
=$BID || B
=latest
741 PARB
=patches
/$P/$A/$R/$B
742 DATES
=`ls patches/$P/$A/$R/ | grep '201*'`
743 # Intialize variable - High so as to determine lowest in first loop.
745 # find earliest available patch date
747 if [[ $i -lt $BID ]]; then
751 # Check if earliest patches are from before build date. Else use earliest
753 # If older than earliest patch set, then find best match
754 if [[ $
(($BID-$BDID)) -lt 0 ]]; then
756 # use any patch that matches $UTC
757 if [[ $
(($BDID-$g)) -eq 0 ]]; then
760 # Set highest $BID w/o going over $UTC
761 elif [[ $
(($BDID-$g)) -gt 0 ]] && [[ $g -gt $BID ]]; then
766 echo "... $PID patch date has been set to: $BID ..."
776 RIL
=$
(getbuildprop ro.telephony.ril_class
)
777 [[ -n $RIL ]] && printtask
"... result of ROM check: RIL= $RIL"
781 echo "# VER= $VERSION" >> "$LOG"
782 echo "# OS= $OSTYPE ${BIT}bit" >> "$LOG"
783 echo "# VID= $VID" >> "$LOG"
784 echo "# PID= ${PID[@]}" >> "$LOG"
785 echo "# MID= $MID" >> "$LOG"
786 echo "# RID= $RID" >> "$LOG"
787 echo "# ANDR= $ANDR" >> "$LOG"
788 echo "# BDID= $BDID" >> "$LOG"
789 echo "# DID= $DID" >> "$LOG"
790 echo "# BID= $BID" >> "$LOG"
794 if [[ $1 == -h ]]; then
795 if [ $# -gt 1 ]; then
799 echo "The Auto-Patcher $VERSION by Mateorod and Pastime1971"
800 echo "*************************************************"
802 echo "Mod Name: $PID"
805 if [[ -z $DESC1 ]]; then # test to see is there is a second DESC line
808 if [[ $
((DESC2
)) -gt 0 ]]; then
812 echo "Developer: $DEV"
813 echo "Dependancies: $DEPENDENCY"
815 echo "Works on ROMs from Android $FLOOR -> $CEILING"
822 [[ $# -lt 1 ||
-z $1 ]] && PID
="mods" && mods_info
823 [[ $1 == "-h" ]] && usage_help |
less && display_help
826 echo "The Auto-Patcher $VERSION"
828 # by pastime1971 and mateorod
830 ROOT
=$
(abspath
`dirname "$0"`)
831 TOOL
="$ROOT/patch_tools.tgz"
832 PTCH
="$ROOT/patch_patches.tgz"
834 # set temporaray directory
835 DATE
=`date +%Y%m%d%H%M%S`
838 TMPDIR
=$ROOT/tmp
$DATE
843 if [[ $OSTYPE == "cygwin" ]]; then
848 LOG
=$
(abspath .
/log
$DATE.txt
)
849 #echo $ROOT $TOOL $ROM $TEMP "$LOG"
850 echo "ROOT= $ROOT" >> "$LOG"
851 echo "TOOL= $TOOL" >> "$LOG"
852 echo "ROM= $ROM" >> "$LOG"
853 echo "ROMX= $ROMX" >> "$LOG"
855 \rm
-f $RESTORE.
zip $UPDATE.
zip
857 CHK
=$
(getconf LONG_BIT
)
858 if [[ $CHK = "64" ]]; then
860 else [[ $BIT = "32" ]];
865 printtask
"### verify tools ###"
866 which patch >> "$LOG" || misstools_error
"Missing \"patch\" utility."
867 which tar >> "$LOG" || misstools_error
"Missing \"tar\" utility"
868 which jar
>> "$LOG" || misstools_error
"Missing \"Java Development Kit\" (JDK)"
869 which java
>> "$LOG" || misstools_error
"Missing \"Java Development Kit\" (JDK)"
870 which cpio >> "$LOG" || misstools_error
"Missing \"cpio\" utility"
871 [ -f "$TOOL" ] || misspatch_error
"patch_tool.tgz is missing"
872 [ -f "$PTCH" ] || misspatch_error
"patch_patches.tgz is missing"
873 printtask
"### verify ROM ###"
874 [ -f "$ROM" ] || print_error
"Cannot find $1!! Make sure you have the location and name right"
875 echo "### running $0 $@" >> "$LOG"
880 echo "PATH= $PATH" >> "$LOG"
882 printtask
"### unzip patch tools ###"
883 tar xzf
"$TOOL" > /dev
/null || print_error
"failed extracting tools !!!"
885 # Get OS specific tools
888 \
mv cygwin
/aapt.exe .
889 \
mv cygwin
/*.exe boot
/
890 \rm
-rf cygwin
# why? If you want to we can keep/add it to mac/linux, though.
902 # Ensure aapt permissions - possibly to one day be expanded to all tools in a function.
905 printtask
"### unzip patch patches ###"
906 tar xzf
"$PTCH" > /dev
/null || print_error
"failed extracting patches !!!"
908 # we need build.prop for both RIL probing and ROM probing
909 jar
-xvf "$ROMX" system
/build.prop
2>> "$LOG" || print_error
"failed extracting build.prop from $ROMX !!!"
913 printtask
"### probe rom type ###"
917 if [ $# -gt 1 ]; then
919 if [[ "$PIT" = "-h" ]]; then
923 if [ $# -gt 2 ]; then
926 cm10|cm
*|cyanogenmod
*)
940 RID
=`aosp_mod_check`;
948 date_error
"You must specify ROMTYPE if designating a patch date!!"
951 rom_error
"$RID is not a valid ROMTYPE!!"
954 echo "... Using $RID patches ..."
956 echo "... Using results of ROM check ..."
960 if [ $# -gt 1 ]; then
961 PIL
=${2//,/ } # If more than one mod, make string separated by spaces
964 echo "No mods selected. Defaulting to openpdroid, since that's what you probably want..."
967 PID
=(${PIL// / }) # turn string into array
968 COPYPID
=("${PID[@]}") # working copy to iterate over
969 MODS_NUMBER
=${#COPYPID[@]} # number of elements (mods)
971 if [[ $MODS_NUMBER > 1 ]]; then
973 for p
in ${COPYPID[@]}; do
974 if [ "$p" = "pdroid" ] ||
[ "$p" = "pd2.0" ] ||
[ "$p" = "openpdroid" ]; then
976 unset COPYPID
["$INDEX"]
982 for p
in ${COPYPID[@]}; do
983 if [ "$p" = "pdroid" ] ||
[ $p = "pd2.0" ] ||
[ $p = "openpdroid" ]; then
984 conflict_error
"Those mods conflict! Only one pdroid mod at a time!"
994 for P
in ${PIL[@]}; do
995 [[ ${PID[@]} =~
$P ]] || PID
=(${PID[@]} $P)
998 # Check to make sure selected roms are available for the Android version of patched ROM
1002 if [ $# -gt 3 ]; then # if a date is specified on command line...
1004 # Set date to match argument and ensure that patches with that date exist
1006 [ -d patches
/$P/$A/$R/$BID ] || print_error
"No $P patches for $RID on $BID!! Try the help menu!!"
1008 # Run build_query- this overrides the above but gets useful info
1010 # Reset patch date to argument
1012 echo "... $PID patch date set manually to: $BID ..."
1014 build_query
# if no date specified, use one from build_query
1020 if [[ ( "$PID" == "-h" ||
"$RID" == "-h" ||
"$BID" == "-h" ) ]]; then
1021 #Although this placement may be perfect for romfilter. although it throws the scheme...
1026 for P
in ${PID[@]}; do
1027 [ -d patches
/$P ] || print_error
"$P is not available"
1028 [ -d patches
/$P/$ANDR ] && A
=$ANDR || A
=all
1029 [ -d patches
/$P/$A/$RID ] && R
=$RID || R
=generic
1030 [ -d patches
/$P/$A/$R/$BID ] && B
=$BID || B
=latest
1033 [ -f patches
/$P/files.txt
] && FILES
=$
(cat patches
/$P/files.txt
)
1034 [ -f patches
/$P/$A/files.txt
] && FILES
=$
(cat patches
/$P/$A/files.txt
)
1035 [ -f patches
/$P/$A/$R/files.txt
] && FILES
=$
(cat patches
/$P/$A/$R/files.txt
)
1036 [ -f patches
/$P/$A/$R/$B/files.txt
] && FILES
=$
(cat patches
/$P/$A/$R/$B/files.txt
)
1037 for FILE
in ${FILES[@]}; do
1040 [[ ${CID[@]} =~ ${FILE:1} ]] && print_error "${FILE:1} is already being copied" || CID=(${CID[@]} ${FILE:1})
1043 [[ ${EID[@]} =~ ${FILE:1} ]] || EID=(${EID[@]} ${FILE:1})
1046 [[ ${JID[@]} =~
$FILE ]] || JID
=(${JID[@]} $FILE)
1047 echo "set_perm(0, 0, 0644, \"/$FILE\");" >> UPDATE.txt
1050 [[ ${AID[@]} =~
$FILE ]] || AID
=(${AID[@]} $FILE)
1051 echo "set_perm(0, 0, 0644, \"/$FILE\");" >> UPDATE.txt
1054 [[ ${IID[@]} =~
$FILE ]] || IID
=(${IID[@]} $FILE)
1057 [[ ${TID[@]} =~
$FILE ]] || TID
=(${TID[@]} $FILE)
1062 echo "### DELETE FILES= ${EID[@]}" >> "$LOG"
1063 echo "### COPY FILES= ${CID[@]}" >> "$LOG"
1064 echo "### JAR FILES= ${JID[@]}" >> "$LOG"
1065 echo "### APK FILES= ${AID[@]}" >> "$LOG"
1066 echo "### IMG FILES= ${IID[@]}" >> "$LOG"
1067 echo "### TXT FILES= ${TID[@]}" >> "$LOG"
1069 # extract system files
1070 printtask
"### unzip rom ###"
1071 jar
-xvf "$ROMX" ${JID[@]} ${AID[@]} ${IID[@]} ${TID[@]} 2>> "$LOG" || print_error "failed extracting ${JID[@]} ${AID[@]} ${IID[@]} from
$ROMX !!!"
1074 # Update/Restore.zip scripts and prep
1075 printtask "### create updater script ###"
1076 UPDATER_LOC
=META-INF
/com
/google
/android
1078 UPDATE
="update-$RID-$DID-$BDID-${PIL// /-}"
1079 RESTORE
="restore-$RID-$DID-$BDID"
1081 jar
-xvf "$ROMX" $UPDATER_LOC/$UPDS $UPDATER_LOC/update-binary
1082 jar
-xvf "$ROMX" $UPDATER_LOC/update-binary-installer
1> /dev
/null
2> /dev
/null
1084 # Determine Installer- Aroma or ClockworkMod
1085 if [ -f $UPDATER_LOC/update-binary-installer
]; then
1086 printtask
"... using Aroma installer ..."
1087 \
mv $UPDATER_LOC/update-binary-installer
$UPDATER_LOC/update-binary
1089 printtask
"... using Clockworkmod installer ..."
1092 # Create updater scripts
1093 cat patches
/common
/updater-message.txt
>> $UPDS
1094 cat $UPDATER_LOC/$UPDS |
grep ^mount |
grep "/system" |
head -n 1 >> $UPDS
1095 [ -s $UPDS ] ||
echo "run_program(\"/sbin/busybox\", \"mount\", \"/system\");" >> $UPDS
1096 # restore the original
1097 for FILE
in ${EID[@]}; do
1098 jar
-xvf "$ROMX" $FILE 2> /dev
/null || printtask
"!!! warning $FILE cannot be restored !!!"
1100 # replace with the original or delete it
1101 for FILE
in ${CID[@]}; do
1102 jar
-xvf "$ROMX" $FILE 2> /dev
/null ||
echo "delete(\"/$FILE\");" >> $UPDS
1104 echo "package_extract_dir(\"system\", \"/system\");" >> $UPDS
1105 # permission management for files that need specific perms
1106 cat $UPDATER_LOC/$UPDS |
grep set_perm |
grep "/system" >> $UPDS
1107 for P
in ${PID[@]}; do
1108 if [ -s patches
/$P/$A/set_perm.txt
]; then
1109 echo "...setting permissions..."
1110 cat patches
/$P/$A/set_perm.txt
>> $UPDS
1113 cat $UPDATER_LOC/$UPDS |
grep ^unmount |
grep "/system" |
head -n 1 >> $UPDS
1114 [[ ${IID[@]} =~ boot.img
]] && cat $UPDATER_LOC/$UPDS |
grep "boot.img" >> $UPDS
1115 echo "ui_print(\" .\");" >> $UPDS
1116 echo "ui_print(\" .\");" >> $UPDS
1117 echo "ui_print(\" done!\");" >> $UPDS
1118 cat $UPDS > $UPDATER_LOC/$UPDS
1119 echo "# generated $UPDS" >> "$LOG"
1122 printtask
"### create restore.zip ###"
1123 jar
-cvf tmp.
zip ${JID[@]} ${AID[@]} ${IID[@]} META-INF
> /dev
/null
2>> "$LOG"
1124 java
-jar signapk.jar updatecert.pem updatekey.pk8 tmp.
zip signed.
zip 2>> "$LOG"
1125 \
mv signed.
zip $RESTORE.
zip
1129 # Begin patching process
1131 # decompile system files
1132 printtask
"### decompile system files ###"
1133 for FILE
in ${JID[@]}; do
1135 printtask
"... decompile $JAR ..."
1136 java
-jar baksmali.jar
-b -a $API -o tmp
/${FILE}.out
/smali
${FILE} >> "$LOG" 2>> "$LOG"
1137 if [ $FILE == "system/framework/framework.jar" ]; then
1138 printtask
"... extract preloaded-classes ..."
1139 jar
-xvf ${FILE} preloaded-classes
>> "$LOG" 2>> "$LOG"
1140 \
mv preloaded-classes tmp
/${FILE}.out
/
1144 # install framework-files for APK...
1145 if [ ${#AID[@]} -gt 0 ]; then
1146 jar
-xvf "$ROMX" system
/framework
/framework-res.apk
>> "$LOG"
1147 printtask
"... installing framework files ..."
1148 java
-jar apktool.jar
if system
/framework
/framework-res.apk
1150 for FILE
in ${AID[@]}; do
1152 if [ -f $FILE ]; then
1153 printtask
"... decompile $APK ..."
1154 java
-jar apktool.jar d
-f $FILE tmp
/$FILE.out
1159 # Unpack image files {boot.img only so far...}
1160 for FILE
in ${IID[@]}; do
1161 printtask
"### unpacking $FILE ###"
1164 if [ -f boot.img
]; then
1166 .
/unpackbootimg
$EXE -i ..
/boot.img
>> "$LOG" 2>> "$LOG"
1169 gzip -dc ..
/boot.img-ramdisk.gz |
cpio -i >> "$LOG" 2>> "$LOG"
1172 print_error
"A mod needs to patch boot.img! This rom does not contains boot.img."
1176 print_error
"cannot process $FILE"
1181 # apply system modification
1183 for P
in ${PID[@]}; do
1184 [ -d patches
/$P/$ANDR ] && A
=$ANDR || A
=all
1185 [ -d patches
/$P/$A/$RID ] && R
=$RID || R
=generic
1186 [ -d patches
/$P/$A/$R/$BID ] && B
=$BID || B
=latest
1187 PAR
=patches
/$P/$A/$R
1188 PARB
=patches
/$P/$A/$R/$B
1190 unset FILES COPY DELS JARS APKS IMGS TXTS
1191 [ -f patches
/$P/files.txt
] && FILES
=$
(cat patches
/$P/files.txt
)
1192 [ -f patches
/$P/$A/files.txt
] && FILES
=$
(cat patches
/$P/$A/files.txt
)
1193 [ -f patches
/$P/$A/$R/files.txt
] && FILES
=$
(cat patches
/$P/$A/$R/files.txt
)
1194 [ -f patches
/$P/$A/$R/$B/files.txt
] && FILES
=$
(cat patches
/$P/$A/$R/$B/files.txt
)
1195 for FILE
in ${FILES[@]}; do
1198 COPY
=(${COPY[@]} ${FILE:1})
1201 DELS
=(${DELS[@]} ${FILE:1})
1204 JARS
=(${JARS[@]} $FILE)
1207 APKS
=(${APKS[@]} $FILE)
1210 IMGS
=(${IMGS[@]} $FILE)
1213 TXTS
=(${TXTS[@]} $FILE)
1218 [[ -n ${COPY[@]} ]] && printtask
"### copy patch $P/$A/$R/$B ###"
1219 for FILE
in ${COPY[@]}; do
1220 printtask
"... copying $FILE ..."
1223 if [ -e patches
/$P/$A/$R/$B/$FILE ]; then
1224 [ -e $FILE ] && printtask
"... overwriting $FILE from $P ..."
1225 \
cp -av patches
/$P/$A/$R/$B/$FILE .
/$DEST >> "$LOG"
1227 print_error
"$FILE is missing in the patch. Please upload your logfile to the support thread!"
1231 # unconditional smali copying- For particularly troublesome files
1232 [ -f patches
/$P/smali.txt
] && SMALI
=$
(cat patches
/$P/smali.txt
)
1233 [ -f patches
/$P/$A/smali.txt
] && SMALI
=$
(cat patches
/$P/$A/smali.txt
)
1234 [ -f patches
/$P/$A/$R/smali.txt
] && SMALI
=$
(cat patches
/$P/$A/$R/smali.txt
)
1235 [ -f patches
/$P/$A/$R/$B/smali.txt
] && SMALI
=$
(cat patches
/$P/$A/$R/$B/smali.txt
)
1237 for SMALI
in ${SMALI[@]}; do
1238 if [ -f patches
/$P/$A/$R/provisionals
/$SMALI ]; then
1239 printtask
"... overwriting $MOVE ..."
1240 \
cp -a patches
/$P/$ANDR/$R/provisionals
/$SMALI tmp
/$SMALI >> "$LOG"
1241 elif [ -f patches
/$P/$A/provisionals
/$SMALI ]; then
1242 printtask
"... overwriting $MOVE ..."
1243 \
cp -a patches
/$P/$ANDR/provisionals
/$SMALI tmp
/$SMALI >> "$LOG"
1247 [[ -n ${DELS[@]} ]] && printtask
"### delete patch $P/$A/$R/$B ###"
1248 for FILE
in ${DELS[@]}; do
1249 printtask
"... deleting $FILE ..."
1252 [[ -n ${JARS[@]} ]] && printtask
"### jar patch $P/$A/$R/$B ###"
1253 for FILE
in ${JARS[@]}; do
1256 printtask
"... apply $NAME.patch ..."
1257 patch -Nls -p1 -d tmp
/${FILE}.out < $PARB/${NAME}.patch 2>&1 > ${JAR}.log
1258 cat ${JAR}.log |
tee -a "$LOG"
1261 # patch preloaded-classes only if a patch exists
1262 if [ -f $PARB/preloaded.
patch ]; then
1263 printtask
"... apply preloaded.patch ..."
1264 patch -Nls -p1 -d tmp
/${FILE}.out
< $PARB/preloaded.
patch 2>&1 > preloaded.log
1265 cat preloaded.log |
tee -a "$LOG"
1266 [[ `grep FAILED preloaded.log` != "" ]] && print_error
"failed preloaded.patch"
1270 echo -n "" # do nothing else
1273 # substitute failed smali with provisional (a prepatched smali file)
1275 FAILS
=(`grep FAILED ${JAR}.log | sed -e 's/.*smali\///' | sed -e 's/\.rej//'`)
1276 if [[ -n ${FAILS[@]} ]]; then
1277 printtask
"!!! PATCHING FAILED FOR ${FAILS[@]} !!!"
1278 echo "### replace ${FAILS[@]} ###" > ${JAR}.log
1279 for FAIL
in ${FAILS[@]}; do
1280 PROVISIONAL
="patches/$P/$ANDR/provisionals/${FILE}.out/smali/${FAIL}"
1281 echo "!!! patch error for $FAIL !!!" >> "$LOG"
1282 #cat tmp/$FILE.out/smali/${FAIL}.rej >> "$LOG" # FOR DEBUGGING
1283 [[ ${SID[@]} =~
$FAIL ]] && print_error
"$FAIL was already replaced before"
1284 [ -f "$PROVISIONAL" ] || print_error
"failed $FAIL in $JAR cannot be remedied"
1286 printtask
"... replace $FAIL ..."
1287 \rm
-rf tmp
/${FILE}.out/smali/${FAIL} tmp/${FILE}.out/smali/${FAIL}.orig tmp/${FILE}.out/smali/${FAIL}.rej
1288 \
cp -av "$PROVISIONAL" tmp
/${FILE}.out
/smali
/${FAIL} >> "$LOG"
1289 SID
=(${SID[@]} $FAIL)
1292 [[ `grep FAILED ${JAR}.log` != "" ]] && print_error
"failed $NAME.patch"
1293 garbage tmp
/${FILE}.out
1295 # run special $JAR.sh scripts if any JAR needs special attention
1296 if [ -f patches
/$P/$A/$R/$B/${JAR}.sh
]; then
1297 printtask
"... apply $JAR.sh ..."
1298 . patches
/$P/$A/$R/$B/${JAR}.sh
2>&1 > ${JAR}.log
1299 cat ${JAR}.log |
tee -a "$LOG"
1303 [[ -n ${APKS[@]} ]] && printtask
"### apk patch $P/$A/$R/$B ###"
1304 for FILE
in ${APKS[@]}; do
1306 if [ -d "tmp/${FILE}.out" ] ; then
1307 printtask
"... apply $APK.patch ..."
1308 patch -Nls -p2 -d tmp
/${FILE}.out < $PARB/${APK}.patch 2>&1 >> ${APK}.log
1309 cat ${APK}.log |
tee -a "$LOG"
1310 [[ `grep FAILED ${APK}.log` != "" ]] && apk_check
1311 garbage tmp
/${FILE}.out
1313 echo "No $APK in your ROM. Not able to patch this file."
1314 echo "## No $APK in ROM ###" >> "$LOG"
1317 [[ -n ${IMGS[@]} ]] && printtask
"### img patch $P/$A/$R/$B ###"
1318 for FILE
in ${IMGS[@]}; do
1320 printtask
"... applying $IMG.patch ..."
1321 patch -Nls -p1 -d boot
/ramdisk
< $PARB/${IMG}.
patch >> "$LOG" || print_error
"failed patching $FILE"
1324 # Text Editing Functions --this can really do just about anything. Needs a working restore!
1325 [[ -n ${TXTS[@]} ]] && printtask
"### text patch $P/$A/$R/$B ###"
1326 for FILE
in ${TXTS[@]}; do
1328 if [[ -f $PARB/${TXT}.
patch ]]; then
1329 printtask
"... apply $TXT.patch ..."
1330 patch -Nls -p2 -d system
/ < $PARB/${TXT}.
patch 2>&1 > ${TXT}.log
1331 #cat ${TXT}.log | tee -a "$LOG"
1332 [[ `grep FAILED ${TXT}.log` != "" ]] && print_error
"failed $TXT.patch"
1334 if [[ -f $PAR/${TXT}.
awk ]]; then
1335 printtask
"... apply $TXT.awk ..."
1336 awk -f $PAR/${TXT}.
awk $FILE > text || print_error
"failed $TXT.awk"
1339 if [[ -f $PAR/${TXT}.
sed ]]; then
1340 printtask
"... apply $TXT.sed ..."
1341 sed -f $PAR/${TXT}.
sed $FILE > text || print_error
"failed $TXT.sed"
1344 if [[ -f $PAR/${TXT}.sh
]]; then
1345 printtask
"... apply $TXT.sh ..."
1346 .
$PAR/${TXT}.sh
2>&1 >> ${TXT}.log || print_error
"failed $TXT.sh"
1352 # Device specific scripts- Placement is up-for-review
1353 if [ -f patches
/devices
/$DID/$DID.sh
]; then
1354 . patches
/devices
/$DID/$DID.sh
1357 # Replace updater-script for CM7- it formats system -Testing
1358 if [ "$ANDR" == "gingerbread" ]; then
1362 # Rebuilding system files
1364 [[ -n ${JID[@]} ]] && printtask
"### rebuild jar ###"
1365 for FILE
in ${JID[@]}; do
1367 printtask
"... rebuild $JAR ..."
1368 java
-Xmx512M -jar smali.jar
-a $API tmp
/${FILE}.out
/smali
-o tmp
/${FILE}.out
/classes.dex
>> "$LOG" 2>> "$LOG"
1369 [ -f tmp
/${FILE}.out
/classes.dex
] || smali_error
"failed compiling $JAR !!!"
1370 jar
-ufv ${FILE} -C tmp
/${FILE}.out
/ classes.dex
>> "$LOG" 2>> "$LOG"
1371 if [ $FILE == "system/framework/framework.jar" ]; then
1372 jar
-ufv ${FILE} -C tmp
/${FILE}.out
/ preloaded-classes
>> "$LOG" 2>> "$LOG"
1376 [[ -n ${AID[@]} ]] && printtask
"### rebuild apk ###"
1377 for FILE
in ${AID[@]}; do
1379 if [ -d tmp
/${FILE}.out
]; then
1380 printtask
"... rebuild $APK ..."
1381 java
-jar apktool.jar b tmp
/${FILE}.out
>> "$LOG" 2>> "$LOG" || print_error
"failed compiling $FILE !!!"
1382 jar
-uvf $FILE -C tmp
/${FILE}.out
/build
/apk
/ .
> /dev
/null
2>> "$LOG"
1386 [[ -n ${IID[@]} ]] && printtask
"### rebuild img ###"
1387 for FILE
in ${IID[@]}; do
1388 printtask
"### rebuild $FILE ###"
1391 # Rebuilding boot.img
1393 printtask
"... rebuilding ramdisk ..."
1394 .
/mkbootfs
$EXE .
/ramdisk |
gzip > ramdisk-new.gz
1396 printtask
"... composing boot.img ..."
1397 BASE
=$
(cat boot.img-base
)
1398 # hex to decimal in cygwin prefixing "0x" w/ C arithmetic
1399 PGSIZE
=$
((${PGFORM}$
(cat boot.img-pagesize
)))
1400 CMDLINE
=$
(cat boot.img-cmdline
)
1401 echo "cmdline = no_console_suspend=1 console=null $CMDLINE" >> "$LOG"
1402 echo "pagesize = $PGSIZE" >> "$LOG"
1403 echo "base = $BASE" >> "$LOG"
1404 printtask
"... rebuilding boot.img ..."
1405 .
/mkbootimg
$EXE --kernel boot.img-zImage
--ramdisk ramdisk-new.gz
--cmdline "no_console_suspend=1 console=null $CMDLINE" --base "$BASE" --pagesize "$PGSIZE" -o ..
/boot.img || print_error
"failed building boot.img"
1409 print_error
"cannot process $FILE"
1414 printtask
"### create $UPDATE.zip ###"
1415 jar
-cfv tmp.
zip ${IID[@]} ${JID[@]} ${AID[@]} ${CID[@]} ${TID[@]} META-INF
>> "$LOG" 2>> "$LOG"
1416 java
-jar signapk.jar updatecert.pem updatekey.pk8 tmp.
zip $UPDATE.
zip 2>> "$LOG"
1418 \
mv $RESTORE.
zip $UPDATE.
zip ..
1419 echo "### finished ###"
1420 echo "flash $UPDATE.zip to install the patched files"
1421 echo "flash $RESTORE.zip to restore the original system"
1423 # add announcement- optional.
1424 for P
in ${PID[@]}; do
1425 [ -d patches
/$P/$ANDR ] && A
=$ANDR || A
=all
1426 [ -d patches
/$P/$A/$RID ] && R
=$RID || R
=generic
1427 [ -d patches
/$P/$A/$R/$BID ] && B
=$BID || B
=latest
1428 if [ -f patches
/$P/$A/$R/$B/README.txt
]; then
1429 cat patches
/$P/$A/$R/$B/README.txt
1430 elif [ -f patches
/$P/$A/$R/README.txt
]; then
1431 cat patches
/$P/$A/$R/README.txt
1432 elif [ -f patches
/$P/$A/README.txt
]; then
1433 cat patches
/$P/$A/README.txt