Miasto Programistów – trochę teorii, trochę praktyki część 2

Krzysztof Kulpiciński Android 2012-01-28

Miasto Programistów

Witam ponownie w Mieście Programistów, od razu chcę Was ostrzec, że dzisiaj też będzie trochę więcej teorii niż praktyki, ale obiecuję, że w najbliższym czasie się to zmieni.

 

Po zapoznaniu się z najważniejszymi częściami aplikacji czas przejść do elementów konfiguracyjnych.

Pierwszym i najważniejszym z takich elementów jest plik manifestu. W zależności od środowiska programowania, można go wygenerować ręcznie (na przykład w wierszu poleceń, czy terminalu), lub tak jak w naszym przypadku, jest on tworzony automatycznie przez środowisko Eclipse.

No wszystko pięknie, ładnie, ale po co nam taki plik?

 

Manifest przechowuje bardzo ważne informacje dotyczące aplikacji, takie jak:

– nazwa oraz ikona aplikacji,

– wersja publiczna (widoczna użytkownikom),

– kod wersji (widoczny programistom),

– ograniczenia (co do SDK, czy rozdzielczości),

– uprawnienia,

– deklaracje komponentów (aktywności, usługi).

 

Plik ten zawsze umieszczany jest w głównym katalogu projektu i nosi nazwę AndroidManifest.xml.

Kod wersji jest oznaczeniem (liczbą naturalną) wykorzystywanym przez system. Ta sama aplikacja o wyższym kodzie wersji uznawana jest przez system jako nowsza i może ona zastąpić „starszą wersję”. Wersja publiczna jest zdecydowanie bardziej przyjazna, można w niej umieszczać nawet łańcuchy znaków takiej jak „BETA2”, czy „RC2”.

Jeżeli aplikacja nie obsługuje wszystkich wersji SDK, bądź też rozdzielczości ekranów, ustanawiamy w manifeście ograniczenia. Właśnie na podstawie ich Android Market udostępnia aplikacje jedynie urządzeniom obsługiwanym.

 

W pliku manifestu zapisane są również uprawnienia aplikacji. Przykładowo: bez prawa do użycia wibracji, nie wykorzystamy go w aplikacji Dodatkowo podczas instalacji są one przedstawiane użytkownikowi, który powinien się z nimi zapoznać (chociaż wszyscy wiemy jak to bywa).

Do użycia każdej aktywności, czy też usługi potrzebna jest ich deklaracja w pliku manifestu. W przeciwnym wypadku chcąc uruchomić dany komponent przywita nas piękny błąd aplikacji.

Tak więc jeżeli zapoznaliśmy się już z podstawami, czas stworzyć Waszą pierwszą aplikację na Androida.  Dodatkowo opiszę tutaj strukturę projektu.

Uruchamiamy więc Eclipse. Zapewne skonfigurowaliście już go pod kątem aplikacji na Nasz ukochany system operacyjny.

Wchodzimy w File -> New -> Android Project, wybieramy nazwę naszej aplikacji.

 

 

Następnie przechodzimy dalej w celu wybrania wersji SDK (jeżeli nie macie nic do wyboru, musicie najpierw pobrać je w SDK Androida). Ja wybrałem wersję 2.3.3, która jest 10 poziomem API, jednak przy pierwszej, mało skomplikowanej aplikacji możecie wybrać nawet Cupcake, czy Donut. Nie będzie to miało wpływu na działanie aplikacji (ewentualnie na jej wyświetlenie da ekranach w wysokiej rozdzielczości, bądź też jak to bywa z wersjami 2.2 i niżej, bo prostu nie zostaną one wyświetlone, bo tego nie obsługują).

Następnie wpisujemy nazwę paczki, ja akurat w tum wypadku wymyśliłem bardzo zmyślną nazwę. W praktyce ludzie podają adresy stron i nazwę aplikacji, bądź też nazwę developera i nazwę aplikacji. Często poprzedzone one są skrótem com (commercial – komercyjna) bądź też oznaczeniem państwa dla którego jest przeznaczona aplikacja.

 

 

Struktura projektu jest następująca:

 

 

W folderze src zachowane są wszystkie paczki oraz klasy, które kodujemy. Cały kod aplikacji będzie się tam znajdował.

Folder gen przechowuje plik R.java, jest to plik, którego nie powinniśmy edytować. Jest on tworzony przez środowisko. Przechowuje on adresy (referencje) do wszystkich elementów aplikacji. Dzięki niemu system wie, jak zarządzać aplikacją.

