Czy istnieje sposób na uruchomienie Pythona na Androidzie?


2093

Pracujemy nad wersją S60 i ta platforma ma ładny interfejs API w języku Python.

Jednak nie ma nic oficjalnego w Pythonie na Androida, ale skoro istnieje Jython , czy istnieje sposób, aby pozwolić wężowi i robotowi współpracować?

Odpowiedzi:


1059

Jednym ze sposobów jest użycie Kivy :

Biblioteka Python typu open source do szybkiego tworzenia aplikacji korzystających z innowacyjnych interfejsów użytkownika, takich jak aplikacje wielodotykowe.

Kivy działa na systemach Linux, Windows, OS X, Android i iOS. Możesz uruchomić ten sam kod [python] na wszystkich obsługiwanych platformach.

Aplikacja Kivy Showcase


63
Jeśli używasz Kivy, oto narzędzie, które pomoże Ci spakować projekt do pliku APK: github.com/kivy/python-for-android
gdw2

17
W zeszłym tygodniu bawiłem się z Kivy, próbując napisać grę. Ich główni programiści bardzo szybko odpowiedzieli na pytania na IRC, jednak jeśli zaprogramowałeś GUI zanim Kivy sprawi, że będziesz mówić dość WTF. Kilka przykładów nieudokumentowanych rzeczy, które były dla mnie dziwne: wszystkie widżety otrzymują każde zdarzenie on_touch_down, nawet jeśli zdarzenie miało miejsce poza ich regionem, żaden widget nie ma metody draw (), prawie wszystko dzieje się poprzez niestandardowy wzorzec obserwatora na niestandardowych właściwościach, które stworzyli ( zauważ, że dzielą one nazwę z własnością Pythona, ale nie są takie same)
Trey Stout

7
@Trey: A co z rzeczami niezwiązanymi z GUI? Czy są jakieś ograniczenia dotyczące używania modułów Pythona? Co z dostępem do funkcji specyficznych dla Androida, takich jak możliwość czytania wiadomości, dodawania powiadomień, pracy w tle, robienia zdjęć, czytania listy kontaktów, określania lokalizacji GPS itp.?
Tadeck

7
A teraz jest też obsługa iOS!
rubik

16
Czy teraz, prawie rok później, wsparcie jest lepsze? Czy wprowadzono jakieś znaczące ulepszenia?
TankorSmash,

346

Pojawił się także nowy projekt Android Scripting Environment (ASE / SL4A). Wygląda niesamowicie i ma pewną integrację z natywnymi komponentami Androida.

Uwaga: już nie w ramach „aktywnego rozwoju”, ale niektóre widelce mogą być.


70
To prawda, ale muszą mieć zainstalowany ASE, nie jest to rozwiązanie, które pozwala napisać aplikację na Androida w Pythonie bez niczego już zainstalowanego (normalny użytkownik to wszystko „wtf to jest ASE?)
Stuart Axon

20
Ponadto ASE jest środowiskiem ograniczonym; nie możesz pisać pełnowymiarowych aplikacji na Androida, nawet jeśli ASE jest wstępnie zainstalowany. Zobacz stackoverflow.com/questions/2076381
Sridhar Ratnakumar

10
Myślę, że został przemianowany na SL4A.
Vanuan

9
Możesz pisać aplikacje, pakować je, a nawet sprzedawać w Play Store, jeśli chcesz, dzięki SL4A teraz dni. Pojawiło się dobrze, ponieważ zamieszczono powyższe komentarze. Jeśli chcesz Python na Androida, to PY4A, który działa na SL4A, jest prawdopodobnie najlepszym wyborem.
Carl Smith,

2
Potwierdzam, SL4A pozwala teraz na pisanie pakietów aplikacji gotowych do użycia, próbowałem z
perlem,

216

Tak! : Środowisko skryptów Androida

Przykład za pośrednictwem Matta Cuttsa za pośrednictwem SL4A - „oto skaner kodów kreskowych napisany w sześciu liniach kodu Pythona:

import android
droid = android.Android()
code = droid.scanBarcode()
isbn = int(code['result']['SCAN_RESULT'])
url = "http://books.google.com?q=%d" % isbn
droid.startActivity('android.intent.action.VIEW', url)

