Podróż do wnętrza Androida – Kroimy tort #1

Android

podroz_do_wnetrza_androida

 

Nie przegap
Najlepsze aplikacje z AppGallery – gry i programy, które warto pobrać
huawei appgallery sklep play zastepstwo
AppGallery to jeden z największych sklepów z programami i grami na Androida. Stanowi on część Huawei Mobile Services i już pokrótce przybliżyliśmy Wam, jak tak naprawdę on działa oraz co oferuje. Tymczasem sprawdźmy, co konkretnie skrywa to miejsce. O ile sam sklep prowadzi rankingi tytułów, które cieszą się największym zainteresowaniem, to postanowiłem wybrać dla Was […]

Witam!

Chcę przedstawić Wam, Drodzy Czytelnicy, mój nowy cykl autorski, poświęcony w całości poznawaniu systemu Android i jego modyfikowaniu. W cotygodniowych spotkaniach będę starał się przybliżyć wszystkim mechanizmy działania systemu i sposoby na ulepszenie jego działania, wyglądu i funkcjonalności.

Chciałbym zabrać Was, Drodzy Czytelnicy, w fascynującą wyprawę, w czasie której zwiedzimy wiele zakamarków wielkiego i interesującego świata, rządzonego przez Zielonego Robota. Poznamy wiele ciekawostek związanych z tym mobilnym systemem, będziemy doskonalić też swoje umiejętności i uczyć się wielu przydatnych w codziennym użytkowaniu smartfonu czynności. Będziemy z pewnością gościć na kolacji na zamku u Króla Roota, zwiedzimy podziemne katakumby Recovery, nieraz z przerażeniem będziemy patrzyli na wstrzymujące u wielu dech w piersiach zjawisko bootloopu. Nie omieszkamy także poflirtować z terminalem czy wywołać uśmiech na swoich ustach wgrywając świeży ROM do naszych kochanych Droidów. Czas spędzony w podróży zaprocentuje w przyszłości, kiedy będziemy mogli powiedzieć z dumą: „Mam jedną rękę prawą i jedną lewą – a nie dwie lewe!”

podroznik_droid

Chcę, aby ten cykl, będący naturalnym następcą zmarłego już „Weekendu z modowaniem”, budził u Was zarówno radość, jak i niecierpliwość. Radość – z czytania i nauki nowych rzeczy. Niecierpliwość – podczas oczekiwania na kolejne wyprawy w głąb androidowej dżungli, pełnej niespodzianek i niesamowitych nowości, o których wielu z Was zapewne nawet nie wiedziało w chwili zakupu swojego mądrego kawałka mobilnej rozrywki.

Żywię nadzieję, iż nowy, stały element portalu zostanie ciepło przyjęty i naprawi błędy swojego poprzednika – że będzie w sposób interesujący opowiadał, jak można bawić się, dostosowując nasze urządzenie pod nasze osobiste upodobania. Postaram się niekiedy dość profesjonalny język, związany z tematyką modyfikacji, przełożyć na wciągającą opowieść, która będzie w przystępny sposób wyjaśniać nurtujące Was zagadnienia.

Zdaję sobie sprawę, iż składam na swoje barki naprawdę wielki obowiązek i wielkie wyzwanie, jednak właśnie dlatego jestem szalenie zmotywowany by swoje dzieło kontynuować jak najdłużej. Pragnę, by Android stał się Wam bliższy, chociażby o jeden mały krok. Już sam fakt, że zechcecie nauczyć się czegoś będzie moim osobistym sukcesem.

Ktoś może powiedzieć, że tematyka mojego cyklu zawarta jest na Naszym forum, i wystarczy tylko poczytać, by zrozumieć. A ja na to odpowiem już teraz: to prawda, na forum jest sporo materiałów o modyfikacjach, aczkolwiek czytanie o pojęciach, o których użytkownik chce dowiedzieć się nieco więcej, a które to są opisane wyjątkowo ciężkim językiem, nie sprzyja ani przybywaniu chęci do zabawy ani edukacji o mobilnych technologiach. Jako dość doświadczony użytkownik forum wiem, że niektóre tematy po prostu odstraszają od czytania jak i rozpoczęcia ryzykownych operacji na naszych smartfonach. Ja chcę dać szansę nie tylko zmodyfikować, ale też poznać zasadę działania. Może właśnie dzięki temu więcej osób nie będzie się panicznie bało dotknąć swojego telefonu i przenosić go na wyższy poziom wydajności.

