print("Hello, Android!")
Pracownia programowania aplikacji mobilnych · zajęcia 1 · klasa IV

Aplikacje mobilne — start

Android Studio, emulator i Twoja pierwsza aplikacja.

Dziś każdy wychodzi z działającą aplikacją w emulatorze.
Narzędzia

Czym jest Android Studio

Oficjalne środowisko Google do Androida. Piszemy w Kotlinie. To samo środowisko będzie na egzaminie INF.04.

Edytor

kod Kotlin + makiety XML

Gradle

buduje z projektu plik APK

Emulator

wirtualny telefon na ekranie

Logcat

tu aplikacja mówi, co ją boli

Ważne: nowy projekt zakładamy z szablonu Empty Views Activity — to wersja z makietami XML, jak na egzaminie.
Struktura projektu

3 miejsca, które się liczą

Trzy miejsca, które się liczą. Reszta plików na razie nas nie obchodzi.

MainActivity.kt
kod (Kotlin)

logika ekranu — co się dzieje po kliknięciu

res/layout/activity_main.xml
makieta (XML)

wygląd ekranu — jakie elementy i gdzie

AndroidManifest.xml
konfiguracja

dowód osobisty aplikacji: nazwa, ekrany, uprawnienia

Zasada Androida: wygląd osobno (res), logika osobno (kod). Kod sięga do zasobów przez klasę R, np. R.id.przycisk.
Krok po kroku

Zakładamy projekt

1. File → New → New Project

otwiera się kreator projektu

2. szablon: Empty Views Activity

NIE „Empty Activity” — sprawdź dwa razy

3. Name: Wizytowka

bez polskich znaków i spacji; reszta pól — bez zmian

4. Language: Kotlin · Minimum SDK: domyślne

minimum SDK = najstarszy Android, na którym app zadziała

5. Finish — i czekamy na Gradle

pasek postępu na dole okna; za pierwszym razem to trwa

Gdy pasek Gradle zniknie i nic się nie kręci — projekt gotowy.
Co robi przycisk Run

Jak kod trafia na telefon

Po kliknięciu Run dzieje się to:

Kotlin + XML
Twój projekt
→Gradle
kompiluje i pakuje
→plik APK
gotowa aplikacja
→emulator / telefon
instalacja i start
Dwie rzeczy, które trwają — i to normalne:
• pierwsza budowa projektu (Gradle pobiera zależności — nawet kilka minut)
• pierwszy start emulatora — dlatego uruchamiamy go raz i nie zamykamy do końca zajęć
Emulator

Wirtualny telefon

Device Manager → Create Virtual Device

Na egzaminie INF.04 aplikację mobilną trzeba uruchomić właśnie w emulatorze — dziś ćwiczymy dokładnie to.
Emulator nie startuje? Najczęściej wyłączona wirtualizacja w BIOS albo za mało RAM. Plan B: własny telefon z Androidem + kabel USB + włączone Opcje programisty → Debugowanie USB.
Makieta XML · część 1

Pojemnik

Otwórz res/layout/activity_main.xml (zakładka Code). Usuń wszystko i napisz:

<LinearLayout                               <- pojemnik na elementy
  xmlns:android="http://schemas.android..." <- wklej z podpowiedzi — nie ruszamy
  android:layout_width="match_parent"       <- szerokość: cały ekran
  android:layout_height="match_parent"      <- wysokość: cały ekran
  android:orientation="vertical"            <- elementy jeden POD drugim
  android:padding="16dp"                    <- odstęp od krawędzi ekranu
  android:gravity="center_horizontal">      <- wyśrodkuj zawartość

  ... tu za chwilę trafią TextView i Button ...

</LinearLayout>                             <- zamknięcie pojemnika
Szare dopiski ze strzałką to objaśnienia — nie przepisujemy ich do kodu.
Makieta XML · część 2

Napis i przycisk

Wstaw do środka pojemnika (między > a </LinearLayout>):

