Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
163 changes: 163 additions & 0 deletions tools/opticharger
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
#!/bin/bash
#
# Super-mega LiquidSmooth opticharger of doom
# Shrinks apks by running pngquant or pngcrush or optipng or pngout on png images
#

. $ANDROID_BUILD_TOP/vendor/cm/tools/colors

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
BASE=`pwd`
BRUTECRUSH="-brute"
TMPDIR=/tmp/opticharge-$$

if [ -z "$BRUTE_PNGCRUSH" ]
then
BRUTECRUSH=""
fi

if [ "$APKCERTS" = "" ];
then
if [ "$TARGET_BUILD_VARIANT" = "userdebug" ]; then
TARGET_BUILD_VARIANT="eng"
elif [ "$TARGET_BUILD_VARIANT" = "user" ]; then
TARGET_BUILD_VARIANT="eng"
fi

APKCERTS=$OUT/obj/PACKAGING/target_files_intermediates/$TARGET_PRODUCT-target_files-$TARGET_BUILD_VARIANT.$USER/META/apkcerts.txt
if [ ! -f "$APKCERTS" ];
then
echo -e ${red}"Set APKCERTS to the path to your apkcerts.txt file"${txtrst}
exit 1;
fi
fi

if [ ! -f "$APKCERTS" ];
then
echo -e ${red}"Invalid path to apkcerts.txt, set APKCERTS to the correct path."${txtrst}
fi

if [ "$(which pngquant)" != "" ];
then
optimize_png () {
pngquant --speed 1 --force --ext .png $1 1> /dev/null 2> /dev/null
}
elif [ "$(which pngcrush)" != "" ];
then
optimize_png () {
pngcrush -q ${BRUTECRUSH} $1 ${1}.out 1> /dev/null 2> /dev/null
mv ${1}.out ${1} 2> /dev/null
}
elif [ "$(which optipng)" != "" ];
then
optimize_png () {
optipng -o7 -quiet $1 1> /dev/null 2> /dev/null
}
elif [ "$(which pngout-static)" != "" ];
then
optimize_png () {
pngout-static $1
}
elif [ "$(which pngout)" != "" ];
then
optimize_png () {
pngout $1
}
else
echo -e ${red}"Please install pngquant, pngcrush, optipng, or pngout"${txtrst}
exit 1;
fi

if [ "`which aapt`" = "" ];
then
echo -e ${red}"Please ensure aapt is in your \$PATH"${txtrst}
exit 1;
fi

if [ "`which zipalign`" = "" ];
then
echo -e ${red}"Please ensure zipalign is in your \$PATH"${txtrst}
exit 1;
fi

if [ -e "$1" ];
then
NAME=`basename $1`;
echo -e ${bldgrn}"Optimizing:${txtrst} $NAME...";

if [ "$2" != "" ];
then
if [ "$DEFAULT_SYSTEM_DEV_CERTIFICATE" ]; then
CERT_PATH=`dirname $DEFAULT_SYSTEM_DEV_CERTIFICATE`
else
CERT_PATH=build/target/product/security
fi
CERT="$CERT_PATH"/$2.x509.pem
KEY="$CERT_PATH"/$2.pk8
if [ ! -f "$ANDROID_BUILD_TOP/$CERT" ];
then
echo -e ${red}"$CERT does not exist!"${txtrst};
exit 1;
fi
else
APKINFO=`grep "name=\"$NAME\"" $APKCERTS`;
[ $QUIET ] || echo -e "APKINFO: $APKINFO";
if [ "$APKINFO" = "" ];
then
echo -e ${red}"No apk info for $NAME"${txtrst};
exit 1;
fi
CERT=`echo -e $APKINFO | awk {'print $2'} | cut -f 2 -d "=" | tr -d "\""`;
KEY=`echo -e $APKINFO | awk {'print $3'} | cut -f 2 -d "=" | tr -d "\""`;
if [ "$CERT" = "" ];
then
echo -e ${red}"Unable to find certificate for $NAME"${txtrst}
exit 1;
fi
if [ "$CERT" = "PRESIGNED" ];
then
echo -e ${cya}"$NAME is presigned, skipping"${txtrst}
exit 1;
fi
fi

[ $QUIET ] || echo -e ${bldylw}"Certificate:${txtrst} $CERT";

[ -d $TMPDIR/$NAME ] && rm -rf $TMPDIR/$NAME
mkdir -p $TMPDIR/$NAME
trap "rm -rf $TMPDIR; exit" INT TERM EXIT
cd $TMPDIR/$NAME
unzip -q $BASE/$1
for x in `find . -name "*.png" | grep -v "\.9.png$" | tr "\n" " "`
do
[ $QUIET ] || echo -e ${bldgrn}"Crushing${txtrst} $x"
optimize_png $x
done
cp $BASE/$1 $BASE/$1.old

[ $QUIET ] || echo -e ${bldgrn}"Repacking apk.."${txtrst}
aapt p -0 .dat -0 .dict -0 .arsc -F $NAME .

[ $QUIET ] || echo -e ${bldgrn}"Resigning with cert:${txtrst} `echo -e $CERT`"

[ $QUIET ] || echo java -jar $ANDROID_HOST_OUT/framework/signapk.jar $ANDROID_BUILD_TOP/$CERT $ANDROID_BUILD_TOP/$KEY $NAME signed_$NAME
java -jar $ANDROID_HOST_OUT/framework/signapk.jar $ANDROID_BUILD_TOP/$CERT $ANDROID_BUILD_TOP/$KEY $NAME signed_$NAME
[ $QUIET ] || echo -e ${bldgrn}"Zipalign.."${txtrst}
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 -e "Usage: $0 [apk file]"
fi
34 changes: 34 additions & 0 deletions tools/squisher
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/bin/bash
#
# Squish a CM otapackage for distribution
# cyanogen

. $ANDROID_BUILD_TOP/vendor/cm/tools/colors

OUT_TARGET_HOST=`uname -s`
if [ x"$OUT_TARGET_HOST" = x"Linux" ]
then
OUT_TARGET_HOST=linux-x86
XARGS="xargs --max-args=1 --max-procs `grep 'processor' /proc/cpuinfo|wc -l`"
elif [ x"$OUT_TARGET_HOST" = x"Darwin" ]
then
OUT_TARGET_HOST=darwin-x86
XARGS="xargs -n 1 -P `sysctl hw.ncpu | awk '{print $2}'`"
else
echo -e ${red}"ERROR: unknown/unsupported host OS!"${txtrst}
exit 1
fi

if [ -z "$OUT" -o ! -d "$OUT" ]; then
echo -e ${red}"ERROR: $0 only works with a full build environment. $OUT should exist."${txtrst}
exit 1
fi

OPTICHARGER=$ANDROID_BUILD_TOP/vendor/cm/tools/opticharger
QUIET=-q
DELETE_BINS="applypatch applypatch_static check_prereq recovery updater"

# Optimize PNG resources in APKs
( cd $OUT/system; find framework/ app/ priv-app/ vendor/app/ -name \*.apk -print | $XARGS $OPTICHARGER; )

exit 0