46
s / YES / meh. może / ... to jest bardzo ograniczone. cokolwiek graficznego lub wielodotykowego? duże NIE.
gcb

2
@ gcb nie możesz używać normalnego zestawu widżetów dla Androida, ale możesz użyć „widoków internetowych” (na przykład tego, czego używa natywna aplikacja Gmail).
gdw2

28
grał w golfa:import android as a;d=a.Android();d.startActivity('android.intent.action.VIEW',"http://books.google.com?q=%d"%int(d.scanBarcode()['result']['SCAN_RESULT']))
Alex L

12
@ gdw2, z pewnością natywna aplikacja Gmail używa WebView tylko do analizowania wiadomości e-mail, a nie do rzeczywistego interfejsu użytkownika. To sprawia, że ​​porównanie jest nieco absurdalne.
Veselin Romić

88

Podzbiór Pygame dla Androida

Pygame to silnik gier 2D dla Pythona (na komputery), który jest popularny wśród nowych programistów. Pygame Podzbiór dla Androida opisuje się jako ...

... port podzbioru funkcjonalności Pygame na platformę Android. Celem projektu jest umożliwienie tworzenia gier na Androida i ułatwienie przenoszenia gier z platform typu PC na Androida.

Przykłady obejmują kompletną grę spakowaną jako APK, co jest dość interesujące.


4
Kilka aspektów zostało uszkodzonych na moim Droid X (przyciski lub ekran dotykowy, nie pamiętam), więc nie dotarłem zbyt daleko z tą trasą.
gdw2,

78

Kompilacja krzyżowa i Ignifuga

Mój blog zawiera instrukcje i łatkę do kompilacji krzyżowej Python 2.7.2 dla Androida.

Otworzyłem również źródłowy silnik gry Ignifuga . Jest oparty na Pythonie / SDL i kompiluje się na wiele różnych platform dla Androida. Nawet jeśli nie używasz go do gier, możesz uzyskać przydatne pomysły z kodu lub narzędzia konstruktora (o nazwie Schafer , od Tima ... wiesz, kto).


4
Imponujący. +1 za to. Nie zaakceptowano, ponieważ nie można w tym napisać niczego publicznego.
e-satis

1
Jeśli masz na myśli, że nie możesz robić z nim aplikacji graficznych, zdecydowanie możesz oczywiście potrzebować więcej pracy. Właściwie używam tego portu w połączeniu z SDL 1.3, przejście z interpretera Pythona do interaktywnej aplikacji nie jest łatwe, ale można to zrobić.
gabomdq

77

Warstwa skryptowa dla Androida

SL4A robi to, co chcesz. Możesz łatwo zainstalować go bezpośrednio na swoim urządzeniu z ich strony i nie potrzebujesz roota.

Obsługuje wiele języków. Python jest najbardziej dojrzały. Domyślnie używa Pythona 2.6, ale zamiast niego można użyć portu 3.2 . Użyłem tego portu do wszelkiego rodzaju rzeczy na Galaxy S2 i działało dobrze.

API

SL4A zapewnia port swojej androidbiblioteki dla każdego obsługiwanego języka. Biblioteka zapewnia interfejs do bazowego interfejsu API Androida za pośrednictwem jednego Androidobiektu.

from android import Android

droid = Android()
droid.ttsSpeak('hello world') # example using the text to speech facade

Każdy język ma prawie taki sam interfejs API. Możesz nawet używać JavaScript API w przeglądarkach internetowych.

let droid = new Android();
droid.ttsSpeak("hello from js");

Interfejsy użytkownika

W przypadku interfejsów użytkownika masz trzy opcje:

  • Za pomocą interfejsu API można łatwo korzystać z ogólnych, rodzimych dialogów i menu. Jest to dobre w przypadku dialogów potwierdzających i innych podstawowych danych wejściowych użytkownika.
  • Możesz także otworzyć przeglądarkę internetową z poziomu skryptu Python, a następnie użyć HTML5 jako interfejsu użytkownika. Gdy korzystasz z widoków internetowych z Pythona, możesz przekazywać wiadomości tam iz powrotem, między widokiem internetowym a procesem Python, który go zrodził. Interfejs użytkownika nie będzie macierzysty, ale nadal jest dobrą opcją.
  • Istnieje pewne wsparcie dla rodzimych interfejsów użytkownika Androida, ale nie jestem pewien, jak dobrze to działa; Po prostu nigdy tego nie użyłem.