<TextView                                 <- napis na ekranie
  android:id="@+id/napis"                 <- imię elementu — po nim znajdzie go kod
  android:layout_width="wrap_content"     <- szerokość: tyle, ile zajmuje tekst
  android:layout_height="wrap_content"    <- wysokość: tyle, ile trzeba
  android:text="Witaj!"                   <- wyświetlany tekst
  android:textSize="24sp" />              <- rozmiar czcionki (sp = jednostka czcionek)

<Button                                   <- przycisk
  android:id="@+id/przycisk"              <- imię przycisku
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"    <- rozmiar dopasowany do napisu
  android:text="Kliknij mnie" />          <- napis NA przycisku
Run: napis i przycisk są na ekranie. Przycisk na razie nic nie robi — logika następna.
Kotlin · część 1

Szkielet ekranu

Otwórz MainActivity.kt — ten kod już tam jest, wygenerował go kreator. Czytamy go:

class MainActivity : AppCompatActivity() {    <- klasa naszego ekranu (Activity = ekran)
  override fun onCreate(saved: Bundle?) {     <- uruchamia się przy starcie ekranu
    super.onCreate(saved)                     <- standardowy start — zostawiamy
    setContentView(R.layout.activity_main)    <- "pokaż makietę activity_main.xml"
    // tu dopiszemy nasz kod (część 2)
  }
}
R to automatyczny spis wszystkiego z folderu res. R.layout.activity_main = nasza makieta, R.id.przycisk = element o tym id.
Kotlin · część 2

Ożywiamy przycisk

Dopisz wewnątrz onCreate, pod setContentView:

val przycisk = findViewById<Button>(R.id.przycisk) <- znajdź przycisk z XML po jego id
val napis = findViewById<TextView>(R.id.napis)    <- znajdź napis po id

przycisk.setOnClickListener {                     <- "gdy ktoś kliknie przycisk, zrób:"
  napis.text = "Kliknięto!"                       <- zmień tekst napisu
  Toast.makeText(this, "Cześć!",                  <- dymek z komunikatem...
    Toast.LENGTH_SHORT).show()                    <- ...krótki i pokaż go
}                                                 <- koniec bloku "po kliknięciu"
Czerwone Button / TextView / Toast? Najedź myszką i Alt+Enter → Import. Android Studio doda brakujący import sama.
Słowniczek

Dzisiejsze pojęcia

PojęcieCo to znaczy
Activityjeden ekran aplikacji
layoutplik XML z wyglądem ekranu
idimię elementu — łączy XML z kodem
emulator (AVD)wirtualny telefon
APKplik instalacyjny aplikacji
Gradlenarzędzie budujące APK z projektu
Logcatdziennik zdarzeń i błędów aplikacji
Toastdymek z krótkim komunikatem
Zadanie

Aplikacja „Wizytówka”

Aplikacja „Wizytówka” — do pokazania na koniec zajęć.

1Wymagania

  • TextView z Twoim imieniem
  • TextView z krótkim opisem (kim jesteś, co lubisz)
  • Button „Przywitaj się”
  • po kliknięciu: zmiana tekstu opisu + Toast

2Zaliczenie zajęć

  • aplikacja uruchamia się w emulatorze
  • przycisk działa
  • pokazujesz działanie nauczycielowi

★Dla szybkich

Dodaj drugi przycisk, który przywraca pierwotny opis. A licznik kliknięć w tekście przycisku?

Awarie

SOS — gdy coś nie działa

ObjawCo robisz
Gradle sync failedsprawdź internet, potem File → Sync Project with Gradle Files
czerwone R w kodzieliterówka w id albo w nazwie pliku — porównaj z XML
aplikacja zamyka się po starcieotwórz Logcat i znajdź pierwszą czerwoną linię ze swoim kodem
emulator zamarzanie uruchamiaj drugiego! poczekaj albo zgłoś się po kabel USB
Zasada pracowni: najpierw Logcat i sąsiad, potem nauczyciel.
Podsumowanie

Zapamiętaj

Ekran = XML + Kotlin

wygląd i logika osobno. Łączy je id elementu.

Run = Gradle → APK → emulator

jedno kliknięcie, trzy kroki pod spodem.

Emulator uruchamiamy raz

błędów szukamy w Logcat.

Następne zajęcia: formularze — EditText, RadioButton, CheckBox i pierwszy kalkulator.