[Galaxy S II Android Development] lsv-1:
Zipalign doesn't work

Hello everybody, I need some help with zipalign, when I manually run the script from init.d with Script Manager I get an error that says that there is a syntax error at line 28 of the liberty.bsh file, unexpected "(", can someone explain to me what does it mean? Opened the liberty.bsh file and I couldn't find any syntax error (let me clarify that I'm not a programmer LOL)

Here is the code my liberty.bsh

#!/system/xbin/bash
: '
============ Copyright (C) 2010 Jared Rummler (JRummy16) ============

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

=====================================================================
'

: ' =========================================================
function name: fix_permissions
parameters: void
returns: void
description:
Sets permissions for Android data directories and apks
============================================================= '
function fix_permissions()
{
START=` busybox date +%s `
PKGLINE=(` pm list packages -f | busybox cut -d ':' -f2 `);
MAX=${#PKGLINE[*]}
INCREMENT=5
PROGRESS=0
PROGRESS_BAR=""

echo
echo "Fixing permissions..."
echo

busybox mount -o remount,rw /system

for pkgline in ${PKGLINE[*]}; do

PKGNAME=` echo $pkgline | busybox cut -d '=' -f2 `
CODEPATH=` echo $pkgline | busybox cut -d '=' -f1 `
DATAPATH=/data/data/$PKGNAME
PKGUID=` busybox grep $CODEPATH /data/system/packages.xml | busybox sed 's%.*serId="\(.*\)".*%\1%' | busybox cut -d '"' -f1 `

let PROGRESS++
PERCENT=$(( $PROGRESS * 100 / $MAX ))
if busybox [ $PERCENT -eq $INCREMENT ]; then
INCREMENT=$(( $INCREMENT + 5 ))
PROGRESS_BAR="${PROGRESS_BAR}="
fi

echo -ne " \r ${PROGRESS}/${MAX} ${PERCENT}% [ ${PROGRESS_BAR}> ]"

if busybox [ -e $CODEPATH ]; then

APPDIR=` busybox dirname $CODEPATH `

if busybox [ $APPDIR = /system/app ]; then
busybox chown 0 $CODEPATH
busybox chown :0 $CODEPATH
busybox chmod 644 $CODEPATH
elif busybox [ $APPDIR = /data/app ]; then
busybox chown 1000 $CODEPATH
busybox chown :1000 $CODEPATH
busybox chmod 644 $CODEPATH
elif busybox [ $APPDIR = /data/app-private ]; then
busybox chown 1000 $CODEPATH
busybox chown :$PKGUID $CODEPATH
busybox chmod 640 $CODEPATH
fi

if busybox [ -d $DATAPATH ]; then

busybox chmod 755 $DATAPATH
busybox chown $PKGUID $DATAPATH
busybox chown :$PKGUID $DATAPATH

DIRS=` busybox find $DATAPATH -mindepth 1 -type d `

for file in $DIRS; do

PERM=755
NEWUID=$PKGUID
NEWGID=$PKGUID
FNAME=` busybox basename $file `

case $FNAME in
lib)
busybox chmod 755 $file
NEWUID=1000
NEWGID=1000
PERM=755
;;
shared_prefs)
busybox chmod 771 $file
PERM=660
;;
databases)
busybox chmod 771 $file
PERM=660
;;
cache)
busybox chmod 771 $file
PERM=600
;;
*)
busybox chmod 771 $file
PERM=771
;;
esac

busybox chown $NEWUID $file
busybox chown :$NEWGID $file

busybox find $file -type f -maxdepth 1 ! -perm $PERM -exec busybox chmod $PERM {} ';'
busybox find $file -type f -maxdepth 1 ! -user $NEWUID -exec busybox chown $NEWUID {} ';'
busybox find $file -type f -maxdepth 1 ! -group $NEWGID -exec busybox chown :$NEWGID {} ';'

done
fi
fi
done

busybox mount -o remount,ro /system
sync

STOP=` busybox date +%s `
RUNTIME=` runtime $START $STOP `
echo
echo
echo "Fix permissions complete! Runtime: ${RUNTIME}"
echo
}

: ' =========================================================
function name: getFastReboot
parameters: void
returns: void
description:
Hot reboots the device
============================================================= '
function getFastReboot()
{
busybox killall system_server
}

: ' =========================================================
function name: getFastReboot
parameters: void
returns: rw|ro
description:
Gets mount
'
function getMount()
{
mount | busybox grep /system | busybox awk '{print $4}' | busybox cut -d ',' -f1
}

: ' =========================================================
function name: installApks
parameters: $1 - "-r" search all sub directories for apks, or...
path to directory
$2 - path to directory (if recursize)
returns: void
description:
Installs apks to device using package manager
============================================================= '
function installApks()
{
RECURSIZE=0
case $1 in
-r)
RECURSIZE=1
shift;
;;
esac

APKS_DIR=${1:-/mnt/sdcard/}
declare -a APKS

if busybox [ -d $APKS_DIR ]; then

if busybox [ $RECURSIZE -eq 1 ]; then
APKS=(` busybox find $APKS_DIR -type f -name *.apk -print `);
else
APKS=(` ls $APKS_DIR/*.apk `);
fi

