Skip to content

Instantly share code, notes, and snippets.

@whitequark
Created May 12, 2012 17:14
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save whitequark/2667695 to your computer and use it in GitHub Desktop.
Save whitequark/2667695 to your computer and use it in GitHub Desktop.
Pure shell update package installer for Android
#!/bin/bash
set -e
UPDATE_PKG=$1
if [ "$UPDATE_PKG" == "" ]; then
echo "Usage: $0 <update package>"
echo
exit 1
fi
cat >/tmp/android-update-shim.sh <<'END'
#!/bin/bash
set -e
UPDATE_PKG=$1
UPDATE_BINARY=META-INF/com/google/android/update-binary
FIFO=/tmp/update-fifo
echo "Installing package $UPDATE_PKG..."
echo " (Note that this trampoline DOES NOT support signature verification)"
if ! unzip -qo $UPDATE_PKG $UPDATE_BINARY -d /tmp; then
echo "Not an update package." >&2
exit 1
fi
mkfifo $FIFO
exec 3<>$FIFO
rm -f $FIFO
echo "Launching update-binary..."
TRAMPOLINE=$$
updater() {
# update-binary <API version> <command fd> <update zip>
chmod +x /tmp/$UPDATE_BINARY
if /tmp/$UPDATE_BINARY 3 3 $UPDATE_PKG 1>/dev/null; then
echo "Update was successful."
else
echo "Update has FAILED."
fi
rm -f /tmp/$UPDATE_BINARY
kill $TRAMPOLINE
}
updater &
trap "exit" SIGTERM
while read line <&3; do
line="${line} "
cmd=${line%% *}
args=${line#* }
case $cmd in
ui_print)
if [ "$args" != "" ]; then
echo "$args"
fi
esac
done
END
echo "Pushing trampoline..."
adb push /tmp/android-update-shim.sh /tmp/update-shim.sh
rm /tmp/android-update-shim.sh
echo "Repacking update..."
mkdir /tmp/android-update
unzip -q "$UPDATE_PKG" -d /tmp/android-update
(cd /tmp/android-update;
zip -q -r ../android-update-repacked.zip *)
echo "Pushing update..."
adb push /tmp/android-update-repacked.zip /tmp/update.zip
rm -rf /tmp/android-update /tmp/android-update-repacked.zip
echo "Launching trampoline..."
adb shell '/sbin/ash /tmp/update-shim.sh /tmp/update.zip'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment