Jít na obsah Jít na navigaci Jít na vyhledávání

Š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:

Komentáře

Komentáře jsou uzavřeny