NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Lekce 9 - Android Programování - Neobjevujte kolo, použijte Gradle

V minulé lekci, Android programování - Životní cyklus aktivity, jsme se dozvěděli co je to aktivita a jaký je její životní cyklus.

Programovali jste v jiném jazyku či si říkáte, že nemá smysl stále dokola vynalézat kolo? Tak to jste zde dnes správně. Ukážeme si totiž, jak se vyhnout programování stejných věcí stále dokola.

Gradle

Kotlin/Java má oficiální podporu balíčkovacího nástroje Gradle. Možná si vzpomenete, že v minulých lekcích jsme museli počkat, než se nám projekt "zesynchronizoval". To byl právě balíčkovací nástroj Gradle, který stahoval knihovny potřebné k zapnutí Android aplikace.

Je důležité říci, že Gradle není pouze balíčkovací nástroj, ale dají se v něm volat i automatizované akce, např. generování kódu, spouštění unit testů při každém buildu apod.

Nejdříve si ukážeme, jak knihovny do svého projektu vůbec dostat. Dále si v dnešním tutoriálu představíme i několik knihoven, které byste do začátku měli znát.

Instalace

Pojďme si tedy založit nový projekt, Android studio nám při jeho založení vše připraví. Pro účely článku projekt nazvu SampleGradleProject.

Nyní je vhodná chvíle si položit otázku, jak to, že nám Gradle funguje, když jsme nestáhli žádný balíčkovací nástroj? Otevřme si složku projektu v "průzkumníku souborů".

Složka projektu v Android Studio - Android - Tvorba mobilních aplikací v Kotlin

Na odpověď naší otázky nám postačí složka gradle/, kde je uložený .jar soubor, reprezentující "celý" Gradle. Jelikož samotný Gradle je velice malý, nemusí nám vadit, že se nám vytváří v každém projektu znovu. Asi nemusím vysvětlovat, že je příjemnější a rychlejší mít takto balíčkovací systém bez nutnosti stahování a mnohdy "komplikovaného" instalování.

Přidávání knihoven