for apk in ${APKS[*]}; do
pm install -i com.google.android.feedback -r $apk
done
fi
}

: ' =========================================================
function name: isBusyboxInstalled
parameters: void
returns: 0: busybox is installed
1: busybox is not installed
description:
Checks if busybox is installed correctly
============================================================= '
function isBusyboxInstalled()
{
if ! busybox > /dev/nul 2>&1; then
return 1
fi
return 0
}

: ' =========================================================
function name: isRoot
parameters: void
returns: 0: if user is root
1: if user is not root
description:
Checks if user is running as root
============================================================= '
function isRoot()
{
if busybox [ `whoami` = root ]; then
return 0
fi
return 1
}

: ' =========================================================
function name: isProcessRunning
parameters: $1 - process name
returns: 0: Process is running
1: Process is not running
description:
Checks if SD card is mounted
============================================================= '
function isProcessRunning()
{
if busybox [ $# -ne 1 ]; then
return 1
fi

PROCESS=$1

PROCESSES=(` ps | busybox awk '{print $9}' `);
for p in ${PROCESSES[*]}; do
if busybox [ "$p" = "$PROCESS" ]; then
return 0
fi
done
return 1
}

: ' =========================================================
function name: isSdPresent
parameters: void
returns: 0: SD card is present
1: SD card is not present
description:
Checks if SD card is mounted
============================================================= '
function isSdPresent()
{
if busybox [ -z "$( busybox mount | busybox grep /sdcard )" ]; then
return 1
fi
return 0
}

: ' =========================================================
function name: runtime
parameters: $1 - Start time of task
$2 - End time of task
returns: task runtime
description:
Prints runtime of a task
============================================================= '
function runtime()
{
START=$1
STOP=$2

RUNTIME=` busybox expr $STOP - $START`
HOURS=` busybox expr $RUNTIME / 3600`
REMAINDER=` busybox expr $RUNTIME % 3600`
MINS=` busybox expr $REMAINDER / 60`
SECS=` busybox expr $REMAINDER % 60`
busybox printf "%02d:%02d:%02d\n" "$HOURS" "$MINS" "$SECS"
}

: ' =========================================================
function name: setProp
parameters: $1 - Key
$2 - Value
$3 - File
returns: void
description:
Sets build properties
============================================================= '
function setProp()
{
if busybox [ $# -lt 2 ]; then
return
fi

KEY=$1
VALUE=$2
PROP_FILE=${3:-/system/build.prop}
SEPERATOR="="
LINE=""

if busybox [ -f $PROP_FILE ]; then
LINE=` busybox grep $KEY $PROP_FILE `
if busybox [ -n "${LINE}" ]; then
if busybox [ -n "$( echo $LINE | busybox grep ' = ' )" ]; then
SEPERATOR=" = "
fi
busybox sed -i "s|${KEY}${SEPERATOR}.*|${KEY}${SEPERATOR}${VALUE}|" $PROP_FILE
fi
else
echo "$PROP_FILE does not exist"
fi
setprop $KEY $VALUE
}

: ' =========================================================
function name: sysro
parameters: void
returns: void
description:
Mounts system read-only
============================================================= '
function sysro()
{
busybox mount -o remount,ro /system
}

: ' =========================================================
function name: sysrw
parameters: void
returns: void
description:
Mounts system rear/write
============================================================= '
function sysrw()
{
busybox mount -o remount,rw /system
}

: ' =========================================================
function name: zipalign_apks
parameters: void
returns: void
description:
Checks for unaligned apks and aligns them.
============================================================= '
function zipalign_apks()
{
if busybox [ -z "$( busybox which zipalign )" ]; then
echo "Error: zipalign binary missing."
return
fi

START=` busybox date +%s `
CODEPATH=(` pm list packages -f | busybox cut -d ':' -f2 | busybox cut -d '=' -f1 `);
MAX=${#CODEPATH[*]}
INCREMENT=5
PROGRESS=0
PROGRESS_BAR=""

echo
echo "Zipaligning..."
echo

busybox mount -o remount,rw /system

for codepath in ${CODEPATH[*]}; do

let PROGRESS++
PERCENT=$(( $PROGRESS * 100 / $MAX))
if busybox [ $PERCENT -eq $INCREMENT ]; then
INCREMENT=$(( $INCREMENT + 5 ))
PROGRESS_BAR="${PROGRESS_BAR}="
fi

echo -ne " \r ${PROGRESS}/${MAX} ${PERCENT}% [ ${PROGRESS_BAR}> ]"

if busybox [ -e $codepath ]; then
zipalign -c 4 $codepath
ZIP_CHECK=$?
case $ZIP_CHECK in
1)
if zipalign -f 4 $codepath /data/local/pkg.apk; then
busybox cp -f /data/local/pkg.apk $codepath
busybox rm -f /data/local/pkg.apk
fi
;;
esac
fi

done

busybox mount -o remount,ro /system
sync

STOP=` busybox date +%s `
RUNTIME=` runtime $START $STOP `
echo
echo
echo "Zipalign complete! Runtime: ${RUNTIME}"
echo
}