#!/system/bin/sh
# PrimeDirective
# zipalign

#!/system/bin/sh


LOG_FILE=/data/log/zipalign.log;
ZIPALIGNED_APK=/data/local/zipalignedapk;

if [ -e $LOG_FILE ]; then
	rm $LOG_FILE;
fi;

if [ ! -f $ZIPALIGNED_APK ]; then
	touch $ZIPALIGNED_APK;
fi;

echo "Automatic ZipAlign started at $( date +"%m-%d-%Y %H:%M:%S" ) " | tee -a $LOG_FILE;

for DIR in /system/app /data/app; do
	cd $DIR;
	for APK in *.apk; do
		if [ $APK -ot $ZIPALIGNED_APK ] && [ $(grep "$DIR/$APK" $ZIPALIGNED_APK|wc -l) -gt 0 ]; then
			echo "Already checked: $DIR/$APK" | tee -a $LOG_FILE;
			if [ -e /data/$APK ]; then
				rm /data/$APK;
				echo "Temporary APK removed: /data/$APK" | tee -a $LOG_FILE;
			fi;
		else
			ZIPCHECK=`/system/xbin/zipalign -c -v 4 $APK | grep FAILED | wc -l`;
			if [ $ZIPCHECK == "1" ]; then
				echo "Now aligning: $DIR/$APK" | tee -a $LOG_FILE;
				/system/xbin/zipalign -v -f 4 $APK /data/$APK;
				sync
				busybox mount -o rw,remount /system;
				cp -f -p /data/$APK $APK;
				rm /data/$APK;
				if [ -e /data/$APK ]; then
					sleep 2;
					rm /data/$APK;
					if [ -e /data/$APK ]; then
						echo "Failed to remove APK. Run the tweak again : /data/$APK" | tee -a $LOG_FILE;
					else
						echo "Temporary APK removed: /data/$APK" | tee -a $LOG_FILE;
					fi;
				fi;
				grep "$DIR/$APK" $ZIPALIGNED_APK > /dev/null || echo $DIR/$APK >> $ZIPALIGNED_APK;
			else
				echo "Already aligned: $DIR/$APK" | tee -a $LOG_FILE;
				if [ -e /data/$APK ]; then
					rm /data/$APK;
					echo "Temporary APK removed: /data/$APK" | tee -a $LOG_FILE;
				fi;
				grep "$DIR/$APK" $ZIPALIGNED_APK > /dev/null || echo $DIR/$APK >> $ZIPALIGNED_APK;
			fi;
		fi;
	done;
done;
sync
busybox mount -o ro,remount /system;
touch $ZIPALIGNED_APK;
echo "Automatic ZipAlign finished at $( date +"%m-%d-%Y %H:%M:%S" )" | tee -a $LOG_FILE;