Pojďme zpět do Android Studia a otevřeme soubor build.gradle našeho modulu. Knihovny, které chceme v naší aplikaci využívat, budeme primárně psát do bloku `dependencies:

Gradle soubor v Android Studio – Dependencies - Android - Tvorba mobilních aplikací v Kotlin

Občas budeme muset upravit build.gradle v rootu projektu (to je druhý gradle soubor). Zde budeme definovat repositáře, ze kterých se potřebné knihovny mají stahovat.

Gradle soubor v Android Studio – Repositáře - Android - Tvorba mobilních aplikací v Kotlin

Pojďme tedy přidat knihovnu a následně ji použít v ukázkovém projektu. My použijeme knihovnu MPAndroidChart, která slouží k vytváření grafů. Vytvoříme si triviální aplikaci, která nám vykreslí koláčový graf. V grafu zobrazíme počet programátorů v určitém věkovém rozmezí. Naše data budou vypadat následovně:

  • Pod 24 let - 16,854 programátorů
  • 25 - 34 let - 31,770 programátorů
  • Nad 35 let - 15,950 programátorů

Pro náš příklad používám statistiku od Stack Overflow.

Začněme tím, že upravíme blok repositories v rootu projektu, kam přidáme repositář maven. Příslušný blok kódu bude nyní vypadat takto:

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
    }
}

Tím Gradlu říkáme, že knihovna, kterou budeme stahovat, je uložená na této adrese. Dále přidáme samotnou knihovnu do bloku dependencies (to je druhý soubor build.gradle v modulu). Náš blok dependecies bude tedy vypadat nějak takto:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0-alpha'
}

Po tom, co jsme provedli obě akce, je potřeba projekt "synchronizovat". To provedeme tlačítkem "Sync Now" v pravém horním rohu:

Synchronizace Kotlin projektu v Android Studio - Android - Tvorba mobilních aplikací v Kotlin

Máme všechno co potřebujeme, pojďme tedy konečně začít psát kód. Nejdříve si upravme naši aktivitu. Protože zatím umíme používat pouze LinearLayout, přepíšeme ConstraintLayout nějak takto:

<?xml version="1.0" encoding="utf-8"?>
<android.widget.LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                             xmlns:tools="http://schemas.android.com/tools"
                             tools:context=".MainActivity"
                             android:layout_width="match_parent"
                             android:layout_height="match_parent"
                             android:orientation="horizontal"
                             android:gravity="center">

    <!-- Zde za okamžik vložíme náš graf -->

</android.widget.LinearLayout>

Dále potřebujeme přidat koláčový graf. Toho docílíme přidáním následujícího kódu na místo komentáře v předchozí ukázce:

<com.github.mikephil.charting.charts.PieChart
            android:id="@+id/chart"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

Dále potřebujeme graf vyplnit daty. Pojďme tedy do MainActivity.kt a pomocí metody findViewById() graf vybereme. Graf bude typu PieChart. Metoda onCreate() tedy bude vypadat nějak takto:

super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val chart = findViewById<PieChart>(R.id.chart)

Také si musíme připravit data, která budeme chtít zobrazit:

val entries = listOf(
    PieEntry(16854f, "Pod 24 let"),
    PieEntry(31770f, "25 - 34 let"),
    PieEntry(15950f, "Nad 35 let")
)

Dále budeme muset vytvořit titulek, nastavit barvy, velikost písma a ve finále předat tyto informace grafu. To uděláme následujícím kódem:

val dataSet = PieDataSet(entries, "Věkové rozmezí programátorů za rok 2018")

dataSet.colors = ColorTemplate.MATERIAL_COLORS.toList() //Barvy pozadí
dataSet.valueTextSize = 18f //Velikost písma

chart.data = PieData(dataSet)
chart.description.text = "" //Popisek chceme prázdný, není jaký použít

Celá naše metoda onCreate() vypadá tedy nějak takto:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val chart = findViewById<PieChart>(R.id.chart)


    val entries = listOf(
        PieEntry(16854f, "Pod 24 let"),
        PieEntry(31770f, "25 - 34 let"),
        PieEntry(15950f, "Nad 35 let")
    )

    val dataSet = PieDataSet(entries, "Věkové rozmezí programátorů za rok 2018")

    dataSet.colors = ColorTemplate.MATERIAL_COLORS.toList()
    dataSet.valueTextSize = 18f

    chart.data = PieData(dataSet)
    chart.description.text = ""
}

Pojďme zkusit jestli funguje vše jak jsme chtěli:

Aplikace - Android - Tvorba mobilních aplikací v Kotlin

Pokud při kompilaci projektu narazíte na chybu: More than one file was found with OS independent path 'META-INF/proguard/androidx-annotations.pro', přidejte do bloku android v gradle kód níže. Jedná se o známý problém se současnou verzí. Více informací

// Temporary fix
packagingOptions {
    exclude 'META-INF/proguard/androidx-annotations.pro'
}

Vidíme, že vše funguje jak má.

V jedné z dalších lekcí Gradle využijeme, až si budeme ukazovat, jak získat data z internetu (ve formátu JSON) a jak tento formát zpracovat. Oboje umí i sám Kotlin, ale pomocí knihoven nám to půjde mnohem snadněji. Dá se říci, že se staly takovým nepsaným standardem.

V příští lekci, Android programování - ConstraintLayout - Vytvoření omezení, si představíme ConstraintLayout a ukážeme si, jak vytvářet a odstraňovat omezení různými způsoby.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 54x (16.64 MB)
Aplikace je včetně zdrojových kódů v jazyce Kotlin

 

Předchozí článek
Android programování - Životní cyklus aktivity
Všechny články v sekci
Android - Tvorba mobilních aplikací v Kotlin
Přeskočit článek
(nedoporučujeme)
Android programování - ConstraintLayout - Vytvoření omezení
Článek pro vás napsal Samuel Kodytek
Avatar
Uživatelské hodnocení:
11 hlasů
Autor se věnuje všem jazykům okolo JVM. Rád pomáhá lidem, kteří se zajímají o programování. Věří, že všichni mají šanci se naučit programovat, jen je potřeba prorazit tu bariéru, který se říká lenost.
Aktivity