Przechodząc do sedna naszego dzisiejszego odcinka należy stwierdzić, że aby zrozumieć pewne sprawy i czerpać radość z odkrywania Androida na nowo, należy postępować w określonej kolejności. Nie można przecież tłumaczyć komukolwiek przebiegu bitwy pod Grunwaldem, gdy ten nie ma bladego pojęcia kim byli Krzyżacy. Ja, mając to na uwadze, zamierzam najpierw Was zapoznać z podstawami – które oczywiście dla wielu mogą wydać się banalne. Jeżeli zrozumiecie jak system funkcjonuje „od spodu”, nauka następnych ciekawostek będzie o wiele łatwiejsza.

Chcę zaznaczyć, że w podawanych przykładach często będę odnosił się do posiadanego przeze mnie dzieła skośnookich robotników zza Wielkiego Muru – czyli ZTE Blade. Nie zabraknie również odniesień do innych urządzeń, gdy sytuacja będzie tego wymagała.

W dzisiejszej wyprawie wybieramy się do głębin systemu, by poznać podstawy na jakich on sie opiera. Zbadamy pamięć wewnętrzną telefonu, obalimy także kilka mitów z nią związanych. Pora poznać nasz pojazd, zatem zapraszam na przyjęcie pożegnalne przed wielką ekspedycją!

Zapewne przed zakupem telefonu bardzo wielu z Was przyglądała się specyfikacjom w poszukiwaniu cennej informacji o ilości „pamięci wewnętrznej”. Widząc tam np. 512 MB, myśleliście prawdopodobnie że taka ilość na aplikacje i dzwonki z pewnością wystarczy, pomni starszych telefonów bez systemu operacyjnego. W głowie mieliście być może stwierdzenia, że „pamięć ROM to moja pamięć!”

memory_info_android

Po zakupie okazuje się że na dane własne mamy np. niecałe 200 Mb, i rośnie wzburzenie że Android jest o kant… niefajny. Tutaj na wielu z Was czeka już pierwsza niespodzianka…

Pamięć ROM nie równa się pamięci wewnętrznej telefonu przeznaczonej dla użytkownika!

„Nie??? O co kaman?”

android-partitions-what

Dziś dowiecie się wszystkiego (no prawie), co jest związane z pamięcią Waszego smartfonu.

Wyobraźcie sobie pyszny, śmietanowy tort, który macie przed sobą. Tez macie ochotę go zjeść? Ja mam, ale to nieco później. Wyobraźmy sobie, że ten tort to pamięć ROM naszego sprzętu.

Pamięć ROM to rodzaj pamięci, z którego zasadniczo dane można tylko odczytywać – jednakże tylko zasadniczo. W systemie Android możemy na niej także dane zapisywać, posługując sie pewnymi mechanizmami – ale o tym później. Pamięć ROM w telefonach z Zielonym OS’em stanowi całą pamięć NAND znajdującą się w urządzeniu.

Kontynuując, ten cały tort jest pamięcią ROM naszego smartfonu. Nie możemy wziąć go jednak w całości dla siebie, musimy się nim podzielić. Goście zapewne także by coś zjedli, prawda? Kroimy zatem nasze pyszne ciasto na kilka kawałków. Nie każdy jest równy, ponieważ jesteśmy nieco złośliwi i dla siebie zostawiamy najwięcej.

android_cake

Tak samo w Androidzie, pamięć ROM, będąca całością wbudowanej pamięci, jest dzielona na części, by zapewnić odpowiednia separację ważnych elementów urządzenia. Te poszczególne części zwane są partycjami.

Partycja to wydzielony z całości dysku fragment, widziany przez system jako oddzielny folder. Może on być sformatowany w różnych systemach plików, zależnie od potrzeby czy przeznaczenia. Karty pamięci najczęściej są partycjami FAT32 bądź FAT16, zaś najpopularniejszą partycją linuksową jest EXT – o której dowiemy się więcej w specjalnym odcinku. Stworzenie kilku partycji w pamięci ROM nie tylko pozwala na dobre rozmieszczenie elementów systemu, ale też zabezpiecza nas w wypadku np. uszkodzenia systemu plików na jednej z nich.

