replicant-vendor_replicant/tools/opticharger
Pat Thoyts 0e7f64ef60 Make opticharger less verbose and clean up after itself.
The verbose output of opticharger can obscure warning messages about missing
tools so this patch reduces the noise.
The script leaves droppings in /tmp so clean this up on exit using a trap.

Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
2010-07-11 02:37:52 -04:00

124 lines
3.3 KiB
Bash
Executable File

#!/bin/sh
#
# Super-mega opticharger of doom
# Shrinks apks by running pngcrush on png images
#
# Point APKCERTS at the full path to a generated apkcerts.txt file, such as:
# /home/shade/dev/sources/android-cm-eclair/out/target/product/dream_sapphire/obj/PACKAGING/target_files_intermediates/cyanogen_dream_sapphire-target_files-eng.shade/META/apkcerts.txt
#
# cyanogen - shade@chemlab.org
# ChrisSoyars - me@ctso.me
OUT_TARGET_HOST=$(uname -a | grep Darwin)
if [ -z "$OUT_TARGET_HOST" ]
then
OUT_TARGET_HOST=linux-x86
else
OUT_TARGET_HOST=darwin-x86
fi
set -e
QUIET=1
QFLAG=-q
BASE=`pwd`
if [ "$APKCERTS" = "" ];
then
APKCERTS=$OUT/obj/PACKAGING/target_files_intermediates/$TARGET_PRODUCT-target_files-$TARGET_BUILD_VARIANT.$LOGNAME/META/apkcerts.txt
if [ ! -f "$APKCERTS" ];
then
echo "Set APKCERTS to the path to your apkcerts.txt file"
exit 1;
fi
fi
if [ ! -f "$APKCERTS" ];
then
echo "Invalid path to apkcerts.txt, set APKCERTS to the correct path."
fi
if [ "`which pngcrush`" = "" ];
then
echo "Please install pngcrush"
exit 1;
fi
if [ "`which aapt`" = "" ];
then
echo "Please ensure aapt is in your \$PATH"
exit 1;
fi
if [ "`which zipalign`" = "" ];
then
echo "Please ensure zipalign is in your \$PATH"
exit 1;
fi
if [ -e "$1" ];
then
NAME=`basename $1`;
echo "Optimizing $NAME...";
if [ "$2" != "" ];
then
CERT=build/target/product/security/$2.x509.pem
KEY=build/target/product/security/$2.pk8
if [ ! -f "$ANDROID_BUILD_TOP/$CERT" ];
then
echo "$CERT does not exist!";
exit 1;
fi
else
APKINFO=`grep "name=\"$NAME\"" $APKCERTS`;
[ $QUIET ] || echo "APKINFO: $APKINFO";
if [ "$APKINFO" = "" ];
then
echo "No apk info for $NAME";
exit 1;
fi
CERT=`echo $APKINFO | awk {'print $2'} | cut -f 2 -d "=" | tr -d "\""`;
KEY=`echo $APKINFO | awk {'print $3'} | cut -f 2 -d "=" | tr -d "\""`;
if [ "$CERT" = "" ];
then
echo "Unable to find certificate for $NAME"
exit 1;
fi
fi
[ $QUIET ] || echo "Certificate: $CERT";
[ -d /tmp/$NAME ] && rm -rf /tmp/$NAME
mkdir /tmp/$NAME
trap "rm -rf /tmp/$NAME; exit" INT TERM EXIT
cd /tmp/$NAME
unzip -q $BASE/$1
for x in `find . -name "*.png" | grep -v "\.9.png$" | tr "\n" " "`
do
[ $QUIET ] || echo "Crushing $x"
pngcrush $QFLAG $x $x.crushed 1>/dev/null
if [ -e "$x.crushed" ];
then
mv $x.crushed $x
fi
done
cp $BASE/$1 $BASE/$1.old
[ $QUIET ] || echo "Repacking apk.."
aapt p -0 res/raw -0 res/raw-en -F $NAME .
[ $QUIET ] || echo "Resigning with cert: `echo $CERT`"
[ $QUIET ] || echo java -jar $ANDROID_BUILD_TOP/out/host/$OUT_TARGET_HOST/framework/signapk.jar $ANDROID_BUILD_TOP/$CERT $ANDROID_BUILD_TOP/$KEY $NAME signed_$NAME
java -jar $ANDROID_BUILD_TOP/out/host/$OUT_TARGET_HOST/framework/signapk.jar $ANDROID_BUILD_TOP/$CERT $ANDROID_BUILD_TOP/$KEY $NAME signed_$NAME
[ $QUIET ] || echo "Zipalign.."
zipalign -f 4 signed_$NAME $BASE/$1
if [ ! $QUIET ]; then
ls -l $BASE/$1.old
ls -l $BASE/$1
fi
rm $BASE/$1.old
else
echo "Usage: $0 [apk file]"
fi