CameraX für Kotlin: Komplettes Tutorial mit Beispielen
1. Was ist CameraX und warum braucht man es?
CameraX ist eine Bibliothek von Google für die Kameraentwicklung auf Android, die in Kotlin und Java geschrieben ist. Sie bietet eine einfache und konsistente API für die Arbeit mit der Kamera und abstrahiert die Komplexität der Low-Level-Camera2-API. CameraX löst viele Probleme, mit denen Entwickler konfrontiert sind: Unterstützung verschiedener Android-Versionen, Kompatibilität mit unterschiedlichen Geräteherstellern, Verwaltung des Activity/Fragment-Lebenszyklus und Bildschirmdrehungen.
Warum CameraX verwenden? Erstens vereinfacht es die Entwicklung enorm: Statt hunderter Codezeilen für die Kamerakonfiguration, Vorschau und Bildaufnahme schreiben Sie nur 10-20 Zeilen. Zweitens gewährleistet es Kompatibilität mit Geräten ab Android 5.0 (API 21). Drittens verarbeitet CameraX automatisch komplexe Szenarien wie das Wechseln zwischen Kameras, Orientierungsänderungen und das Speichern des Zustands bei Bildschirmdrehung. Viertens enthält die Bibliothek integrierte Erweiterungen (Extensions) wie HDR, Nachtmodus und Porträtmodus, die auf den meisten Geräten ohne zusätzliche Konfiguration funktionieren.
CameraX ist ideal für Apps, die eine schnelle Kameraintegration benötigen: Messenger, soziale Netzwerke, QR-Code-Scanner, Videoanruf-Apps und einfache Kameras. Wenn Sie eine professionelle App mit vollständiger Kontrolle über jedes Bild benötigen (z. B. für Computer Vision oder professionelle Videoaufnahmen), sollten Sie Camera2 in Betracht ziehen. Für 90% der Anwendungsfälle ist CameraX jedoch die beste Wahl.
2. Installation
CameraX wird über das Gradle-Build-System installiert. Fügen Sie für ein Kotlin-Projekt die Abhängigkeiten in Ihre build.gradle-Datei (Module: app) ein.
Der genaue Gradle-Code:
dependencies {
// Core CameraX
def camerax_version = "1.3.1"
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
implementation "androidx.camera:camera-view:${camerax_version}"
// Für Erweiterungen (HDR, Nachtmodus usw.)
implementation "androidx.camera:camera-extensions:${camerax_version}"
// Für Video
implementation "androidx.camera:camera-video:${camerax_version}"
}
Stellen Sie außerdem sicher, dass in Ihrer build.gradle (Project) das Google-Repository angegeben ist:
allprojects {
repositories {
google()
mavenCentral()
}
}
Nach dem Hinzufügen der Abhängigkeiten synchronisieren Sie Ihr Projekt (Sync Now).
3. Schnellstart – Minimales funktionierendes Beispiel
Erstellen Sie eine neue Activity oder ein neues Fragment. Fügen Sie im Layout (XML) ein PreviewView hinzu:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.camera.view.PreviewView
android:id="@+id/viewFinder"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Jetzt der Code für die Activity in Kotlin:
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.camera.core.CameraSelector
import androidx.camera.core.Preview
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
class MainActivity : AppCompatActivity() {
private lateinit var cameraExecutor: E