-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathopticharger
executable file
·135 lines (118 loc) · 3.76 KB
/
opticharger
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/bin/sh
#
# Super-mega opticharger of doom
# Shrinks apks by running pngcrush or optipng or pngout 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 - [email protected]
# ChrisSoyars - [email protected]
set -e
QUIET=1
BASE=`pwd`
BRUTECRUSH="-brute"
TMPDIR=/tmp/opticharge-$$
. $ANDROID_BUILD_TOP/pngtools/colors
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 $CL_RED"Set APKCERTS to the path to your apkcerts.txt file"$CL_RST
exit 1;
fi
fi
if [ ! -f "$APKCERTS" ];
then
echo $CL_RED"Invalid path to apkcerts.txt, set APKCERTS to the correct path."$CL_RST
fi
if [ "$(which pngquant)" != "" ];
then
optimize_png () {
pngquant --speed 1 --force --ext .png $1 1> /dev/null 2> /dev/null
}
else
echo $CL_RED"Please install pngquant"$CL_RST
exit 1;
fi
if [ "`which aapt`" = "" ];
then
echo $CL_RED"Please ensure aapt is in your \$PATH"$CL_RST
exit 1;
fi
if [ "`which zipalign`" = "" ];
then
echo $CL_RED"Please ensure zipalign is in your \$PATH"$CL_RST
exit 1;
fi
if [ -e "$1" ];
then
NAME=`basename $1`;
echo $CL_CYN"Optimizing"$CL_YLW" $NAME..."$CL_RST;
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 $CL_RED"$CERT does not exist!";$CL_RST
exit 1;
fi
else
APKINFO=`grep "name=\"$NAME\"" $APKCERTS`;
[ $QUIET ] || echo "APKINFO: $APKINFO";
if [ "$APKINFO" = "" ];
then
echo $CL_RED"No apk info for $NAME";$CL_RST
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 -e $CL_RED"Unable to find certificate for $NAME"$CL_RST
exit 1;
fi
if [ "$CERT" = "PRESIGNED" ];
then
echo $CL_GRN"$NAME is presigned, skipping"$CL_RST
exit 1;
fi
fi
[ $QUIET ] || echo $CL_YLW"Certificate:"$CL_RST" $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 $CL_GRN"Crushing $x"$CL_RST
optimize_png $x
done
cp $BASE/$1 $BASE/$1.old
[ $QUIET ] || echo $CL_GRN"Repacking apk.."$CL_RST
aapt p -0 .dat -0 .dict -0 .arsc -F $NAME .
[ $QUIET ] || echo $CL_YLW"Resigning with cert: `echo $CERT`"$CL_RST
[ $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 $CL_GRN"Zipalign.."$CL_RST
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