Dodatkowo jak widzicie przechowywane są tutaj również wszystkie biblioteki powiązane z daną wersją Androida.

Folder assets przygotowany jest do przechowywania plików z których będzie korzystać Nasza aplikacja.

W folderze bin dostępne są wszystkie pliki tworzone w procesie kompilacji, między innymi plik *.apk zawierający gotową aplikację.

Folder res odpowiedzialny jest za przechowywanie zasobów naszej aplikacji. Zasobami mogą być elementy graficzne, animacje, gradienty, układy, czy też dodatkowe pliki *.xml (definiujący np. menu, czy też właśnie animacje), czy też przechowujące dane.

Dodatkowo mamy pliki odpowiedzialne za konfigurację, jednak interesuje nas jedynie plik AndroidManifest.xml (jak już wcześniej wspominałem).

 

Ostatnim krokiem w dzisiejszym Mieście programistów będzie kompilacja aplikacji. Możemy do tego wykorzystać telefon (do czego zdecydowanie zachęcam) lub emulator, który jest wolny i nieraz przekłamuje. Najpierw zdefiniujemy emulator. Wchodzimy w Window -> AVD Manager i klikamy przycisk New. Oto przykładowa konfiguracja maszyny wirtualnej:

 

 

Następnie klikamy na paczkę i:

 

 

Powinien uruchomić się emulator, czekamy cierpliwie i cieszymy się pierwszą aplikacją na Androida! Jeżeli chcecie uruchomić ją na telefonie, wystarczy przed tym krokiem podłączyć telefon w tryb debuggowania i wybrać go.

Jak zauważyliście, kazałem kliknąć wam na paczkę, zrobiłem to dlatego, ponieważ Eclipse kompiluje zawsze oznaczony plik, jeżeli zaznaczymy na przykład plik Manifestu, to po skompilowaniu dostaniemy wyjściowy plik *.xml, który posypie nam projekt.

Uważajcie na to i bawcie się dobrze!

