Wstęp do aplikacji mobilnych
Czym są aplikacje mobilne, jak działa system Android, czym są SDK i JDK, jak zainstalować Android Studio i stworzyć pierwszą aplikację w Kotlinie.
Aplikacje mobilne
Czym są aplikacje mobilne?
Aplikacja mobilna to program komputerowy zaprojektowany specjalnie do działania na urządzeniach przenośnych – smartfonach i tabletach. W odróżnieniu od programów desktopowych musi uwzględniać mały ekran dotykowy, ograniczoną baterię, mobilny internet i czujniki (GPS, akcelerometr, kamera).
Aplikacje mobilne pobieramy ze sklepów: Google Play (Android) lub App Store (iOS).
Rodzaje aplikacji mobilnych
Napisane specjalnie dla jednej platformy. Android: Kotlin/Java. iOS: Swift. Najlepsza wydajność i dostęp do funkcji urządzenia.
Strony internetowe działające jak aplikacje. Napisane w HTML, CSS, JavaScript. Działają na każdym urządzeniu z przeglądarką.
Łączą obie metody – jeden kod działa na wielu platformach. Przykłady: Flutter, React Native. Kompromis między wydajnością a kosztami.
Android to ponad 72% rynku smartfonów na świecie. Aplikacje natywne na Androida pisze się w Kotlinie (od 2017 oficjalny język Google) lub Javie. Na kursie będziemy używać Kotlina – jest nowocześniejszy, bezpieczniejszy i czytelniejszy od Javy.
System operacyjny Android
Android to mobilny system operacyjny rozwijany przez Google, oparty na jądrze Linux. Każdy smartphone z Androidem to właściwie komputer z pełnym systemem operacyjnym.
Krótka historia
| Rok | Wydarzenie |
|---|---|
| 2003 | Założenie firmy Android Inc. w Palo Alto |
| 2005 | Przejęcie Android Inc. przez Google |
| 2008 | Premiera Android 1.0 – pierwsza publiczna wersja |
| 2017 | Google ogłasza Kotlin oficjalnym językiem Androida |
| 2019 | Kotlin-first – nowe API Google pisane pierwotnie w Kotlinie |
| 2024 | Android 15 – aktualna wersja |
Warstwy systemu Android
Android zbudowany jest warstwowo – każda warstwa korzysta z usług warstwy poniżej:
Twój kod Kotlin kompiluje się do kodu bajtowego, który uruchamia maszyna wirtualna ART (Android Runtime). Dlatego ta sama aplikacja działa na telefonach z różnymi procesorami – ARM, x86.
Narzędzia – JDK, SDK, Android Studio
JDK – Java Development Kit
JDK (Java Development Kit) to zestaw narzędzi niezbędnych do pisania i uruchamiania programów w Javie i Kotlinie. Zawiera:
Zamienia kod źródłowy (.kt, .java) na kod bajtowy (.class) zrozumiały dla maszyny wirtualnej.
Środowisko uruchomieniowe – maszyna wirtualna która wykonuje skompilowany kod bajtowy.
Gotowe klasy i funkcje – kolekcje, operacje na plikach, sieć, data i czas i wiele innych.
Android Studio zawiera już wbudowany JDK – nie trzeba go instalować oddzielnie. Przy instalacji Android Studio wszystko jest skonfigurowane automatycznie.
SDK – Software Development Kit
SDK (Software Development Kit) to zestaw narzędzi i bibliotek do tworzenia aplikacji dla konkretnej platformy. Android SDK zawiera wszystko czego potrzebujesz do pisania aplikacji na Androida:
Klasy takie jak Activity, TextView, Button, ListView – gotowe komponenty których używasz w kodzie.
Gradle, ADB (Android Debug Bridge) – do kompilacji i instalacji aplikacji na urządzeniu.
Wirtualne wersje Androida do testowania aplikacji bez fizycznego telefonu.
Każda wersja Androida ma swój numer API. Android 14 = API 34. Im wyższy numer, tym nowsze funkcje.
JDK to narzędzia do pisania i uruchamiania kodu Kotlin/Java w ogóle. SDK to biblioteki i narzędzia specyficzne dla platformy Android. Potrzebujesz obu – JDK uruchamia kod, SDK daje dostęp do funkcji Androida.
Android Studio
Android Studio to oficjalne IDE (zintegrowane środowisko programistyczne) Google do tworzenia aplikacji na Androida. Zawiera wszystko w jednym miejscu:
Podświetlanie składni, autouzupełnianie, wykrywanie błędów na żywo dla Kotlina i Javy.
Wizualny edytor interfejsu – przeciągasz widżety na ekran i widzisz podgląd na żywo.
Wirtualny telefon z Androidem – testujesz aplikację bez fizycznego urządzenia.
Krokowe wykonywanie kodu, podgląd wartości zmiennych, wykrywanie błędów w czasie działania.
Instalacja Android Studio
-
1Pobierz instalator
Wejdź na
developer.android.com/studioi kliknij „Download Android Studio”. Wybierz wersję dla swojego systemu (Windows / macOS / Linux). -
2Uruchom instalator
Windows: uruchom plik .exe jako administrator. Zaakceptuj domyślne ustawienia – Android Studio automatycznie zainstaluje JDK i SDK.
-
3Kreator konfiguracji (Setup Wizard)
Przy pierwszym uruchomieniu kreator pobiera komponenty SDK. Wybierz
Standardinstallation. Pobieranie może trwać kilka minut – potrzebne jest połączenie z internetem (~1.5 GB). -
4Sprawdź instalację
Po zakończeniu pojawi się ekran startowy „Welcome to Android Studio”. Instalacja zakończona pomyślnie.
-
5Sprawdź SDK Manager
W menu:
More Actions → SDK Manager. Upewnij się że zainstalowany jest Android SDK dla co najmniej jednej wersji systemu (najlepiej najnowszej).
Tworzenie pierwszej aplikacji
Nowy projekt krok po kroku
-
1New Project
Na ekranie startowym kliknij
New Project, lub z menu:File → New → New Project. -
2Wybierz szablon: Empty Activity
W oknie „New Project” wybierz
Empty Views Activity. To najprostszy szablon – jeden ekran, jeden plik Kotlin, jeden plik XML. -
3Konfiguracja projektu
Name:MojaAplikacja
Package name:com.example.mojaaplikacja (unikalny identyfikator w Google Play)
Language:Kotlin
Minimum SDK:API 26 (Android 8.0) – obejmuje ok. 95% urządzeń -
4Kliknij Finish
Android Studio wygeneruje projekt i pobierze zależności przez Gradle. Pierwsze otwarcie może trwać 1–2 minuty.
Struktura projektu – co i gdzie
app/
src/main/
java/com/example/mojaaplikacja/
MainActivity.kt← kod Kotlin – logika aplikacji
res/← zasoby aplikacji
layout/
activity_main.xml← wygląd ekranu (XML)
values/
strings.xml← teksty aplikacji
colors.xml← kolory
themes.xml← motyw wizualny
drawable/← obrazki i ikony
AndroidManifest.xml← konfiguracja aplikacji (nazwa, uprawnienia)
Gradle Scripts/
build.gradle – zależności i wersje SDK
Aplikacja Android zawsze dzieli się na dwie warstwy: kod (.kt) który opisuje co aplikacja robi (logika), i layout (.xml) który opisuje jak aplikacja wygląda. Te dwie warstwy są połączone przez setContentView() w MainActivity.
MainActivity.kt – wygenerowany kod
package com.example.mojaaplikacja // pakiet – unikalny identyfikator import androidx.appcompat.app.AppCompatActivity import android.os.Bundle // MainActivity dziedziczy po AppCompatActivity // AppCompatActivity = klasa bazowa dla wszystkich ekranów aplikacji class MainActivity : AppCompatActivity() { // onCreate() – wywoływana gdy ekran jest tworzony // To punkt startowy aktywności override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Podłącz plik XML jako wygląd tego ekranu setContentView(R.layout.activity_main) } }
activity_main.xml – wygenerowany layout
<?xml version="1.0" encoding="utf-8"?> <!-- ConstraintLayout = układ z pozycjonowaniem względem krawędzi --> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- TextView = pole tekstowe --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" <!-- Poniższe atrybuty centrują element na ekranie --> app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Emulator – wirtualny telefon
Emulator (AVD – Android Virtual Device) to wirtualny telefon działający na Twoim komputerze. Możesz testować aplikację bez fizycznego urządzenia.
Uruchomienie emulatora
-
1Otwórz AVD Manager
W Android Studio: kliknij ikonę telefonu z zielonym plusem na pasku narzędzi, lub
Tools → Device Manager. -
2Utwórz nowe urządzenie wirtualne
Kliknij
+ Create Device. Wybierz model telefonu np.Pixel 6. Kliknij Next. -
3Wybierz wersję systemu
Wybierz obraz systemowy np.
API 34 (Android 14). Jeśli nie jest pobrany – kliknij Download obok nazwy. -
4Uruchom aplikację
Kliknij zielony przycisk
▶ Run(lub Shift+F10). Android Studio skompiluje projekt, uruchomi emulator i zainstaluje na nim aplikację.
Emulator potrzebuje co najmniej 8 GB RAM i procesora z obsługą wirtualizacji (Intel VT-x lub AMD-V). Jeśli komputer jest słabszy, lepiej podłączyć fizyczny telefon przez USB z włączonym Trybem debugowania USB.
Fizyczny telefon zamiast emulatora
1. Ustawienia → Informacje o telefonie 2. Kliknij „Numer kompilacji" 7 razy → pojawi się „Jesteś teraz deweloperem" 3. Ustawienia → Opcje deweloperskie 4. Włącz „Debugowanie USB" 5. Podłącz telefon kablem USB 6. W Android Studio wybierz swój telefon z listy urządzeń
Zmiana wyglądu GUI
GUI (Graphical User Interface) aplikacji definiujemy w pliku XML. Możemy to robić na dwa sposoby: wizualnie przez Layout Editor lub ręcznie edytując kod XML.
Przykład – zmiana tekstu i dodanie przycisku
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" android:padding="24dp"> <!-- TextView z ID – żeby odwołać się do niego z kodu Kotlin --> <TextView android:id="@+id/tvPowitanie" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Witaj w mojej aplikacji!" android:textSize="22sp" android:textStyle="bold" android:textColor="#1976D2" android:layout_marginBottom="24dp" /> <!-- Button z ID – kliknięcie obsłużymy w Kotlinie --> <Button android:id="@+id/btnKliknij" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Kliknij mnie!" /> </LinearLayout>
Obsługa przycisku w Kotlinie
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Znajdź widoki po ich ID zdefiniowanych w XML val tvPowitanie = findViewById<TextView>(R.id.tvPowitanie) val btnKliknij = findViewById<Button>(R.id.btnKliknij) // Ustaw co ma się stać po kliknięciu przycisku btnKliknij.setOnClickListener { tvPowitanie.text = "Przycisk został kliknięty!" } } }
Klasa R jest automatycznie generowana przez Android Studio. Każde android:id="@+id/nazwaID" w XML tworzy stałą R.id.nazwaID w kodzie Kotlin. To mostek łączący kod z layoutem.
Podstawowe pojęcia Androida
Aktywność (Activity)
Aktywność to jeden ekran aplikacji z którym użytkownik może wchodzić w interakcję. Każdy ekran – lista kontaktów, szczegóły kontaktu, ustawienia – to osobna aktywność.
Jedna aktywność = jeden ekran użytkownika. Prosta aplikacja może mieć jedną aktywność; złożona ma ich wiele.
Aktywność przechodzi przez stany: Created → Started → Resumed → Paused → Stopped → Destroyed. onCreate() to pierwszy krok.
Każda aktywność musi być zarejestrowana w AndroidManifest.xml. Android Studio robi to automatycznie przy tworzeniu nowej aktywności.
// AppCompatActivity = klasa bazowa z obsługą wstecznej kompatybilności class MainActivity : AppCompatActivity() { // onCreate – aktywność jest tworzona (wywoływana raz) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // podłącz layout } // onResume – aktywność jest widoczna i aktywna override fun onResume() { super.onResume() } // onPause – inna aktywność przeszła na pierwszy plan override fun onPause() { super.onPause() } // onDestroy – aktywność jest niszczona (np. po wyjściu z aplikacji) override fun onDestroy() { super.onDestroy() } }
Układ (Layout)
Układ (Layout) to niewidoczny kontener który organizuje rozmieszczenie widoków na ekranie. Określa jak widoki są ułożone względem siebie. Piszemy go w pliku XML.
Układa elementy w linii – jeden pod drugim (vertical) lub obok siebie (horizontal). Najprostszy do nauki.
Pozycjonuje elementy względem innych elementów lub krawędzi ekranu. Domyślny w nowych projektach. Elastyczny, ale wymaga nauki.
Pozycjonuje elementy względem rodzica lub siebie nawzajem (np. „poniżej przycisku”, „po prawej stronie tekstu”). Starszy odpowiednik ConstraintLayout.
Układa elementy jeden na drugim. Używany gdy chcemy nałożyć widoki – np. obraz z napisem na wierzchu.
<!-- LinearLayout – elementy jeden pod drugim --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" <!-- szerokość = ekran --> android:layout_height="match_parent" <!-- wysokość = ekran --> android:orientation="vertical" <!-- dzieci jeden pod drugim --> android:padding="16dp" android:gravity="center_horizontal"> <!-- dzieci wyśrodkowane poziomo --> <!-- Pierwszy element --> <TextView android:text="Nagłówek" android:textSize="20sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- Drugi element – marginTop = odstęp od poprzedniego --> <Button android:text="Przycisk" android:layout_marginTop="12dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
Widok (View)
Widok (View) to podstawowy element interfejsu użytkownika – wszystko co widać na ekranie to widok. Każdy przycisk, tekst, obrazek, pole tekstowe to osobny widok.
Wyświetla tekst. Najprostszy widok – tylko do odczytu. Atrybuty: text, textSize, textColor.
Przycisk który użytkownik może kliknąć. Obsługujemy go przez setOnClickListener.
Pole do wpisywania tekstu przez użytkownika. Odczytujemy zawartość przez .text.toString().
Wyświetla obrazek z zasobów aplikacji (res/drawable/) lub z adresu URL.
Pole wyboru – zaznaczone lub niezaznaczone. Stan sprawdzamy przez .isChecked.
Jeden z wielu możliwych wyborów. Grupujemy w RadioGroup – można wybrać tylko jeden.
Activity (ekran) ładuje Layout (układ) przez setContentView(). Layout jest kontenerem dla View (widoków). Widoki mogą być zagnieżdżone – layout wewnątrz layoutu. Cała hierarchia tworzy drzewo widoków które Android rysuje na ekranie.
Relacja: Activity ↔ Layout ↔ View
Zadanie – pierwsza własna aplikacja
Zadanie: Aplikacja „Wizytówka”
- Utwórz nowy projekt Android w Android Studio:
Empty Views Activity, język Kotlin - Zmień layout na
LinearLayoutz orientacjąvertical - Dodaj
TextViewz Twoim imieniem i nazwiskiem (duży tekst, pogrubiony) - Dodaj drugi
TextViewz klasą lub kierunkiem np. „Technik programista” - Dodaj
Buttonz tekstem „Powiedz cześć” - W
MainActivity.ktznajdź przycisk przezfindViewByIdi ustaw listener - Po kliknięciu przycisku zmień tekst pierwszego TextView na „Cześć! Jestem [imię]”
- Uruchom aplikację na emulatorze lub telefonie i sprawdź czy działa
⭐ Bonus 1: dodaj EditText gdzie użytkownik wpisuje imię, a po kliknięciu przycisku TextView wyświetla „Cześć, [wpisane imię]!”
⭐⭐ Bonus 2: zmień kolor tła przycisku na zielony i kolor tekstu na biały używając atrybutów XML
⭐⭐⭐ Bonus 3: dodaj drugi przycisk „Wyczyść” który resetuje TextView z powrotem do imienia i nazwiska