Możesz łączyć opcje, aby mieć widok główny interfejsu głównego i nadal korzystać z rodzimych dialogów.

QPython

Istnieje projekt innej firmy o nazwie QPython . Opiera się na SL4A i wrzuca inne przydatne rzeczy.

QPython zapewnia ładniejszy interfejs użytkownika do zarządzania instalacją i zawiera mały edytor kodu z ekranem dotykowym, powłokę Python i powłokę PIP do zarządzania pakietami. Mają także port Python 3. Obie wersje są dostępne bezpłatnie w Sklepie Play. QPython zawiera również biblioteki z wielu Pythona w projektach na Androida, w tym Kivy, więc nie jest to tylko SL4A.

Zauważ, że QPython wciąż rozwija swój widelec SL4A (choć nie jest to szczerze mówiąc). Sam główny projekt SL4A jest prawie martwy.

Przydatne linki


1
Czy możesz użyć dowolnego z nich, aby uruchomić skrypt Pythona z terminala lub zadania? Nie mogę znaleźć sposobu :(
Pitto

1
Możesz uruchomić skrypt SL4A z Tasker. Na tej stronie znajduje się kilka przykładów z fragmentami Pythona uruchamianymi z Taskera. Jest to jednak zupełnie inne pytanie.
Carl Smith,

77

Jako miłośnik Pythona i programista Androida z przykrością stwierdzam, że nie jest to dobra droga. Istnieją dwa problemy:

Jednym z problemów jest to, że narzędzia programistyczne dla Androida mają znacznie więcej niż tylko język programowania. Wiele grafik na Androida wymaga plików XML do konfiguracji wyświetlania, podobnie jak HTML. Wbudowane obiekty Java są zintegrowane z tym układem XML i jest to o wiele łatwiejsze niż pisanie kodu, aby przejść z logiki do bitmapy.

Innym problemem jest to, że G1 (i prawdopodobnie inne urządzenia z Androidem w najbliższej przyszłości) nie są tak szybkie. Procesory 200 MHz i pamięć RAM są bardzo ograniczone. Nawet w Javie musisz wykonać przyzwoitą ilość przepisywania, aby uniknąć tworzenia większej liczby obiektów, jeśli chcesz, aby aplikacja była idealnie płynna. Python będzie przez pewien czas zbyt wolny na urządzeniach mobilnych.


48
Na telefonie z Androidem nie ma ani jednego słowa Java, jest ono kompilowane do kodu bajtowego podczas procesu pakowania. Szybkość nie jest problemem: Google może zapewnić narzędzia wytwarzające kod bajtowy z kodu pythonowego (np. Dla Jython). BTW, Dalvik nie jest maszyną wirtualną Java, więc nie chodzi o Java VS Python.
e-satis

6
Kod bajtowy JAVA nadal musi być przetwarzany przez maszynę JVM, a język Java i tak wymaga modułu wyrzucania elementów bezużytecznych. Rzeczywista prędkość może pochodzić tylko z C ++.
LtWorf

19
@Touzen 2 lata później uruchomiliśmy teraz procesor Intel Atom lub ośmiordzeniowy. ;)
Rohan Kandwal

2
Ze względu na różnicę w mocy, jaką mogą pobierać, telefony zawsze będą o rząd wielkości wolniejsze niż komputery stacjonarne. Nie rezygnuj jednak z Pythona na urządzenia mobilne, ponieważ zazwyczaj tylko ułamek kodu jest odpowiedzialny za pracę wymagającą dużego procesora, a tę część można zoptymalizować, przepisując go w innym języku.
Jewgienij Siergiejew

2
Przy okazji, kiedy Google wypycha Kotlina - który jest dość nieznanym językiem dla większości użytkowników - jasne jest, że można obsługiwać inne języki niż Java (jestem programistą Java i fanem Pythona). Myślę więc, że odpowiedź jest raczej polityczna niż praktyczna.
Alex

49

Kivy

Chciałem dodać do tego, co @JohnMudd napisał o Kivy. Minęły lata od opisanej przez niego sytuacji, a Kivy ewoluował znacznie.