Źródło: własne



  • lobek

    Wydaje mi się, że inicjatywa w żaden sposób nie jest zabijana.

    Jest to zwyczajna krytyka czy to bardziej dosadna czy mniej + pokazanie alternatywnych źródeł zasięgnięcia wiedzy np:
    [quote](…)na forum > dział programowanie > przyklejony temat dla początkujących(…)[/quote] i ten oto przykład pokazał ten cholerny „polaczek, chłopek ramzixp, który pracuje w mediamarkt”
    Co do mnie, tak jak pisałem – nie przeszkadza mi sam kurs jako tako; w końcu jest to zacna idea oraz poświęcenie swojego czasu, poza tym zawsze to dodatkowe miejsce gdzie w razie czego można szukać pomocy.

    Kolejny piękny „kwiatek” o których pisałem wcześniej:
    [quote] (…)Nie chcę się zniżać do ich poziomu poprostu nie podoba się to wypierda…. (…)[/quote] – to po co się zniżyłeś? Dodatkowo w tak kiepski sposób.

    • ramzixp

      Nie pracuję w Media Markt, mało tego, programowanie pozwala mi na utrzymanie się z tego. 😛 więc chyba wiem, że krytyka tego nie jest bezpodstawna. Zwłaszcza, że w paru miejscach pokazane zostały alternatywy, jedna po polsku, reszta anglojęzyczna, ale nie… pokazywać jaśnie panom wersję english, gdzie 90% zainteresowanych programowaniem, w tym dziale, nie zna angielskiego.

      Zostały pokazane odpowiednie źródła, gdzie nie tylko ja je polecałem, ale inni siedzący w temacie także.

      Słowa „wypie…” Panie bundesik, możesz wymawiać w gronie rodzinnym lub w szkole do kolegów.

      Zresztą co ja będę, to co miało być powiedziane, już zostało.

  • budensik

    Takaszi zgadzam się z Tobą w 100%. Dodam tylko że przykro mi że zamiast dyskutować na temat w sposób cywilizowany to kilku polaczków jak Ramzi itp niszczy całą inicjatywę bo myślą że wszystkie rozumy zjedli a prawda jest taka że to jakieś zahukane chłopki co pracują w media markt i wielcy z nich programiści.Nie chcę się zniżać do ich poziomu poprostu nie podoba się to wypierda…. a daj innym się czegoś dowiedzieć

    • ramzixp

      bez polaczkowania….bo obrażasz własny naród
      ………………..
      cytat:
      „I po co czytasz komentarze sfrustrowanych miernot?
      Niech się durnie trują jadem, oszczędź sobie złego.”

      ————-
      Inicjatywa? Tak, jest to inicjatywa uczenia błędnych działań, teorii i założeń, które w tym „kursie” się pokazują – ale spoko, plebs się cieszy, wieś tańczy, jest kiełbasa i browary.

  • takaszi

    Jestem porażony, a czym? ano merytoryką krytyki. Parę wpisów do czegoś się odnosi, ale reszta przypomina gęganie leśnych dziadków. Przeczytałem część 1, przeczytałem część 2 i zaczynam się interesować tematem, ponieważ mnie to zaciekawiło.
    Panów „bojowników” proszę o pokorę i grzeczność, a zwłaszcza o merytorykę.

    Osobiście proszę o więcej, jeżeli nasuną się mi jakieś pytania to poszukam na forum i na portalu. Proszę nie zabijać inicjatywy. Dziękuję i bardzo dziękuję Autorowi, oraz proszę o więcej.

  • lobek

    Dziwią mnie tutaj komentarze typu [quote]rozumiem, że przygotowałeś lepszy kurs i jutro zobaczymy go na necie? Nie zapomnij podrzucić tu linka[/quote], czy [quote]Masz wiedzę to napisz tekst i na pewno go opublikują tutaj a nie tylko rzucać mięsem w komentarzach[/quote] lub najczęściej stosowane (brane z pamięci) [quote]nie podoba się? nikt Cię tutaj nie trzyma[/quote]
    Ktoś tworząc kurs/artykuł/prezentację musi się godzić z tym, że jest wystawiony na krytykę. Bronienie takiej osoby w takim stylu jaki podałem wyżej jest bezsensowne, chociażby dlatego, że wchodząc na kurs/…/… chcę się czegoś dowiedzieć – jeżeli stwierdzam, że nie podoba mi się to co przeczytałem lub znajdę jakiś błąd to mam pełne prawo o tym napisać krytykując/pokazując błąd etc… bez z góry narzuconej zasady – „jeżeli mi się nie podoba to muszę napisać kurs/…/… sam i go przedstawić”.
    Osobiście nie podjąłbym się pisania kursu/…/… ponieważ nie mam dostatecznej wiedzy, ale nadal nie mam nigdzie zabronione krytykowania etc…

    Co do samego „kursu” – osobiście nie podoba mi się „pióro” autora ale jest to moje subiektywne odczucie.
    W każdym bądź razie postaram się śledzić temat – a nuż może się czegoś dodatkowo nauczę

    • ramzixp

      Dokładnie!

      Dodatkowo, autor do tej pory nie popisuje się wiedzą. Ktoś z redaktorów nie znający się na rzeczy, podłapał „kurs programowania” na Androida i teraz wielki cykl się zrobił.

      Całość jest warta wielkie „G”.

      Początkujący programisto, jeśli chcesz się nauczyć programować, zapraszamy do nas na forum > dział programowanie > przyklejony temat dla początkujących. W jednym temacie jest zawarte 100x więcej niż w tym kursie.
      Masz napisane jak zainstalować środowisko, sdk, etc.
      Polecane książki, co musisz umieć z javy na sam początek, wypowiedzi różnych osób i wiele, wiele więcej.

      PODSTAWOWA ZASADA „SEARCH” AND „RESEARCH”. GOOGLE.COM
      jak patrzę po komentarzach w pierwszym odcinku, to mi niedobrze, kwiczą, płaczą, skaczą, tupią nóżkami ze słowami na ustach: „kiedy będzie następna część”.

      Człowieku! Więcej byś się nauczył w godzinę własnoręcznego szukania i czytania! Zrobiłbyś parę programów konsolowych w javie! Nauczyłbyś się odrobiny składni i wiele, wiele innych rzeczy! Tak to siedzisz na portalu, forum i kwiczysz bo nie ma kursu! Ile czas było między cyklami? 2 tygodnie? Zmarnowałeś 2 tygodnie, w które napisałbyś już prostą aplikację i być może wystawił w markecie!

      Czy to ma być kurs dla dzieciaków i kretynów? Jeśli tak, to zmień autorze tytuł cyklu, ale nie ośmieszaj programistów tym syfem.

  • ramzixp

    PROPONUJĘ ZMIENIĆ NAZWĘ KURSU, CZEMU?

    Nikt z Was nigdy po tym kursie nie będzie programistą, ja się nim nie nazywam po 7 miesiącach doświadczenia z androidem, ciągle dowiaduję się nowych rzeczy.

    Ciekaw jestem jak ten Pan wytłumaczy Wam podstawy java, obiektowości, itp. Przecież na androida nie programujemy strukturalnie, a obiektowo. No ciekawe, chyba, że ten „kurs” będzie się składał z „kopiuj to”, „wklej tam” .

  • ruphert

    [quote name=”KamilM”]Opisał jak to najczęściej jest w aplikacjach z Marketu, wiele renomowanych aplikacji ma właśnie takie identyfikatory, więc nie rozumiem o co się burzysz. Masz wiedzę to napisz tekst i na pewno go opublikują tutaj a nie tylko rzucać mięsem w komentarzach.[/quote]
    Najczęściej ludzie piszą z błędami, to może on też niech zacznie robić jakieś fajne orty?

    • kamilm

      Błędy ortograficzne to coś zupełnie innego, chodzi mi o to, że jeśli się ktoś nie zgadza, to niech kulturalnie i rzeczowo opisze jak jest poprawnie a nie tylko rzuca mięsem. Kultura, Panowie.

      • emilyo

        Cytuję:
        „Ludzie!!! Nazwy paczek mają pewną konwencję, której trzeba się trzymać.
        „często poprzedzone one są skrótem com (commercial – komercyjna) bądź też oznaczeniem państwa dla którego jest przeznaczona aplikacja.”
        Co za bzdury! Polecam przeczytać en.wikipedia.org/…/…”
        „A paczki w androidzie to niby co jak nie java? To że ludzie są głupi i nie potrafią się stosować do konwencji to nie znaczy że ma się prawo wprowadzać ich w błąd. (stackoverflow.com/…/…)”
        „A jeśli potrzebujesz wykładni to jest tutaj: developer.android.com/…/…”

        Gdzie Ty widzisz jakieś mięso? Słowo „głupi”? To Ty chyba w życiu mięsa nie widziałeś. Poza tym w każdym poście dałem link pokazujący „rzeczowo” jak powinno być. I do tego każdy w innym szanowanym źródle.

  • emilyo

    Ludzie!!! Nazwy paczek mają pewną konwencję, której trzeba się trzymać.
    „często poprzedzone one są skrótem com (commercial – komercyjna) bądź też oznaczeniem państwa dla którego jest przeznaczona aplikacja.”
    Co za bzdury! Polecam przeczytać http://en.wikipedia.org/wiki/Java_package#Package_naming_conventions

    • pulpet

      chodzi o paczki aplikacji w androidzie, popatrz jak są często oznaczane, tutaj mówisz o bibliotekach… popatrz często jak oznaczane są paczki przez twórców aplikacji, nie bibliotek – sam wybierasz w jaki sposób zarządzasz paczkami wiadomo, ze kod obsługi mapy będzie miał inną paczkę, niż kod aplikacji głównej, ja nie pisałem jaka jest konsekwencja w javie, tylko jak to robią programiści w Androidzie….

      • emilyo

        A paczki w androidzie to niby co jak nie java? To że ludzie są głupi i nie potrafią się stosować do konwencji to nie znaczy że ma się prawo wprowadzać ich w błąd. (http://stackoverflow.com/questions/6273892/android-package-name-convention?answertab=votes#tab-top)

        • kamilm

          Personalne wrzuty kto jest głupi a kto nie mógłbyś sobie darować. To ma być dyskusja czy rzucanie g…błotem?

      • emilyo
        • pulpet

          no tak, jedno źródło mówi o com. czyli commercial od domeny, drugie mówi o ca. i de. czyli od państw 😛 napisałem jak ludzie robią w praktyce, tak robią… że to jest unikalne oznaczenie aplikacji fakt, mogłem napisać o hierarchii też…

          • deadswine

            W praktyce to wygląda tak:
            pierdzacykot.nazwakontadevelopera.costam.costam

            Mniej więcej w takim stylu ^^

          • pulpet

            dokładnie 😉 lub pierdzacykot.adrsstronydevelopera .costam.costam

          • ramzixp

            Po za tym, wykonanie kursu jest cienkie, delikatnie mówiąc 😐
            Chciałem go polecić bratu, który nic z programowania nie rozumie, ale chyba jednak będę sam go uczył.

            ————
            aktywności, usługi, intencje – od kiedy to się tłumaczy?

            :zachowane są wszystkie paczki oraz klasy, które kodujemy: – od kiedy klasy się koduje? Je się pisze, projektuje, a nie koduje. Programowanie to nie obsługa budzika.

            zresztą, kto wpadł na nazwę „Miasto programistów”, jak dla mnie „Miasto dla jełopów”, później mamy w dziale na forum programowania takie kwiatki „jak skompilować cudzą aplikację”, „jak zrobić angry birds”, „uruchomiłem eclipse, ale coś mi nie działa”…

            Czy nie powinieneś, pisząc ten kurs, podać w pierwszym odcinku wymagań, bibliografii, itp. ? Bo dla mnie to najważniejsze.
            Programowania na Androida nie nauczysz nawet w 500 odcinkowym kursie, jeśli będzie on prowadzony w takiej, a nie innej formie.

          • tomdroid

            ramzixp: rozumiem, że przygotowałeś lepszy kurs i jutro zobaczymy go na necie? Nie zapomnij podrzucić tu linka.

          • ramzixp

            kurs? 😐 ależ oczywiście, już Ci go daje:

            -Thinking in Java
            -Java 2 podstawy
            -developers.android.com

            słowo „kurs” przy nauce programowania to herezja !

          • ramzixp

            [quote name=”ramzixp”]
            -developers.android.com
            [/quote]

            sorry, developer.android.com

          • kamilm

            Żyjemy w Polsce i tekst jest po polsku, aktywność, usługa, intencja to polskie słowa, skoro istnieją i opisują dokładnie to samo znaczenie dlaczego nie należałoby ich używać?

            Bez przesady, może i tekst nie jest rewelacyjny ale można z niego po trochu zrozumieć o co chodzi, fakt, że w tym tempie będzie powoli to szło ale też rozumiem, że napisanie tekstu wcale nie jest takie hop siup i trochę trzeba czasu poświęcić.

          • brut-all

            1. Oficjalna dokumentacja Androida wyraźnie mówi, że należy używać własnych domen. Nie wiem, na jakie „drugie źródła” się powołujesz.

            2. To nie ma nic a nic wspólnego z żadną hierarchią. Sprawa jest naprawdę bardzo prosta: nazwa musi być unikatowa, a jedynym globalnym rejestrem swego rodzaju identyfikatorów są domeny, więc nadają się one idealnie do tego celu.

            3. Java oraz Android to nie są jedyne technologie, w których jako identyfikatory wykorzystuje się nazwy domen. Ba, korzysta z nich cały cywilizowany świat programistyczny, np. namespacey w XMLu, groupId w Mavenie, czy Bundle Identifier w iOS. Jeśli programista o tym nie wie, to szczerze powiedziawszy trochę wstyd.

            4. A co do praktyki, to nie znalazłem u mnie w telefonie żadnej aplikacji, która by nie korzystała z tej zasady. Być może nawet Google ją wymusza w Markecie.

          • pulpet

            afzkl.development.mvideoplayer.activity.videolistactivity – mVideoPlayer
            com.alphonso.pulse.newsrack.newsrackactivity – Pulse
            com.tni.taskillerfull.taskiller – Taskiller
            ex.chinyang.android.xshortcut.intentsetupact – xShortcut
            eu.gingermobile.welcomeactivity – Ginger

            każda aplikacja pobrana została z marketu i wcale nie odnosi do domen… a to są tylko przykłady… nie ma żadnego ograniczenia w markecie,.. to że o czymś nie wspominam nie znaczy że czegoś nie umiem..

          • ruphert

            [quote name=”Krzysztof Kulpiciński”] nie ma żadnego ograniczenia w markecie,.. to że o czymś nie wspominam nie znaczy że czegoś nie umiem..[/quote]

            Ogólnie programować można tak że wstyd to później oglądać, ale jak chcesz komuś przekazać wiedzę, to nie utrwalaj złych nawyków – bo inaczej będzie bardzo mierny tutorial Jeśli tego nie czujesz to może nie powinieneś zajmować się przekazywaniem wiedzy innym…

    • kamilm

      Opisał jak to najczęściej jest w aplikacjach z Marketu, wiele renomowanych aplikacji ma właśnie takie identyfikatory, więc nie rozumiem o co się burzysz. Masz wiedzę to napisz tekst i na pewno go opublikują tutaj a nie tylko rzucać mięsem w komentarzach.



x