Partycje w systemie Android, tak jak i w Linuksie, muszą być do systemu zamontowane. Co to oznacza? Wyobraźmy sobie lampy, z których każda co jasne ma wtyczkę. Żadna z nich nie zaświeci się, jeżeli nie zostanie podłączona do gniazdka. Podobnie jest z partycjami – jeśli chcemy by system zobaczył partycję, musimy ją „podłączyć” do systemu katalogów, co nazywamy montowaniem partycji. Odmontowana partycja jest po prostu niewidoczna dla samego systemu (ale jądro ją rzecz jasna widzi, aby móc ją ewentualnie zamontować).

Jakie zatem partycje możemy wyróżnić w naszych sprzętach?

Pierwszą z nich jest partycja /boot. Ten stosunkowo niewielki fragment pamięci jednocześnie przechowuje jedne z najważniejszych fragmentów systemu – to tutaj znajduje się kernel, czyli jądro systemu Linux. Czym dokładnie jest dowiecie sie niebawem, dziś chcę byście zrozumieli co gdzie się znajduje i jak wygląda szkielet.

Kolejna partycją jest /cache. Jeśli może kojarzycie tę nazwę z przeglądarkami, to macie rację. Zasada działania jest podobna. To na tej partycji przechowywane są pliki tymczasowe i pamięć podręczna aplikacji – np. gdy ściągamy program z Marketu czy surfujemy po sieci. Na niej zapisywany jest stan naszej pracy w aplikacji.

Trzecia partycją, która z punktu widzenia przeciętnego użytkownika jest najważniejsza, jest partycja /data. Co to za fragment pamięci telefonu? Otóż właśnie to jest miejsce, które jest faktyczną „pamięcią wewnętrzną” urządzenia przeznaczoną na aplikacje i ich dane. To od wielkości tej partycji zależy, ile będziemy mogli zainstalować aplikacji. Tutaj przechowywane są wszelkiej maści dane użytkownika, takie jak kontakty, SMSy czy zakładki. Jeżeli w ustawieniach telefonu wybierzemy opcję przywracania ustawień fabrycznych, to wówczas zawartość tej partycji jest czyszczona. Dzięki temu znikają wszelkie ślady użytkowania przez nas systemu.

Na tej partycji właśnie znajduje się kilka folderów, które warto poznać:

-folder /data/app/

To tutaj znajdują się wszystkie zainstalowane przez nas programy w postaci plików *.apk. Np. najpopularniejsza chyba przeglądarka na Androida – Opera Mini – znajdzie się tutaj po instalacji jako plik com.opera.mini.android.apk

-folder /data/app-private/

Tutaj znajdziemy zainstalowane płatne aplikacje

-folder /data/data/

Jest to folder z danymi aplikacji, czyli dla przykładu jej ustawieniami. Są one przechowywane w folderach o analogicznych nazwach co nazwy zainstalowanych aplikacji, czyli dla Opery Mini taki folder będzie wyglądał następująco:

/data/data/com.opera.mini.android/

-folder /data/dalvik-cache/

Tutaj przechowywane są pliki z kodem dla maszyny wirtualnej, uruchamiającej aplikacje, w formacie *.dex. Plik dla Opery będzie taki:

[email protected]@[email protected]

W jego nazwie zawarta jest lokalizacja aplikacji i jej nazwa.

Pliki te są używane przez system by aplikacje mogły uruchamiać się znacznie szybciej, ponieważ nie muszą być wczytywane bezpośrednio z plików *.apk, pobierany jest tylko kod wykonywalny.

-folder /data/system/

Tutaj znaleźć można pliki związane z konfiguracją kont Google, czy te informujące Androida w jaki sposób zużywana była energia. To tutaj znajduje się legendarny już plik „batterystats.bin”

Następną partycją, która dziś praktycznie wyszła z użytku, jest partycja /misc. Znajdują sie na niej przeważnie pliki konfiguracyjne operatora czy trybu USB. Nie jest ona istotna z naszego punktu widzenia, czyli przy niej „dłubać” nie będziemy.

Kolejną partycją jest /splash – na niej znajduje się tzw. BOOTLOGO, czyli pierwszy obraz który widzimy przy włączaniu telefonu, a dokładniej przy wczytywaniu kernela. Jeśli telefon jest brandowany, mogą występować dwie takie partycje o podobnym nazewnictwie, np. /splash i /splash1. Nie są one dostępne dla użytkownika w eksploratorach plików na włączonym systemie.

