Android i moja przygoda z apps2sd. Jak działa? Jak włączyć?

05/01/2011 – 22:41

Decydując się na instalację CM na swojej komórce, zaakceptowałem również to, że będę korzystał z Androida w wersji 2.2.1, a ten z kolei umożliwia przenoszenie aplikacji z pamięci telefonu na kartę pamięci. Ale czy na pewno rozwiązanie oferowane przez Google jest optymalne? Uważam, że nie. Natywne app2sd z Froyo ma kilka wad:

  • nie można przenosić wszystkich aplikacji na kartę pamięci,
  • aplikacje nie są przenoszone w całości na kartę SD, lecz jedynie „ich części”; przykładowo: aplikacja X zajmuje standardowo 15 MB na pamięci wewnętrznej telefonu; przeniesienia na kartę pamięci sprawia, że aplikacja zajmuje 4 MB na pamięci wewnętrznej, a 11 na karcie SD,
  • podczas podłączenia komórki przez USB do komputera, w celu skopiowania plików, nie można korzystać z aplikacji, które zostały przeniesione z telefonu na SD,
  • telefon dość długo po inicjalizacji karty pamięci, wyszukuje przeniesione nań aplikacje.

Problem z długą inicjalizacją SD czy kopiowaniem przez USB jest do zniesienia. Niestety fakt, że pamięć wewnętrzna telefonu szybko się zapełnia, poprzez instalację kolejnych aplikacji, już nie jest powodem do uśmiechu.

Przedwczoraj skończyła mi się wolna pamięć na telefonie. Włączyłem zatem apps2sd w SamdroidTools po czym wykonałem reboot (oczywiście karta pamięci posiadała odpowiednią partycję, wymaganą przez apps2sd). Po reboocie, żadna z aplikacji nie została przeniesiona na partycję ext2 na karcie pamięci. Zmartwił mnie również fakt, że SamdroidTools twierdził, że partycja ext2 ma jedynie 75 MB wolnego miejsca, a nie 340. Wyjąłem kartę, sprawdziłem na komputerze. Komórka kłamała, gdyż druga partycja na karcie pamięci była cała pusta i faktycznie miała 340 MB.

Sformatowałem jeszcze raz partycję ext2, zarówno z poziomu komputera jak i recovery w komórce. Nic to niestety nie dało. Żadna z aplikacji nie została przeniesiona, a SamdroidTools dalej usilnie podawał złą wartość wolnego miejsca.

Hmm, a może moja karta microSD się skopała? Zrobiłem jej backup, znalazłem drugą kartę pamięci o identycznych parametrach, sformatowałem ją odpowiednio, ale komórka dalej mi uprzykrzała życie.

Zacząłem szukać informacji przy użyciu Google na temat apps2sd na Cyanogenmodzie. Nic ciekawego nie znalazłem. Jedynie jeden user na forum.samdroid.net zgłaszał jakiś czas temu identyczny problem, z którym ja się borykałem – niestety, bez odzewu.

Do późnych godzin nocnych szukałem jakiś wskazówek. Nic nie znalazłem. Poszedłem spać. Dopiero dzisiaj mnie olśniło. Prawdę mówiąc, szukając kolejną godzinę na Google, znowuż to nic nie znalazłem, ale coś mnie natchnęło… Skoro Android jest systemem Linuksowym, ma praktycznie identyczną budowę, to tak na logikę – czym jest apps2sd (to z SamdroidTools)? Albo skompilowanym programem, albo skryptem wrzuconym do runlevelu. Od razu zajrzałem do /etc/init.d/ w komórce. Co zobaczyłem? Pliczek 04apps2sd. Nigdy się tak bardzo nie ucieszyłem na widok jakiegokolwiek pliku w /etc/init.d :P. Szybko przyjrzałem się jego zawartości, po czym stwierdziłem, że zasada działania apps2sd z SamdroidTools jest bajecznie prosta, a skrypt sam w sobie jest banalny.

Jak działa apps2sd (w uproszczeniu)?

  1. Sprawdza czy jest aktywowane w systemie.
  2. Sprawdza drugą partycję na karcie pamięci pod kątem błędów.
  3. Montuje ją w /system/sd.
  4. Kopiuje aplikacje z pamięci wewnętrznej telefonu na zamontowaną partycję.
  5. Usuwa aplikacje z pamięci telefonu.
  6. Tworzy dowiązanie z /data/app do /system/sd/app oraz z /data/app-private do /system/sd/app-private.

Skrypt identycznie postępuje z przenoszeniem dalvik-cache na kartę SD.

Zatem – skoro skrypt jest napisany dobrze, uruchamia się przy starcie, to czemu apps2sd nie działa? Widocznie nie jest uruchamiane. Dlaczego? Bo nie jest aktywowane. Tak jak podejrzewałem, tak i było. Mimo włączenia w SamdroidTools apps2sd, do systemu nie została zapisana informacja, że ma być ono włączone.

Skrypt 04apps2sd pobiera informacje z systemu o aktywowaniu apps2sd za pomocą polecenia getprop (a konkretnie: getprop lk.apps2sd.enable). Jako że setprop szwankuje w przypadku SamdroidTools, musiałem znaleźć obejście. Chwilka na Google i okazało się, że można stworzyć własny plik z ustawieniami. Wszystko ograniczyło się do jednego polecenia:

# echo "lk.apps2sd.enable=1" > /data/local.prop

a dla dalvik2cache:

# echo "lk.movedc.enable=1" > /data/local.prop

Po tym wykonałem reboot. Aplikacje zostały przeniesione oraz SamdroidTools zaczął pokazywać poprawną wartość wolnej pamięci na drugiej partycji karty pamięci.

Wniosek? Apps2sd na CM szwankuje (przynajmniej u mnie). Drugi wniosek? Fora Androidowe zalane są całą masą pseudo-fachowców, którzy wypowiadają się na temat Androida, partycji, aplikacji, podstawowych zagadnień związanych z Linuksem, nie mając nawet pojęcia co to jest swap. Trzeci? Z tego co wyczytałem na forum.samdroid.net, Leshak rezygnuje z apps2sd w Androidzie 2.2 i 2.3, na rzecz natywnego app2sd. Tak więc – trzymajcie kopię /etc/init.d/04apps2sd w bezpiecznym miejscu :-).

  1. komentarzy 5 dla “Android i moja przygoda z apps2sd. Jak działa? Jak włączyć?”

  2. Ja to się zastanawiam dlaczego moja karta mimo iż formatowana różnorako (recovery, gparted) ciągle uważana jest jako zepsuta w telefonie. W kompie działa od ręki a android ciągle sie pluje :|

    By Pakos on Sty 6, 2011

  3. Dajesz głowę, że nie sformatowałeś jej przez przypadek w żadnym egzotycznym systemie plików? Np. exfat?

    Co mówią logi Androida w momencie podłączenia karty do telefonu? Wyświetla się jakiś komunikat?

    By Kaka' on Sty 6, 2011

  4. ext2 oczywiście ;)

    pojawia sie tylko error ze karta zepsuta, logi musze sprawdzic

    By Pakos on Sty 7, 2011

  5. Sprawdź logi po podłączeniu, powinno to nam wiele powiedzieć.

    By Kaka' on Sty 7, 2011

  6. Ja zdecydowałem się na Link2SD ;)
    I wolę SamdroidMod od CM.

    By Paweł Błach on Lut 12, 2011

Napisz komentarz