Šetříme interní paměť v T-Mobile G1 - Android
Po updatu na CyanogenMod 4.2.7 se mi v trayi telefonu opět objevila nepříjemná ikonka signalizující nedostatek místa v interní paměti telefonu. Na tom by nebylo zas až tak nic špatného, kdyby mi z nenadání přestala fungovat synchronizace a download aplikací v Marketu. Obětoval jsem celé odpoledne na to, abych zjistil, že onu nefunkční synchronizaci má za následek právě nedostatek místa, na který jsem byl non-stop upozorňován. Takže co s tím?
Apps2sd
Řešení integrované přímo do CyanogenModu spočívající v jednoduchém shell skriptu, který pří bootu telefonu na základě předpokládané existence druhého diskového oddílu na SD kartě tento oddíl použije a přesune na něj veškeré nainstalované aplikace a data s nimi související. Nevýhodou je předchozí úprava karty pomocí nástrojů na dělení disku a naformátování na linuxový filesystém ext2/3/4. Za odměnu ale dostanete přenositelné aplikace i s nastavením. Skript pracuje zcela automaticky, tudíž stačí jen mít připravenou partition.
Mé vlastní řešení
Přišel jsem na něj doslova metodou pokus-omyl. Při šťourání se
v datové partition jsem si všiml adresáře /data/dalvik-cache,
který zabíral úctyhodných 40 MB a tím pádem byl ihned nominován za
největšího žrouta místa. Tento adresář slouží běhovému prostředí
Dalvik VM jako cache optimalizovaného bytekódu, jinými slovy jako
úložiště překompilovaných a upravených binárek používaných aplikací.
Do detailu Dalvik buduje strom závislostí jednotlivých tříd (funkčních
celků aplikace) tak, aby nainstalovaná aplikace běžela co možná nejlépe.
Tento strom je regenerován při každé aktualizaci ROM, proto první boot po
updatu trvá i několik minut.
Dalším zajímavým místem je adresář /cache, který je
stále téměř prázdný. V dosavadním Androidu je použit výhradně jako
dočasné úložiště pro stahované aplikace v Marketu, jenže v poměru
velikosti celé parititon (~60 MB) a jednoho stahovaného balíčku (řádově
jednotky MB) je až škoda toto místo nevyužít. Proto jsem si napsal krátký
skript, který dalvik-cache přesune do tohoto volného
prostoru.
#!/system/bin/sh
# move dalvik cache from internal data memory to /cache
if [ ! -d /cache/dalvik-cache ];
then
mkdir /cache/dalvik-cache
fi
busybox chown 1000:1000 /cache/dalvik-cache
busybox chmod 771 /cache/dalvik-cache
if [ -d /data/dalvik-cache ] && [ ! -h /data/dalvik-cache ];
then
busybox cp -a /data/dalvik-cache/* /cache/dalvik-cache
busybox rm -f /data/dalvik-cache/*
# bind mount dalvik-cache
busybox mount -o bind /cache/dalvik-cache /data/dalvik-cache
Tento skript stačí umístit např. jako /etc/init.d/06custom.
Toho můžeme efektivně docílit vytvořením souboru na SD kartě a
následným zkopírováním do systému těmito příkazy:
mount -o remount,rw /system
cp /sdcard/06custom /etc/init.d
chmod 755 /etc/init.d/06custom
… a pokračovat rebootem telefonu.
Pokud jste vše udělali správně, máte nyní v interní paměti (aka
/data) okolo 40 MB volného místa. Povedlo se!
Pozn.: Uvedený postup je třeba opakovat po každém updatu ROM, kdy dojde k přepsání systémové partition a tedy i vlastního skriptu. Doporučuji proto skript na SD kartě ponechat a před bootem do updatlé ROM spustit konzoli a zopakovat příkazy uvedené výše.
Štítky: Tipy a triky