Partycją szalenie istotną w modyfikowaniu naszych smartfonów jest partycja /system. Jak już sama nazwa nam sugeruje, to tutaj składowany jest cały system Android. Pamiętać należy, że system Android a jądro to dwie różne rzeczy, które łączą się dopiero w zakresie wspólnego działania – zatem możemy zmienić wersję Androida, nie naruszając kernela. Ten temat jeszcze dokładniej omówimy.

Na systemowej partycji znajdziemy zatem wszystko, co potrzebne jest do działania naszego Zielonego Ludzika. Znajdują się tu systemowe aplikacje, czcionki, elementy graficzne, domyślne dzwonki, pliki konfiguracyjne systemu czy biblioteki odpowiedzialne za gry i programy. Warto zatem przyjrzeć się najważniejszym folderom na tej jakże ważnej części pamięci naszego smartfonu. Oto i one:

/system/app/

Znajdziemy tutaj aplikacje wbudowane w system, których będziemy mogli używać od razu po zakupie telefonu czy wgraniu nowego systemu. To tutaj znajda się aplikacje od Google’a, programy od operatora czy dodatki producenta. Dane tych programów są przetrzymywane na partycji /data/ – co jest bardzo istotne, ponieważ one także zabierają nam pamięć na nasze programy – jednak z tym nic nie zrobimy, pomijając oczywiście modyfikacje.

/system/bin/

W tym miejscu znajdziemy wykonywalne binaria, używane przez system do różnych czynności. Dla szarego Kowalskiego nie ma ten folder znaczenia, ale tych co lubią „grzebać” na pewno zainteresuje. Zajmiemy sie nim w przyszłości.

/system/etc/

Ukryte są w nim konfiguracje dla np. GPS czy WiFi, oraz pliki określające pozwolenia aplikacji.

/system/fonts/

A jakże, w nim znajdziemy czcionki naszego telefonu, których nie omieszkamy zmienić.

/system/framework/

To, jak wygląda nasz system i jak działa, jest określone w plikach w tym miejscu. Przyda się nam ta wiedza przy modyfikowaniu „tematu” naszego urządzenia.

/system/lib/

Jak nazwa wskazuje, przechowywane są tu biblioteki służące np. renderowaniu grafiki czy dekodowaniu dźwięku. Jeśli któraś z nich jest źle skompilowana, może w znaczący sposób obniżyć wydajność lub spowodować szybkie zużywanie energii przez telefon.

/system/media/

Znajdziemy w nim wbudowane dźwięki dzwonka czy powiadomień, często także tutaj znajdziemy animację startową urządzenia w postaci pliku „bootanimation.zip”

/system/xbin/

To tutaj przechowywane są pliki wiążące się z administratorem systemu, czyli popularnym „rootem”. Więcej dowiecie się w najbliższych wyprawach.

Na systemowej partycji znajduje się również osławiony plik „build.prop” – w nim zawarte są najważniejsze ustawienia Androida. Odpowiednio je zmieniając, możemy zmienić bardzo wiele jeśli chodzi o wydajność czy funkcjonalność. Zlokalizowany jest jako /system/build.prop. Poświęcimy mu na pewno całkiem sporo czasu.

Czy Wy nie czujecie lekkiego zmęczenia tą dzisiejszą podróżą? Na pewno porcja nowych doświadczeń jest spora, więc zróbmy chwilowy postój. Nie ma to jak wrzucić na luz, więc może opowiem Wam jakiś kawał? OK, proszę. Nie od dziś wiadomo, że śmiech to zdrowie, a chłodna głowa i banan od ucha do ucha pomogą nam w niejednych modyfikacjach.

Ponieważ nie ma to jak pośmiać sie z Apple (:P), no to jedziemy:

„iBreasts – Firma Apple ogłosiła dzisiaj wprowadzenie na rynek urządzenia pozwalającego na przechowywanie i odtwarzanie muzyki w implantach piersi kobiecych. 
iBreast ma kosztować w granicach 2499 – 2999 zł. 
Wynalazek ten uważany jest za przełomowy ponieważ kobiety zawsze narzekają, że faceci gapią się na ich piersi zamiast ich słuchać.”

