Tag Archives: httpsuckup-de

Optimized Android-Apps mit Linux erstellen

Ich habe meine apps mit dem folgenden Bash-Skript optimiert, welches die Bild- & Sound-Dateien komprimiert, so dass die Apps kleiner werden und weniger Speicher verbrauchen… :-)

Habe die optimierten Apps zu meinem Update-Pack für Spica hinzugefügt -> cyanogenmod + x

 

1.) Bash-Skript in einer Textdatei unter Linux speichern (Tweak_app.sh) & Ausführrechte setzen (chmod +x Tweak_app.sh)

2.) “optipng”, “pngcrush”, “sox” installieren (z.B. für Debian: apt-get install optipng pngcrush sox)

3.) android-sdk herunterladen & sudo cp …..android-sdk/android-sdk/zipalign /usr/bin/

4.) Folgendes Verzeichnis anlegen und zu optimierende Apps darin speichern (./place-apk-here-to-batch-optimize/)

5.) Tweak-Skript ausführen (./Tweak_app.sh) -> Fertig


#!/bin/bash

LOG_FILE="apk.log"

if [ \! -f `whereis optipng | cut -f 2 -d ' '` ] ; then
	echo "ERROR: install optipng (apt-get install optipng)"
	exit 1;
fi;
if [ \! -f `whereis pngcrush | cut -f 2 -d ' '` ] ; then
	echo "ERROR: install pngcrush (apt-get install pngcrush)"
	exit 1;
fi;
if [ \! -f `whereis sox | cut -f 2 -d ' '` ] ; then
	echo "ERROR: install sox (apt-get install sox)"
	exit 1;
fi;
if [ \! -f `whereis zipalign | cut -f 2 -d ' '` ] ; then
	echo "ERROR: install zipalign (sudo cp ...android-sdk/android-sdk/zipalign /usr/bin/)"
	exit 1;
fi;	

rm -rf ./place-apk-here-to-batch-optimize/original/*
if [ -e $LOG_FILE ]; then
	rm $LOG_FILE;
fi;
touch $LOG_FILE
mkdir -p ./place-apk-here-to-batch-optimize/original
find ./place-apk-here-to-batch-optimize -iname "*.apk" | while read APK_FILE ;
do
	echo "Optimizing $APK_FILE"
	7za x -o"./place-apk-here-to-batch-optimize/original" $APK_FILE
	find ./place-apk-here-to-batch-optimize/original -iname "*.png" | while read PNG_FILE ;
		do
		if [ `echo "$PNG_FILE" | grep -c "\.9\.png$"` -eq 0 ] ; then
			optipng -o99 "$PNG_FILE"
			pngcrush -rem alla -reduce -brute "$PNG_FILE" tmp_img_file.png;
			mv -f tmp_img_file.png $PNG_FILE;
		fi
	done;
	find ./place-apk-here-to-batch-optimize/original -iname "*.ogg" | while read OGG_FILE ;
		do
        	sox "$OGG_FILE" -C 0 tmp_audio_file.ogg
        	mv -f tmp_audio_file.ogg $OGG_FILE
    	done;
	7za a -tzip "./place-apk-here-to-batch-optimize/temp.zip" ./place-apk-here-to-batch-optimize/original/* -mx9
	FILE=`basename "$APK_FILE"`
	DIR=`dirname "$APK_FILE"`
	mv -f ./place-apk-here-to-batch-optimize/temp.zip "$DIR/optimized-$FILE"
	zipalign -v -c 4 "$DIR/optimized-$FILE";
	ZIPCHECK=$?;
	if [ $ZIPCHECK -eq 1 ]; then
		echo "ERROR $FILE" >> $LOG_FILE;
		#rm "$DIR/optimized-$FILE"
	elif [ $ZIPCHECK -eq 0 ]; then
		echo "OK $FILE" >> $LOG_FILE;
	else
		echo "ERROR $FILE" >> $LOG_FILE;
		#rm "$DIR/optimized-$FILE"
	fi;
	rm -rf ./place-apk-here-to-batch-optimize/original/*
done;

C-Programm – Euro & Dollar Umrechnung

Und noch ein einfaches Beispiel für Funktionen… + verschiedenen Schleifen. (for, while, do-while)

// Euro & Dollar

#include <stdio.h>
#define WKURS 1.40331182

double euro2dollar( double euro) {
	return euro*WKURS;
}

double dollar2euro( double dollar) {
	return dollar/WKURS;
}

int main(void) {
	double anfangsbetrag;
	double endbetrag;
	int umrechnung;

	printf("Umrechnen von Dollar in Euro & von Euro in Dollar:\n\n");
	do {
		printf("Anfangsbetrag = "); scanf("%lf", &anfangsbetrag);
	} while ( anfangsbetrag <= 0 );
	do {
		printf("Endbetrag = "); scanf("%lf", &endbetrag);
	} while ( endbetrag <= 0 );

	do {
		printf("\n1 - von Euro in Dollar\n2 - von Dollar in Euro\nUmrechnung:"); scanf("%d", &umrechnung);
	} while ( (umrechnung < 1)  || (umrechnung > 2) );

	if (umrechnung == 1) {
		printf("\n  Euro  |  Dollar");
		printf("\n--------+--------");
		// for
		for (anfangsbetrag; anfangsbetrag <= endbetrag; anfangsbetrag=anfangsbetrag+10) {
			printf("\n %6.2lf | %6.2lf", anfangsbetrag, euro2dollar(anfangsbetrag) );
		}
		/* // while
		while (anfangsbetrag <= endbetrag) {
			printf("\n %6.2lf | %6.2lf", anfangsbetrag, euro2dollar(anfangsbetrag) );
			anfangsbetrag=anfangsbetrag+10;
		}
		*/
		/* // do-while
		do {
			printf("\n %6.2lf | %6.2lf", anfangsbetrag, euro2dollar(anfangsbetrag) );
			anfangsbetrag=anfangsbetrag+10;
		} while (anfangsbetrag <= endbetrag);
		*/
	} else {
		printf("\nDollar  |    Euro");
		printf("\n--------+--------");
		for (anfangsbetrag; anfangsbetrag <= endbetrag; anfangsbetrag=anfangsbetrag+10) {
			printf("\n %6.2lf | %6.2lf", anfangsbetrag, dollar2euro(anfangsbetrag) );
		}
		/* // while
		while (anfangsbetrag <= endbetrag) {
			printf("\n %6.2lf | %6.2lf", anfangsbetrag, dollar2euro(anfangsbetrag) );
			anfangsbetrag=anfangsbetrag+10;
		}
		*/
		/* // do-while
		do {
			printf("\n %6.2lf | %6.2lf", anfangsbetrag, dollar2euro(anfangsbetrag) );
			anfangsbetrag=anfangsbetrag+10;
		} while (anfangsbetrag <= endbetrag);
		*/
	}

	return 0;
}