blob: 4ad2ebff57ab5385d80d39119978e1208e604372 [file] [log] [blame]
arf31f37f2012-09-05 08:57:46 -03001#!/bin/sh
2#
3# Squish a CM otapackage for distribution
4# cyanogen
5#
6
7OUT_TARGET_HOST=`uname -a | grep Darwin`
8if [ -z "$OUT_TARGET_HOST" ]
9then
10 OUT_TARGET_HOST=linux-x86
11 MD5=md5sum
12 XARGS="xargs --max-args=1 --max-procs `grep 'processor' /proc/cpuinfo|wc -l`"
13 SED=sed
14else
15 OUT_TARGET_HOST=darwin-x86
16 MD5=md5
17 XARGS="xargs -n 1 -P `sysctl hw.ncpu | awk '{print $2}'`"
18 SED=gsed
19fi
20
21if [ -z "$OUT" -o ! -d "$OUT" ]; then
22 echo "ERROR: $0 only works with a full build environment. $OUT should exist."
23 exit 1
24fi
25
26if [ "$TARGET_BUILD_TYPE" = "debug" ]; then
27 OTAPACKAGE=$OUT/${TARGET_PRODUCT}_debug-ota-$TARGET_BUILD_VARIANT.$USER.zip
28elif [ "$TARGET_BUILD_VARIANT" = "userdebug" ]; then
29 OTAPACKAGE=$OUT/$TARGET_PRODUCT-ota-eng.$USER.zip
30elif [ "$TARGET_BUILD_VARIANT" = "user" ]; then
31 OTAPACKAGE=$OUT/$TARGET_PRODUCT-ota-eng.$USER.zip
32else
33 OTAPACKAGE=$OUT/$TARGET_PRODUCT-ota-$TARGET_BUILD_VARIANT.$USER.zip
34fi
35if [ ! -f "$OTAPACKAGE" ]; then
36 echo "$OTAPACKAGE doesn't exist!";
37 exit 1
38fi
39
ar8f9ced82012-09-05 09:56:43 -030040OPTICHARGER=$ANDROID_BUILD_TOP/vendor/slim/tools/opticharger
arf31f37f2012-09-05 08:57:46 -030041QUIET=-q
42DELETE_BINS="applypatch applypatch_static check_prereq recovery updater"
arfaa54c12012-09-05 16:48:18 -030043DELETE_MEDIA="*.qmg"
arf31f37f2012-09-05 08:57:46 -030044
45REPACK=$OUT/repack.d
46printf "Sanitizing environment..."
47rm -rf $REPACK
48mkdir -p $REPACK
49echo
50
51
52# Unpack the otapackage and opticharge all apks
53mkdir $REPACK/ota
54(
55cd $REPACK/ota
56printf "Unpacking $OTAPACKAGE..."
57unzip $QUIET $OTAPACKAGE
58echo
59
60# Move all apks to the same directory so xargs can
61# use also with framework-res.apk. This allow process
62# framework-res.apk in parallel with other apks
63mkdir -p $REPACK/parallel
64cd $REPACK/parallel
65cp $REPACK/ota/system/framework/framework-res.apk .
66cp $REPACK/ota/system/app/*.apk .
67
68# Do optimization in parallel
69find ./ -name \*.apk | $XARGS $OPTICHARGER
70
71# Move optimized apks to repack directory
72mv -f $REPACK/parallel/framework-res.apk $REPACK/ota/system/framework/framework-res.apk
73mv -f $REPACK/parallel/*.apk $REPACK/ota/system/app/
74
75# Return to directory
76cd $REPACK/ota
77rm -rf $REPACK/parallel
78)
79
80# Fix build.prop
81$SED -i \
82 -e '/ro\.kernel\.android\.checkjni/d' \
83 -e '/ro\.build\.type/s/eng/user/' \
84 $REPACK/ota/system/build.prop
85
86
87# Delete unnecessary binaries
88( cd $REPACK/ota/system/bin; echo $DELETE_BINS | xargs rm -f; )
89
arfaa54c12012-09-05 16:48:18 -030090# Delete Offline charging mode files
91( cd $REPACK/ota/system/media; echo $DELETE_MEDIA | xargs rm -f; )
92
93# No need for modem.bin
94rm -f $REPACK/ota/modem.bin
95
96# No need for media/video
97rm -rf $REPACK/ota/system/media/video
98
99# Delete compiled fonts
100rm -rf $REPACK/ota/system/fonts
101
102#make dir for fonts again
103mkdir $REPACK/ota/system/fonts
104
105# Add precompiled fonts
106mv -f $REPACK/ota/system/sfont/*.ttf $REPACK/ota/system/fonts/
107
108# No need for tts
109rm -rf $REPACK/ota/system/tts
110
arf31f37f2012-09-05 08:57:46 -0300111# No need for recovery
112rm -rf $REPACK/ota/recovery
113
114# Strip modules
115[ -d $REPACK/ota/system/lib/modules ] && \
116 find $REPACK/ota/system/lib/modules -name "*.ko" -print0 | xargs -0 arm-eabi-strip --strip-unneeded
117
arfaa54c12012-09-05 16:48:18 -0300118# Swap boot.img
119DEVICEINFO=`sed -n -e'/ro\.product\.device/s/^.*=//p' $REPACK/ota/system/build.prop`
120if [ "$DEVICEINFO" = "GT-I9000" ]; then
121 rm -f $REPACK/ota/boot.img
122 mv -f $REPACK/ota/system/slimkernel/boot.img $REPACK/ota/boot.img
123fi
124
arf31f37f2012-09-05 08:57:46 -0300125# Determine what to name the new signed package
ar8716a412012-09-05 10:08:55 -0300126MODVERSION=`sed -n -e'/ro\.modversion/s/^.*=//p' $REPACK/ota/system/build.prop`
127OUTFILE=$OUT/$MODVERSION.zip
arf31f37f2012-09-05 08:57:46 -0300128echo MODVERSION: $MODVERSION
129
130# Pack it up and sign
131printf "Zipping package..."
132( cd $REPACK/ota; zip $QUIET -r $REPACK/update.zip . )
133echo
134printf "Signing package..."
135SECURITYDIR=$ANDROID_BUILD_TOP/build/target/product/security
136java -Xmx1024m \
137 -jar $OUT/../../../host/$OUT_TARGET_HOST/framework/signapk.jar \
138 -w $SECURITYDIR/testkey.x509.pem $SECURITYDIR/testkey.pk8 \
139 $REPACK/update.zip $OUTFILE
140echo
141printf "Cleaning up..."
142rm -rf $REPACK
143echo
144
145# Create a md5 checksum image of the repacked package
146(
147img=`basename $OUTFILE`
148cd `dirname $OUTFILE`
149$MD5 $img >$img.md5sum
150echo
151echo "Package complete: $OUTFILE"
152cat $img.md5sum
153echo
154)
155
156exit 0