test dlugiego posta

Niekwestionowaną przewagą Androida nad iPhone OS jest jego otwartość. Google udostępnia kod źródłowy systemu i grzechem byłoby z tego nie skorzystać. Źródła pozwalają podpatrzeć pewne rozwiązania czy ale nie mogę też rozwiać wątpliwości co do działania API – warto, żeby każdy programista Androida miał je na swoim komputerze.Niestety nie są dostarczane wraz z SDK. Oto co zobaczymy w Eclipse przy próbie podejrzenia źródeł z android.jar:

Nie jest to miły dla oka widok. Instalację źródeł czas zacząć!

Kompletowanie źródeł Java API

Okazuje się, że zebranie źródeł API nie jest tak proste jak powinno być. Przede wszystkim trzeba wiedzieć, który branch repozytorium pobrać. Następnie należy wybrać odpowiednie pliki .java i ułożyć je w określonych katalogach, tak, by Eclipse nie miał problemów z odnalezieniem ich.

Dlatego przygotowałem krótki sposób – dla leniwych. Jeśli podane niżej źródła odpowiadają wersji SDK, której używasz, ściągnij archiwum i przejdz do instalacji źródeł w Eclipse:

Jeżeli wolisz wszystko wykonać samemu, najpierw musisz pobrać narzędzie git. Jest to najbardziej „trendy” program zarządzający źródłami, szczególnie w środowisku programistów Free Software i Open Source. Wersja dla Mac OS X znajduje się tu: http://code.google.com/p/git-osx-installer/

Następnie musisz wiedzieć, której wersji źródeł potrzebujesz. Główny branch, master zawiera stale rozwijany kod, nie odpowiada więc żadnemu wydaniu SDK. Aby sprawdzić listę dostępnych branchy należy wykonać w terminalu:

$ git ls-remote -h \git://android.git.kernel.org/platform/manifest.git
Na końcu każdej linii będą podane identyfikatory branchy, przykładowo:

25471ff281be9f5f1e2ed41e5dc0ac7f586e5f44 refs/heads/android-2.0_r12b280cbd55d9a03832add30f7e7cd9369ea7b28c refs/heads/android-2.1_r1
Wersje branchy na ogół zgadzają się z SDK, które mamy zainstalowane. Aby podejrzeć dokładne wersje naszych SDK należy uruchomić AVD Managera:

$ android

Do pobierania źródeł nie będziemy używać bezpośrednio git-a, lecz narzędzia repo polecanego przez Google do tego celu. W katalogu, gdzie mają znaleźć się źródła, wykonujemy:

$ curl https://android.git.kernel.org/repo > repo$ chmod +x repo$ ./repo init -u git://android.git.kernel.org/platform/manifest.git \ -b android-sdk-2.1_r1$ ./repo sync
Gdzie android-sdk-2.1_r1 zastępujemy wybranym wcześniej branchem, który odpowiada żądanej wersji źródeł.

Program repo zapyta o nazwę użytkownika i email (przydatne, gdy chcemy commitować nasze zmiany do repozytorium) i rozpocznie ściąganie kilku gigabajtów źródeł…

Niestety źródła, które nas interesują (czyli API w postaci plików .java) są porozrzucane po całej strukturze katalogów. Aby Eclipse się w tym połapał, ścieżki, w których znajdują się pliki źródłowe muszą odpowiadać nazwom pakietów. W przypadku kodu Androida ta zasada nie zawsze jest spełniona.

Na szczęście pewien dobry człowiek (dr Michael Foster) przygotował skrypt, który na podstawie deklaracji pakietów w źródłach tworzy odpowiednie struktury katalogów i umieszcza tam pliki .java:

from future import with_statement # for Python &lt; 2.6</p><p>import osimport reimport zipfile</p><p>open a zip fileDST_FILE = 'sources.zip'if os.path.exists(DST_FILE): print DST_FILE, "already exists" exit(1)zip = zipfile.ZipFile(DST_FILE, 'w', zipfile.ZIP_DEFLATED)<br/>some files are duplicated, copy them only oncewritten = {}<br/>iterate over all Java filesfor dir, subdirs, files in os.walk('.'): for file in files: if file.endswith('.java'): # search package name path = os.path.join(dir, file) with open(path) as f: for line in f: match = re.match(r'\s*package\s+([a-zA-Z0-9\._]+);', line) if match: # zip source using the package as path zippath = match.group(1).replace('.', '/') + '/' + file if zippath not in written: written[zippath] = 1 zip.write(path, zippath) break; zip.close()

Program zapisujemy w katalogu ze źródłami Androida jako np. skrypt.py i uruchamiamy:

$ python ./skrypt.py
Po chwili pojawi się plik sources.zip ze spakowanymi źródłami API. Pora przejść do kolejnego kroku, którym jest:

Instalacja przygotowanych źródeł w Eclipse

W katalogu zawierającym SDK odnajdujemy platformę odpowiadającą wersji źródeł. Przykładowo dla wersji 2.1 będzie to platforms/android 7. Tworzymy tam katalog sources i rozpakowujemy do niego źródła z przygotowanego archiwum.

Teraz trzeba ponownie uruchomić Eclipse. Może też zajść konieczność odświeżenia biblioteki android.jar w danym projekcie.

Teraz już wszystko powinno działać! Możemy podglądać źródła…

A także debugować.

Podsumowanie

Instalacja źródeł Androida i integracja ich z Eclipse nie jest zadaniem szczególnie trudnym. Warto poświęcić trochę czasu, aby móc wygodnie poruszać się po źródłach API. Dzięki temu zyskamy stuprocentową jasność co do działania systemu i będziemy w stanie lepiej poznać jego budowę. Polecam każdemu!

Reklamy
Ten wpis został opublikowany w kategorii Uncategorized. Dodaj zakładkę do bezpośredniego odnośnika.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s