Java — objektově orientovaný programovací jazyk, který byl více než deset let hlavním jazykem Android SDK. Navzdory oficiálnímu přechodu Google na Kotlin zůstává Java důležitou součástí ekosystému: starší projekty, podnikové aplikace a miliony řádků kódu v Google Play nadále pracují v Javě. Podle zprávy JetBrains Developer Ecosystem (2025) přibližně 35 % Android projektů stále používá Javu. Více o aktuálních trendech si přečtěte v oficiální zprávě JetBrains.
Hlavní body
Java — univerzální programovací jazyk vytvořený společností Sun Microsystems v roce 1995. Hlavní princip — «Write Once, Run Anywhere»: zkompilovaný Java bajtkód běží na jakékoli platformě, kde je nainstalován virtuální stroj JVM. V kontextu mobilního vývoje se Java stala prvním oficiálním jazykem Android SDK, vydaným Googlem v roce 2008.
Architektura Javy je založena na třech komponentách: JDK (Java Development Kit) — sada nástrojů pro vývojáře, JRE (Java Runtime Environment) — běhové prostředí a JVM (Java Virtual Machine) — virtuální stroj. Android používá vlastní implementaci JVM — Android Runtime (ART), která nahradila Dalvik ve verzi 5.0 (Lollipop). ART spouští DEX bajtkód, který je kompilován z Java bajtkódu pomocí nástroje dx/d8.
Klíčová vlastnost Javy — automatická správa paměti pomocí Garbage Collector (GC). Vývojář nemusí explicitně uvolňovat paměť — GC sleduje nepoužívané objekty a odstraňuje je. V Android ART se používají Concurrent Mark Sweep (CMS) a Generational GC, optimalizované pro omezené zdroje mobilních zařízení. To snižuje zátěž vývojáře, ale může způsobovat «lagy» při sběru odpadu ve vlákně UI.
Android podporuje podmnožinu Java API, která se rozšiřuje s každou novou verzí OS. Android 12 (API 31) přidal podporu pro Java 11, včetně lambd se zachycením proměnných, modulárního systému JPMS a HTTP klienta java.net.http. Android 14 (API 34) zavedl experimentální podporu pro Java 17 prostřednictvím desugaringu D8/R8 — některé funkce (records, sealed classes) se překládají do kompatibilního kódu pro starší verze.
| Verze Javy | Android API (min) | Verze Androidu | Klíčové funkce |
|---|---|---|---|
| Java 7 | API 19 | 4.4 KitKat | try-with-resources, multi-catch |
| Java 8 | API 24 | 7.0 Nougat | Lambdy, Stream API, Optional |
| Java 11 | API 31 | 12 | HTTP Client, Local-Variable Syntax |
| Java 17 | API 34 | 14 | Records, Sealed Classes (D8) |
Android SDK zahrnuje Java kompilátor, nástroj dex (d8), aapt (Asset Packaging Tool), emulátor a knihovny android.* a java.*. Vývojář píše kód v Javě, kompiluje jej do .class souborů (JVM bajtkód), poté d8 převádí soubory na .dex (Dalvik Executable), které jsou zabaleny do APK spolu se zdroji a AndroidManifest.xml.
Gradle — sestavovací systém Android projektu. Soubor build.gradle (Groovy) nebo build.gradle.kts (Kotlin DSL) popisuje závislosti, verze SDK, příchutě (product flavors) a podpisy. Android Gradle Plugin (AGP) verze 8.x automatizuje desugaring — překlad moderních Java funkcí do zpětně kompatibilního kódu. Například java.time.LocalDate se převádí na kód kompatibilní s API 21+ beze změn ve zdrojovém kódu vývojáře.
// Jednoduchá Android Activity v Javě
package com.example.myapp;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = findViewById(R.id.textView);
tv.setText("Ahoj z Javy!");
}
// Metoda pro zpracování kliknutí na tlačítko
public void onButtonClick(View view) {
TextView tv = findViewById(R.id.textView);
tv.setText("Tlačítko stisknuto");
}
}Třída MainActivity dědí z AppCompatActivity — základní třídy z AndroidX pro zpětnou kompatibilitu. Metoda onCreate je volána při vytvoření Activity, v ní se nastavuje layout pomocí setContentView. findViewById propojuje Java proměnnou s prvkem z XML rozvržení. Metoda onButtonClick je propojena s tlačítkem pomocí atributu android:onClick v XML.
Životní cyklus Activity v Javě — sekvence callbacků: onCreate → onStart → onResume (aktivní), onPause → onStop → onDestroy (ukončení). Vývojář přepisuje tyto metody pro správu zdrojů. onCreate — inicializace, onPause — ukládání dat, onDestroy — uvolňování zdrojů. Android volá tyto metody při otáčení obrazovky, přechodu na pozadí a přijetí hovoru.
// Životní cyklus Activity se správou stavu
public class DetailActivity extends AppCompatActivity {
private String itemId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
itemId = getIntent().getStringExtra("ITEM_ID");
loadData(itemId);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("item_id", itemId);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
itemId = savedInstanceState.getString("item_id");
loadData(itemId);
}
private void loadData(String id) {
// Načítání dat podle identifikátoru
}
}Metoda onSaveInstanceState ukládá stav Activity při otáčení obrazovky nebo přepínání úloh. Bundle obsahuje páry klíč-hodnota — jednoduché typy, Parcelable nebo Serializable objekty. onRestoreInstanceState obnovuje uložený stav. Tento vzor je kritický pro Android, protože systém může zničit Activity při nedostatku paměti a obnovit ji při návratu uživatele.
Syntaxe Javy — podobná C, silně typovaná, objektově orientovaná. Každý .java soubor obsahuje jednu veřejnou třídu, jejíž název se shoduje s názvem souboru. Java nepodporuje funkce mimo třídy — vše je metoda. Vstupní bod — statická metoda public static void main(String[] args) pro konzolové aplikace nebo metody životního cyklu Android Activity pro mobilní zařízení.
Java dělí typy na primitivy (int, double, boolean, char, byte, short, long, float) a referenční typy (třídy, rozhraní, pole, enum). Primitivy jsou uloženy na zásobníku a předávány hodnotou. Objekty — na haldě, předávány referencí. Autoboxing automaticky převádí primitiv na obalový objekt (Integer, Double, Boolean), ale vytváří další objekty — v Androidu je to kritické pro výkon UI.
// Příklady datových typů a struktur Javy
public class DataTypes {
// Primitivy
int count = 42;
double price = 19.99;
boolean isActive = true;
char grade = 'A';
// Referenční typy
String name = "Android";
Integer boxed = 100; // autoboxing
List<String> items = new ArrayList<>();
// Metoda s Generics
public <T> T getFirst(List<T> list) {
return list.isEmpty() ? null : list.get(0);
}
// Enum pro pevnou sadu hodnot
public enum Status {
PENDING, LOADING, SUCCESS, ERROR
}
}Generika List<T> zajišťují typovou bezpečnost kolekcí. Metoda getFirst vrací prvek libovolného typu — konkrétní typ je určen v místě volání. Enum Status je kompilován do třídy s pevnou sadou konstant, každá instance je singleton. V Androidu se enum používá méně kvůli spotřebě paměti: ProGuard/R8 optimalizuje enum na int konstanty, kde je to možné.
Srovnání Javy a Kotlinu pro vývoj Android aplikací — jedno z hlavních témat od roku 2019, kdy Google prohlásil Kotlin za prioritní jazyk. Kotlin je plně kompatibilní s Javou — oba se kompilují do JVM bajtkódu, mohou se navzájem volat a používat stejné knihovny. Přístupy k psaní kódu se však zásadně liší.
Kotlin odstraňuje mnohomluvnost Javy: data class nahrazuje 50+ řádků Java třídy s gettry, settry, equals, hashCode, toString a copy. Null safety je zabudován do typového systému Kotlinu — NullPointerException je prakticky nemožný. Extension funkce umožňují přidávat metody k existujícím třídám bez dědičnosti. Smart Casts automaticky převádějí typy po kontrole.
| Aspekt | Java | Kotlin |
|---|---|---|
| Null safety | @Nullable / @NonNull anotace | String? / String — vestavěno |
| Data class | 50+ řádků s Lombok | data class User(val name: String) |
| Extension | Statické utilitní třídy | fun String.isEmail(): Boolean |
| Coroutines | AsyncTask / ExecutorService | suspend + Structured Concurrency |
| Lambdy | FunctionalInterface + ::method | Lambdy ve výchozím nastavení |
| DI anotace | @Inject, @Module, @Provides | Analogicky, ale méně kódu |
Z hlediska výkonu jsou Java a Kotlin identické — oba se kompilují do JVM bajtkódu, který Android ART spouští stejně. Rozdíl ve velikosti APK: Kotlin přidává ~200-400 KB za knihovnu kotlin-stdlib. Java projekty mají menší velikost APK kvůli absenci dalšího běhového prostředí, ale při použití Java Stream API a Optional může velikost APK vzrůst kvůli desugaringu.
Nástroje Java vývojáře pro Android zahrnují Android Studio, Gradle, profiler a emulátor. Android Studio — oficiální IDE založené na IntelliJ IDEA Community, obsahuje editor s automatickým doplňováním Javy, analyzátor kódu (lint), refaktorování a vizuální editor rozvržení (Layout Editor).
Android Gradle Plugin (AGP) verze 8.x spravuje sestavení: kompilaci Javy do tříd, desugaring, minifikaci ProGuard/R8, balení do APK/AAB. R8 — vylepšený desugaring a obfuskátor nahrazující ProGuard. Build variants (debug/release + product flavors) se konfigurují přes build.gradle. Gradle Daemon urychluje následující sestavení pomocí ukládání do mezipaměti.
// build.gradle (app) — konfigurace Java modulu
android {
compileSdk 34
defaultConfig {
applicationId "com.example.myapp"
minSdk 21
targetSdk 34
versionCode 1
versionName "1.0"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.11.0'
testImplementation 'junit:junit:4.13.2'
}Blok compileOptions určuje verzi Javy pro kompilaci — Java 17 je dostupná od AGP 8.x. Minimální SDK (minSdk) určuje minimální verzi Androidu, na které aplikace funguje. Target SDK — verze, pro kterou byla aplikace testována. Rozdíl mezi compileSdk a targetSdk: compileSdk — API pro kompilaci, targetSdk — chování běhového prostředí.
Omezení Javy v Androidu se stala důvodem přechodu Google na Kotlin. NullPointerException — nejčastější výjimka v Java-Android aplikacích, protože typový systém nerozlišuje mezi nullable a non-null referencemi. Google doporučuje anotace @Nullable a @NonNull z balíčku androidx.annotation, ale kompilátor je nekontroluje — pouze lint to dělá.
Nedostatek coroutines — další omezení: asynchronní operace v Javě vyžadují callbacky, AsyncTask (zastaralý od API 30), ExecutorService nebo RxJava. To vede k callback hell a únikům paměti při otáčení obrazovky. Kotlin coroutines se Structured Concurrency řeší tento problém na úrovni jazyka: coroutine je zrušena při zničení Activity bez ruční správy.
Šablonový kód v Javě — zdroj chyb při ručním psaní equals/hashCode, implementací Parcelable a ViewHolder pro RecyclerView. Knihovny Android KTX a Jetpack Compose jsou orientovány na Kotlin. Nová Android API (Room, Navigation, Compose) zveřejňují příklady v Kotlin ve výchozím nastavení, i když Java verze existují.
Často kladené otázky
Java — objektově orientovaný programovací jazyk od Sun Microsystems (1995), běžící na virtuálním stroji JVM. Byl hlavním jazykem Android SDK do roku 2019. Používá se v mobilním vývoji pro starší projekty, serverovou část (Spring) a podnikové aplikace. Vyznačuje se silným typováním, automatickým sběrem odpadu a multiplatformností bajtkódu.
Google prohlásil Kotlin za prioritní jazyk pro Android v roce 2019. Nové knihovny AndroidX, Jetpack Compose, doporučení architektury a dokumentace jsou ve výchozím nastavení poskytovány v Kotlin. Java zůstává plně podporovaná, ale API jsou navrhována s přístupem Kotlin-first. Java projekty vyžadují více šablonového kódu a nedostávají nové jazykové možnosti jako první.
Android podporuje Java 8 plně, Java 11 — částečně s Android 12+, Java 17 — experimentálně přes D8 desugaring. Android Gradle Plugin (AGP) 8.x překládá moderní bajtkód do kompatibilního kódu pro stará API přes desugar. Vývojář může psát v Javě 11+ pomocí lambd, Optional a DateTime API, ale records a sealed classes jsou dostupné pouze přes D8.
Kotlin vyžaduje méně kódu: data class nahrazuje desítky řádků Java boilerplate, null safety je vestavěn do typů, coroutines zjednodušují asynchronnost. Java nabízí jednodušší syntaxi pro začátečníky, osvědčený ekosystém knihoven a stabilní nástroje. Výkon běhového prostředí je identický — oba se kompilují do JVM bajtkódu spouštěného Android ART.
Android Studio — standardní IDE pro vývoj Android aplikací s podporou Javy a Kotlinu. Zahrnuje emulátor, profiler (CPU, memory, network), Layout Inspector, APK Analyzer. IntelliJ IDEA je vhodné pro serverovou Javu. Eclipse ADT je zastaralé a není podporováno Googlem. Android Studio také poskytuje nástroje pro migraci Java kódu do Kotlinu pomocí vestavěného konvertoru.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také