Android Studio · Kotlin · INF.04

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.

Android Kotlin Android Studio SDK / JDK Pierwsza aplikacja
01

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

📱Natywne

Napisane specjalnie dla jednej platformy. Android: Kotlin/Java. iOS: Swift. Najlepsza wydajność i dostęp do funkcji urządzenia.

🌐Webowe (PWA)

Strony internetowe działające jak aplikacje. Napisane w HTML, CSS, JavaScript. Działają na każdym urządzeniu z przeglądarką.

🔀Hybrydowe

Łączą obie metody – jeden kod działa na wielu platformach. Przykłady: Flutter, React Native. Kompromis między wydajnością a kosztami.

Dlaczego Android?

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.

02

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

RokWydarzenie
2003Założenie firmy Android Inc. w Palo Alto
2005Przejęcie Android Inc. przez Google
2008Premiera Android 1.0 – pierwsza publiczna wersja
2017Google ogłasza Kotlin oficjalnym językiem Androida
2019Kotlin-first – nowe API Google pisane pierwotnie w Kotlinie
2024Android 15 – aktualna wersja

Warstwy systemu Android

Android zbudowany jest warstwowo – każda warstwa korzysta z usług warstwy poniżej:

Aplikacje
Twój kod Kotlin
Framework
Activity, View, SDK
Runtime
ART / JVM
Jądro Linux
Sterowniki, sprzęt
ART – Android Runtime

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.

03

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:

⚙️Kompilator (javac / kotlinc)

Zamienia kod źródłowy (.kt, .java) na kod bajtowy (.class) zrozumiały dla maszyny wirtualnej.

🏃JRE – Java Runtime

Środowisko uruchomieniowe – maszyna wirtualna która wykonuje skompilowany kod bajtowy.

📚Biblioteki standardowe

Gotowe klasy i funkcje – kolekcje, operacje na plikach, sieć, data i czas i wiele innych.

JDK w Android Studio

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:

📦API Androida

Klasy takie jak Activity, TextView, Button, ListView – gotowe komponenty których używasz w kodzie.

🔨Narzędzia budowania

Gradle, ADB (Android Debug Bridge) – do kompilacji i instalacji aplikacji na urządzeniu.

📱Obrazy emulatora

Wirtualne wersje Androida do testowania aplikacji bez fizycznego telefonu.

🎯API Level

Każda wersja Androida ma swój numer API. Android 14 = API 34. Im wyższy numer, tym nowsze funkcje.

JDK vs SDK – porównanie jednym zdaniem

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:

✏️Edytor kodu

Podświetlanie składni, autouzupełnianie, wykrywanie błędów na żywo dla Kotlina i Javy.

🎨Layout Editor

Wizualny edytor interfejsu – przeciągasz widżety na ekran i widzisz podgląd na żywo.

📱Emulator AVD

Wirtualny telefon z Androidem – testujesz aplikację bez fizycznego urządzenia.

🐛Debugger

Krokowe wykonywanie kodu, podgląd wartości zmiennych, wykrywanie błędów w czasie działania.

Instalacja Android Studio

  • 1
    Pobierz instalator

    Wejdź na developer.android.com/studio i kliknij „Download Android Studio”. Wybierz wersję dla swojego systemu (Windows / macOS / Linux).

  • 2
    Uruchom instalator

    Windows: uruchom plik .exe jako administrator. Zaakceptuj domyślne ustawienia – Android Studio automatycznie zainstaluje JDK i SDK.

  • 3
    Kreator konfiguracji (Setup Wizard)

    Przy pierwszym uruchomieniu kreator pobiera komponenty SDK. Wybierz Standard installation. Pobieranie może trwać kilka minut – potrzebne jest połączenie z internetem (~1.5 GB).

  • 4
    Sprawdź instalację

    Po zakończeniu pojawi się ekran startowy „Welcome to Android Studio”. Instalacja zakończona pomyślnie.

  • 5
    Sprawdź SDK Manager

    W menu: More Actions → SDK Manager. Upewnij się że zainstalowany jest Android SDK dla co najmniej jednej wersji systemu (najlepiej najnowszej).