Moim zdaniem największym punktem sprzedaży Kivy jest kompatybilność między platformami. Możesz kodować i testować wszystko za pomocą dowolnego środowiska pulpitu (Windows / * nix itp.), A następnie spakować aplikację na wiele różnych platform, w tym Android, iOS, MacOS i Windows (chociaż aplikacje często nie mają natywnego wyglądu).

Dzięki własnemu językowi KV Kivy możesz łatwo kodować i budować interfejs GUI (jest to tak jak Java XML, ale zamiast TextView itp. KV ma własne ui.widgetspodobne tłumaczenie), co moim zdaniem jest dość łatwe do przyjęcia.

Obecnie Buildozer i Python-for-Android to najbardziej zalecane narzędzia do tworzenia i pakowania aplikacji. Wypróbowałem je oba i mogę zdecydowanie powiedzieć, że dzięki nim tworzenie aplikacji na Androida w Pythonie jest dziecinnie proste. Ich przewodniki są również dobrze udokumentowane.

iOS to kolejny duży punkt sprzedaży Kivy. Możesz użyć tej samej bazy kodu z kilkoma zmianami wymaganymi za pomocą narzędzi kivy-ios Homebrew, chociaż Xcode jest wymagany do kompilacji przed uruchomieniem na ich urządzeniach (AFAIK Symulator iOS w Xcode obecnie nie działa dla kompilacji architektury x86) . Istnieją również pewne problemy z zależnościami, które należy ręcznie skompilować i bawić w Xcode, aby uzyskać udaną kompilację, ale nie byłoby to zbyt trudne do rozwiązania, a ludzie w Grupie Kivy Google też są naprawdę pomocni.

Biorąc to wszystko pod uwagę, użytkownicy z dobrą znajomością języka Python nie powinni mieć problemu z szybkim zapoznaniem się z podstawami.

Jeśli używasz Kivy do poważniejszych projektów, możesz uznać istniejące moduły za niezadowalające. Istnieje jednak kilka praktycznych rozwiązań. Dzięki (trwającemu) pyjnius dla Androida i pyobjus użytkownicy mogą teraz uzyskać dostęp do klas Java / Objective-C, aby kontrolować niektóre natywne interfejsy API.


Właśnie pobrałem Kivy z jego strony. Pokazuje obsługę Python 3.4 32 i 64-bit oraz działającą demonstrację wprowadzania dotykowego.
codeReview

1
@codeReview, używam Kivy tylko z Python2 i nie mam doświadczenia w Python3, czy wszystko działa płynnie?
Anzel,

Mam nadzieję, że niedługo dam wam znać. Ale nie mam doświadczenia z Pythonem poza plikami .py powłoki poleceń CPython 3.4 do szybkiego rozwiązywania problemów obliczeniowych lub algorytmicznych. To będzie moja pierwsza aplikacja z graficznym interfejsem użytkownika. Musiałbym przeczytać więcej dokumentacji, aby zrozumieć język Kivy i uważnie śledzić kroki instalacji, więc wiem, jak zainstalować Kivi na moim wybranym IDE Pythona i pakować pakiet APK, aby przełączyć się na Androida. Jest to proces wieloetapowy, więc może nie być niewiarygodnie szybko, kiedy mogę powiedzieć.
codeReview

1
@codeReview, powodzenia w podróży. Jeśli jest to Twoja pierwsza aplikacja, zdecydowanie zalecamy użycie pliku .kv jako pliku układu. To jest jak plik yaml lub po prostu drzewo, aby zdefiniować widżety układu. Jeśli aplikacja obsługuje wiele ekranów / układy, użyj ScreenManagertej opcji, aby zaoszczędzić mnóstwo czasu. Radzę też przeczytać ich listę mailingową, grupę kompetentnych ludzi chętnych do pomocy.
Anzel,

1
@codeReview, zamiast uczyć się z aplikacji demonstracyjnej Kivy, możesz uzyskać więcej informacji, szukając niektórych istniejących aplikacji kivy i zobaczyć, jak ludzie zarządzają „widżetami” i wywołaniami zwrotnymi w scenariuszu w świecie rzeczywistym. Kivy wcale nie jest trudny do nauczenia, powiem o wiele łatwiej pod względem krzywej uczenia się niż powiedzmy, w Javie + Android lub celu-C + iOS
Anzel

40

Termux