No i najnowocześniejsze urządzenie dla fanów jabłuszka lubiących po całodniowych zachwytach nad swoją firmą wreszcie podążyć nie za Stevem Jobsem, a drogą wyznaczoną niegdyś pieszo przez króla:

the-itoilet

Po tej dawce humoru przejdźmy dalej do rozdzielania naszego tortu, z pewnością można go jeszcze lepiej pokroić – jeszcze kilka pomiotów nie pogardzi swoim kawałkiem pamięci ROM.

Jednym z nich jest partycja /recovery. Na niej zapisany jest mechanizm służący do operacji na innych partycjach podczas gdy system jest wyłączony. Z angielskiego zapewne wielu z Was wie, że „recover” znaczy przywracać, naprawiać – i właśnie między innymi do tego służy to narzędzie. Zajmiemy się nim dość szczegółowo w jednym z najbliższych spotkań. Partycji tej nie zobaczymy w żadnym menedżerze plików na włączonym Androidzie, poza konsolą.

Wszystkie te, przytoczone przeze mnie partycje składają się na wewnętrzną pamięć naszego telefonu. Po dodaniu wielkości każdej z nich, otrzymamy wynik dość zbliżony do tego, jaki jest podawany w specyfikacjach smartfonu jako pamięć ROM. Każda partycja jest kawałkiem naszego tortu, a wszystkie połączone razem tworzą całość wbudowanej pamięci, tworzą cały tort. Widzicie jakie to proste?

partition_info

Wymienione zostały wszystkie partycje, które są właściwe dla samego, czystego Androida. Zapomnieć nie można jednak o jeszcze jednej, ważnej partycji – o karcie pamięci. Karta pamięci jest rzecz jasna niezwiązana w żaden sposób z pamięcią wewnętrzną telefonu. Jeżeli w urządzeniu umieścimy kartę SD, zostanie ona pokazana w systemie jako partycja /sdcard oraz /mnt/sdcard – ponieważ montowana jest w 2 miejscach.

Wiele telefonów ma także wydzielone w swojej pamięci ROM miejsce na dane użytkownika, takie jak muzyka czy filmy – pełni ono rolę wbudowanego dysku twardego. Często jest ono w systemie podmontowane jako właśnie /sdcard, przez co występują czasami problemy z niektórymi grami, które wymagają zewnętrznej karty SD, bądź kłopotliwe jest kopiowanie plików na samą kartę. W takich telefonach karta pamięci SD jest montowana jako /sdcard/external_SD/. Taką sytuację mamy właśnie w Samsungu Galaxy S.

Ważną informacją jest jeszcze, w jakim trybie pracuja te partycje, bo jest to istotne przy ich modyfikowaniu. Wyróżniamy dwa podstawowe tryby zamontowania partycji: tylko do odczytu (read-only, RO lub R) oraz zarówno do odczytu jak i zapisu (read-write, czyli RW). W pierwszym przypadku nic nie zapiszemy w systemie plików, ponieważ sposób jego zamontowania na to nie zezwoli. Musimy podmontować partycję raz jeszcze w trybie RW, o czym będzie jeszcze nie raz wspomniane.

W trybie RO działa partycja /system, zatem bez uprawnień administratora i przemontowania nie będziemy mogli na niej niczego zmienić. W trybie RW działają partycje /data, /cache czy /sdcard.

terminal_info

Na powyższym zrzucie ekranu widzimy, że partycja /system ma znacznik RW – ponieważ wcześniej jedną z odpowiednich aplikacji w taki sposób ją zamontowałem. Normalnie jest ona dostępna w trybie RO.

Naszego pysznego tortu nie możemy przecież postawić ot tak bezpośrednio na stole – musimy gdzieś go umieścić, tak by był do niego łatwy dostęp i on sam elegancko się prezentował. Większość użyłaby do tego patery, a zatem i my tak postąpimy. Tort umieszczony na tym naczyniu od razu zyskuje na atrakcyjności i jest łatwiej uszczknąć sobie któryś z jego kawałków dla siebie.

Tak samo jest i we wszystkich systemach linuksowych, a zatem i w Androidzie. Tutaj nasza paterka nosi miano drzewa katalogów, do którego zamocowana jest cała struktura systemu plików. Każda partycja jest mocowana do drzewa, na partycjach mocowane są foldery, w folderach natomiast pliki. Mechanizm ten jest bardzo przejrzysty i ułatwia pracę.

