ITnetwork Flashka zdarma C a C++ týden
Akce! Pouze tento týden sleva až 80 % na kurzy C++. Lze kombinovat s akcí 50 % bodů navíc na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!

Lekce 3 - Neobjevujte kolo, použijte Gradle

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, LinearLayout a jednoduchá kalkulačka pro Android v Kotlin, jsme se naučili používat LinearLayout. 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

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

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

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

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

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, Aplikace Zapisník v Kotlin - RelativeLayout a RecyclerView, se podíváme na navigaci a začneme tím pracovat na zápisníku příjmu a výdajů :)


 

Stáhnout

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

 

 

Článek pro vás napsal Samuel Kodytek
Avatar
Jak se ti líbí článek?
1 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.
Předchozí článek
LinearLayout a jednoduchá kalkulačka pro Android v Kotlin
Všechny články v sekci
Tvorba mobilních aplikací pro Android v Kotlin
Miniatura
Následující článek
Aplikace Zapisník v Kotlin - RelativeLayout a RecyclerView
Aktivity (2)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!