Możesz użyć aplikacji Termux , która udostępnia środowisko POSIX dla Androida, aby zainstalować Pythona.

Zauważ, że apt install pythonzainstaluje Python3 na Termux. W przypadku Python2 musisz użyć apt install python2.


5
+1 dla Termux. Absolutnie cudowne środowisko do pracy. Świetny wybór pakietów w repozytoriach, przydatne skróty do przycisków głośności. To najbliższa rzecz do Debiana na telefonie, jaki kiedykolwiek znalazłem.
James

39

Nie w tej chwili i miałbyś szczęście, że wkrótce Jython zacznie działać. Jeśli planujesz rozpocząć programowanie teraz, lepiej byłoby na razie trzymać się Javy.


39

Używając SL4A (o którym już wspomniałem w innych odpowiedziach), możesz uruchomić w pełni rozwiniętą instancję web2py ( prawdopodobnie inne frameworki sieci python również są kandydatami). SL4A nie pozwala na tworzenie natywnych składników interfejsu użytkownika (przycisków, pasków przewijania itp.), Ale obsługuje WebView . WebView to w zasadzie nic innego jak przeglądarka internetowa w paski, skierowana na stały adres. Uważam, że natywna aplikacja Gmail używa WebView zamiast zwykłej trasy z widżetem.

Ta trasa miałaby kilka interesujących funkcji:

  • W przypadku większości frameworków internetowych w języku Python można faktycznie opracowywać i testować bez użycia urządzenia z Androidem lub emulatora Androida.
  • Jakikolwiek kod Pythona, który ostatecznie piszesz na telefon, można również umieścić na publicznym serwerze WWW z bardzo niewielkimi (jeśli w ogóle) modyfikacjami.
  • Możesz wykorzystać wszystkie zwariowane rzeczy internetowe: zapytanie, HTML5, CSS3 itp.

2
Cherrypy działa dobrze, z obsługą wsspy websocket. Butelka jest również w porządku w SL4A.
Carl Smith

33

QPython

Korzystam z aplikacji QPython . Jest bezpłatny i zawiera edytor kodu, interaktywny interpreter i menedżera pakietów, umożliwiając tworzenie i wykonywanie programów w języku Python bezpośrednio na urządzeniu.


2
Teraz qpython dodał obsługę Django! To wszystko, czego potrzebuję! Niesamowity!
swdev

27

Z witryny Python dla Androida :

Python dla Androida to projekt służący do tworzenia własnej dystrybucji języka Python, w tym modułów, które chcesz, i stworzenia aplikacji zawierającej język Python, biblioteki lib i aplikację.


1
@ e-satis: Dziękujemy za komentarz. Nie widzę odpowiedzi, którą powielam. Mogę tylko zgadywać, że uważasz, że PFA jest taki sam jak Kivy. Chociaż jest hostowany w ramach projektu Kivy, nie musisz nawet używać Kivy do korzystania z PFA.
gdw2

Sprawdź usuniętą odpowiedź @ tito w dolnym punkcie PFA. Dodatkowo, zainteresowanie PFA bez Kivy jest niewielkie, ponieważ jest to jedyny zestaw narzędzi, jaki masz.
e-satis,

To nie dlatego, że kivy jest obecnie jedynym dostępnym zestawem narzędzi (niektóre osoby pracują nad integracją innych), niż jest to duplikat. Rozważ inne opcje jako takie, a nie scal wszystkie w jeden post: |
tito

21

Chaquopy

Chaquopy to wtyczka do systemu kompilacji opartego na gradle w Android Studio. Koncentruje się na ścisłej integracji ze standardowymi narzędziami programistycznymi dla Androida.

  • Zapewnia pełne interfejsy API do wywoływania Java z Python lub Python z Java , umożliwiając programistom używanie dowolnego języka, który jest najlepszy dla każdego komponentu ich aplikacji.

  • Może automatycznie pobierać pakiety PyPI i wbudowywać je w aplikację, w tym wybrane pakiety natywne, takie jak NumPy.

  • Umożliwia pełny dostęp do wszystkich interfejsów API Androida z Pythona, w tym natywnego zestawu narzędzi interfejsu użytkownika ( przykładowa aktywność czysto Python ).

Jest to produkt komercyjny, ale jest darmowy do użytku typu open source i zawsze taki pozostanie.