Najważniejszym elementem drzewa jest jego wierzchołek, do którego są przypinane następne elementy. Inną nazwą jego jest „root” – ma to związek z administrowaniem katalogami w Linuxie. Jest on oznaczony jako /. Najlepiej zobrazuje to przykład prawdziwego drzewa – dajmy na to jabłoni, której owoce wykorzystaliśmy w torcie.

Pień drzewa jest wierzchołkiem drzewa katalogów. Do niego są zamocowane konary, czyli partycje naszego smartfonu. Do grubych konarów zamocowane są mniejsze gałęzie, czyli foldery. Z nich zwisają smakowite jabłka, czyli oczywiście pojedyncze pliki.

Jak to wygląda w praktyce i jak ujawnia się użytkownikowi? Zobaczmy.

Mamy do dyspozycji plik z muzyką, i widzimy do niego ścieżkę:

/mnt/sdcard/muzyka/android/kocham_android_com_pl.mp3

Widać jak na dłoni wszystkie elementy:

/ – pierwszy element drzewa, czyli wierzchołek
/mnt/sdcard/ – partycja, w tym przypadku karta pamięci (występuje też czasem lokalizacja /sdcard/xxx, zeleżnie od programu i sposobu jego interpretacji)
muzyka/ – folder
android/ – folder
kocham_android_com_pl.mp3 – plik

Poniższy rysunek co prawda przedstawia drzewo Linuxowe, ale zasada działania jest identyczna:

systemplikow

Prawda że to proste? Od dziś raczej nie zgubicie się w tym istnym labiryncie… tfu… to chyba bardziej przypomina las 😉

W wielu poradnikach dotyczących modyfikacji można zetknąć sie ze sformułowaniem takim jak: „skopiuj ten plik do /data/data/xxx/” – wielu z was kopiuje taki plik do folderu /data/, ale na karcie pamięci. Wtedy ścieżka wygląda zupełnie inaczej – /sdcard/data/xxx/. Znacząca różnica, nieprawdaż? Warto znać drzewo katalogów zanim cokolwiek zaczniemy robić z telefonem.

Nasze dzisiejsze spotkanie zmierza niestety nieuchronnie do końca, warto więc wyciągnąć z niego kilka istotnych wniosków:

-usuwanie aplikacji systemowych NIE SŁUŻY zwiększeniu ilości dostępnej pamięci na programy użytkownika

-przywracanie ustawień fabrycznych usuwa tylko dane z partycji /data, czyli wbrew obawom niektórych początkujących użytkowników nie „usunie Androida” czy nie sformatuje karty SD

-pamięć ROM nie równa się pamięci dostępnej dla użytkownika

-partycja /data służy tylko i wyłącznie przechowywaniu aplikacji – nie trzymamy tu dzwonków czy muzyki

Warto zauważyć także fakt, że nagminnie w Androidzie stosowany jest mechanizm podobieństwa katalogów na różnych partycjach – stąd np. system widzi dzwonki znajdujące się zarówno w /system/media/ringtones/ jak i /sdcard/media/ringtones/. Sytuacja wygląda identycznie też w przypadku folderów z aplikacjami: /system/app i /data/app/. Zauważacie podobieństwo?

Mam nadzieję, iż z pierwszego odcinka naszej podróży uszczkniecie choć trochę dla siebie, i że dzięki niemu zrozumiecie podstawy na jakich opiera sie Android. Zachęcam do wytrwałości – ponieważ każdy, kto czegoś się tu nauczy, posiądzie coś jeszcze, mianowicie przeświadczenie, iż będąc zupełnie zielonym, przy odrobinie wysiłku wszystko da się zrozumieć i wszystko da się zrobić. Tej wiedzy nie używa się bynajmniej tylko na naszym portalu – tej wiedzy wielu brakuje w codziennym życiu. Jakże często słyszymy „siłę argumentu” w słowach „bo nie umiem”.

W kolejnym odcinku poznamy podstawowe dla Androida pliki, ich rozszerzenia, a także przejrzymy słownik pojęć związanych z systemem.

Miłej zabawy w zrywaniu jabłek i dzieleniu tortu!

Do zobaczenia za tydzień!






Przewiń stronę, by przeczytać kolejny wpis
x