04

Tworzenie pierwszej aplikacji

Nowy projekt krok po kroku

  • 1
    New Project

    Na ekranie startowym kliknij New Project, lub z menu: File → New → New Project.

  • 2
    Wybierz szablon: Empty Activity

    W oknie „New Project” wybierz Empty Views Activity. To najprostszy szablon – jeden ekran, jeden plik Kotlin, jeden plik XML.

  • 3
    Konfiguracja 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ń

  • 4
    Kliknij 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

MojaAplikacja/
  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
Dwie strefy aplikacji

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

kotlin/MainActivity.kt Kotlin
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

res/layout/activity_main.xml XML
<?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>
05

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

  • 1
    Otwórz AVD Manager

    W Android Studio: kliknij ikonę telefonu z zielonym plusem na pasku narzędzi, lub Tools → Device Manager.

  • 2
    Utwórz nowe urządzenie wirtualne

    Kliknij + Create Device. Wybierz model telefonu np. Pixel 6. Kliknij Next.

  • 3
    Wybierz wersję systemu

    Wybierz obraz systemowy np. API 34 (Android 14). Jeśli nie jest pobrany – kliknij Download obok nazwy.

  • 4
    Uruchom aplikację

    Kliknij zielony przycisk ▶ Run (lub Shift+F10). Android Studio skompiluje projekt, uruchomi emulator i zainstaluje na nim aplikację.

Wymagania sprzętowe emulatora

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

Włączenie trybu debugowania Kroki
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ń
06

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

res/layout/activity_main.xml – zmieniony XML
<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

kotlin/MainActivity.kt – z obsługą przycisku Kotlin
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!"
        }
    }
}
R.id – jak to działa?

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.

07

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ść.

📱Aktywność = ekran

Jedna aktywność = jeden ekran użytkownika. Prosta aplikacja może mieć jedną aktywność; złożona ma ich wiele.

⏱️Cykl życia

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.

kotlin/MainActivity.kt – szkielet aktywności Kotlin
// 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.

📋LinearLayout

Układa elementy w linii – jeden pod drugim (vertical) lub obok siebie (horizontal). Najprostszy do nauki.

🔗ConstraintLayout

Pozycjonuje elementy względem innych elementów lub krawędzi ekranu. Domyślny w nowych projektach. Elastyczny, ale wymaga nauki.

📐RelativeLayout

Pozycjonuje elementy względem rodzica lub siebie nawzajem (np. „poniżej przycisku”, „po prawej stronie tekstu”). Starszy odpowiednik ConstraintLayout.

🗃️FrameLayout

Układa elementy jeden na drugim. Używany gdy chcemy nałożyć widoki – np. obraz z napisem na wierzchu.

res/layout/activity_main.xml – LinearLayout przykład XML
<!-- 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.

🔤TextView

Wyświetla tekst. Najprostszy widok – tylko do odczytu. Atrybuty: text, textSize, textColor.

🖱️Button

Przycisk który użytkownik może kliknąć. Obsługujemy go przez setOnClickListener.

✏️EditText

Pole do wpisywania tekstu przez użytkownika. Odczytujemy zawartość przez .text.toString().

🖼️ImageView

Wyświetla obrazek z zasobów aplikacji (res/drawable/) lub z adresu URL.

☑️CheckBox

Pole wyboru – zaznaczone lub niezaznaczone. Stan sprawdzamy przez .isChecked.

🔘RadioButton

Jeden z wielu możliwych wyborów. Grupujemy w RadioGroup – można wybrać tylko jeden.

Hierarchia: Activity → Layout → View

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

Activity
MainActivity.kt
setContentView()
Layout
activity_main.xml
zawiera
View
TextView, Button…
przez
R.id
findViewByID()
Zadanie

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 LinearLayout z orientacją vertical
  • Dodaj TextView z Twoim imieniem i nazwiskiem (duży tekst, pogrubiony)
  • Dodaj drugi TextView z klasą lub kierunkiem np. „Technik programista”
  • Dodaj Button z tekstem „Powiedz cześć”
  • W MainActivity.kt znajdź przycisk przez findViewById i 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