(Jestem twórcą tego produktu.)



20

Oto niektóre narzędzia wymienione na oficjalnej stronie Pythona


W playstore znajduje się aplikacja o nazwie QPython3, której można używać zarówno do edycji, jak i uruchamiania skryptu python.

Link do sklepu internetowego


Kolejna aplikacja o nazwie Termux, w której możesz zainstalować Pythona za pomocą polecenia

pkg install python

Link do Playstore


Jeśli chcesz tworzyć aplikacje, istnieje Python Android Scripting Layer ( SL4A ) .

The Scripting Layer for Android, SL4A, is an open source application that allows programs written in a range of interpreted languages to run on Android. It also provides a high level API that allows these programs to interact with the Android device, making it easy to do stuff like accessing sensor data, sending an SMS, rendering user interfaces and so on.


Możesz także sprawdzić PySide dla Androida , który jest tak naprawdę powiązaniami Pythona dla Qt 4.


Istnieje platforma o nazwie PyMob, w której aplikacje można pisać wyłącznie w języku Python, a narzędzie do kompilacji (PyMob) konwertuje je w natywne kody źródłowe dla różnych platform.


Sprawdź także python-for-android

python-for-android is an open source build tool to let you package Python code into standalone android APKs. These can be passed around, installed, or uploaded to marketplaces such as the Play Store just like any other Android app. This tool was originally developed for the Kivy cross-platform graphical framework, but now supports multiple bootstraps and can be easily extended to package other types of Python apps for Android.


Wypróbuj Chaquopy A Python SDK dla Androida


Anddd ... BeeWare

BeeWare allows you to write your app in Python and release it on multiple platforms. No need to rewrite the app in multiple programming languages. It means no issues with build tools, environments, compatibility, etc.


2
używając Termuxa możesz również zainstalować Python 2 $ apt install python2
M.Hefny



12

Inną opcją, jeśli szukasz wersji 3.4.2 lub 3.5.1, jest to archiwum na GitHub.

Python3-Android 3.4.2 lub Python3-Android 3.5.1

Obecnie obsługuje Python 3.4.2 lub 3.5.1 oraz 10d wersję NDK. Może także obsługiwać 3.3 i 9c, 11c i 12

Fajnie, że po prostu go pobierasz, uruchamiasz make i dostajesz .so lub .a

Obecnie używam tego do uruchamiania surowego Pythona na urządzeniach z Androidem. Z kilkoma modyfikacjami w plikach kompilacji możesz także zrobić 64-bitowe wersje x86 i armeabi



9

Jeszcze jedną opcją wydaje się być pyqtdeploy, która cytuje dokumenty:

narzędzie, które w połączeniu z innymi narzędziami dostarczanymi z Qt umożliwia wdrażanie aplikacji PyQt4 i PyQt5 napisanych w Pythonie v2.7 lub Python v3.3 lub nowszym. Obsługuje wdrażanie na platformach stacjonarnych (Linux, Windows i OS X) oraz na platformach mobilnych (iOS i Android).

Według Wdrażania aplikacji PyQt5 na Androida za pośrednictwem pyqtdeploy i Qt5 jest ona aktywnie rozwijana, chociaż trudno jest znaleźć przykłady działających aplikacji na Androida lub samouczek, w jaki sposób skompilować wszystkie wymagane biblioteki do Androida. Warto jednak pamiętać o tym ciekawym projekcie!


6

Spójrz na BeeWare . W chwili udzielenia odpowiedzi na to pytanie jest wciąż na wczesnym etapie rozwoju. Jego celem jest możliwość tworzenia natywnych aplikacji za pomocą Pythona dla wszystkich obsługiwanych systemów operacyjnych, w tym Androida.


Jaka jest różnica w stosunku do Kivy? Jest to stabilny, przenośny, oparty na
pythonach GUI

5

Sprawdź enaml-native, który przyjmuje koncepcję React-Native i stosuje ją do Pythona.

Pozwala użytkownikom tworzyć aplikacje z natywnymi widżetami na Androida i zapewnia interfejsy API do korzystania z bibliotek Androida i Java z Pythona.

Integruje się również z Android-Studio i udostępnia kilka fajnych funkcji deweloperskich reagowania, takich jak ponowne ładowanie kodu i zdalne debugowanie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.