Willkommen zurück zur Blogpost-Reihe „Intelligente Android-Apps entwickeln“. In dieser Reihe verwandeln wir eine einfache Android-App in eine personalisierte, intelligente und agentenbasierte Anwendung. Im vorherigen Beitrag haben wir Jetpacker vorgestellt, die Demo-App, die wir in dieser Reihe verwenden.
In diesem Blogpost erfahren Sie, wie Sie Gemini Nano über die Prompt API von ML Kit verwenden können, um intelligente On-Device-Funktionen zu entwickeln.
Intelligente On-Device-Funktionen ermöglichen es, Prompts und Daten direkt auf einem Gerät zu verarbeiten, ohne Daten an einen Server zu senden. Das bietet einige Vorteile:
- Nutzerdaten können lokal auf dem Gerät verarbeitet werden, um die Privatsphäre der Nutzer zu schützen.
- Die Funktionalität des Modells ist auch bei einer lückenhaften oder fehlenden Internetverbindung zuverlässig.
- Es fallen keine zusätzlichen Kosten für die Cloud-Inferenz an, da alles auf der Hardware des Nutzers ausgeführt wird.
Unter Berücksichtigung der Vorteile von On-Device-KI haben wir drei Funktionen für Jetpacker identifiziert, die die Nutzerfreundlichkeit verbessern können: Zusammenfassen von Reiseplänen, Verwalten von Ausgaben und Aufzeichnen von Sprachnotizen.
Hochwertige, maßgeschneiderte Zusammenfassung von kurzen Texten
Auf dem Bildschirm „Reiseplan“ erhalten Nutzer einen schnellen Überblick über alle Aktivitäten für eine bestimmte Reise. Da dieser Bildschirm viele Informationen enthält, kann er schnell unübersichtlich werden. Damit Nutzer sich nicht überfordert fühlen, können wir oben einen Bereich Reise vorbereiten einfügen.
Wenn wir einen Reiseplan eingeben und ein LLM bitten, ihn zusammenzufassen, können wir eine kurze Zusammenfassung der Reise zusammen mit Packtipps und nützlichen lokalen Redewendungen generieren. Das ist aus mehreren Gründen ein guter Anwendungsfall für ein On-Device-Modell:
- Leistung und Qualität:Sowohl der Eingabe- als auch der Ausgabetext sind relativ kurz. Daher können wir davon ausgehen, dass die Leistung und Qualität einer On-Device-Lösung mit leistungsstärkeren Cloud-Modellen vergleichbar sind.
- Skalierbarkeit:Durch die Verlagerung der Inferenz auf das Gerät können wir diese Funktion von einigen wenigen Nutzern auf Millionen von Nutzern skalieren, ohne uns Gedanken über steigende Kosten für die Cloud-Inferenz machen zu müssen.
- Niedrige Latenz und Zuverlässigkeit:Die Inferenz auf dem Gerät garantiert eine niedrige Latenz und sorgt für eine zuverlässige Nutzung, auch wenn Nutzer offline sind.
Für die Entwicklung mit On-Device-KI verwenden wir Gemini Nano, das effizienteste Modell von Google, das für Mobilgeräte optimiert ist. Gemini Nano wurde vor einigen Jahren eingeführt und läuft inzwischen auf über 140 Millionen Geräten. Die neueste Version des Modells, Gemini Nano 4, basiert auf der Architektur des kürzlich veröffentlichten Gemma 4-Modells und wurde für maximale Akku- und Leistungseffizienz optimiert.
Mit der Prompt API von ML Kit können wir die neuen Modellfunktionen von Gemini Nano 4 nutzen, um unsere On-Device-Funktionen zu testen. Wir erstellen einen Prompt, der den Reiseplan einer Reise enthält, und bitten das Modell, eine Zusammenfassung mit Vorbereitungstipps zu generieren.
Um den optimalen Prompt zu finden, sind in der Regel einige Iterationen erforderlich. Die AICore-App ist für diesen Schritt im Prozess ideal. Nachdem wir die Entwicklervorschauoption für AICore aktiviert haben, können wir Vorschauversionen von Modellen wie Gemini Nano 4 herunterladen, um Prompts zu testen und die erwarteten Ausgaben des Modells zu sehen. Nach einigen Iterationen des Prompts konnten wir die Antwortzeit von 13 Sekunden auf unter 2 Sekunden verkürzen. Hier finden Sie die endgültige Codeimplementierung und den Prompt.
[ASSET HERE - FILE TOO LARGE ATM]
Lokale Verarbeitung vertraulicher Nutzereingaben
Als Nächstes entwickeln wir einen einfachen Ausgabenmanager, der Nutzern hilft, ihre Reise noch besser zu genießen. Er nimmt ihnen die manuelle Arbeit ab, Belege zu sortieren und Budgets zu berechnen.
Da Belege vertrauliche Informationen wie Kreditkartennummern und Adressen enthalten können, ist dies ein weiterer guter Anwendungsfall für eine On-Device-Lösung. Bei der Verarbeitung auf dem Gerät können Nutzer darauf vertrauen, dass private Informationen lokal auf dem Gerät verarbeitet werden, ohne dass ihre Daten in die Cloud gesendet werden.
Außerdem bietet Gemini Nano 4 verbesserte Modellfunktionen für Multimodalität, insbesondere für Aufgaben zum Bildverständnis wie OCR und Extraktion visueller Daten. Damit ist es eine hervorragende Lösung für Aufgaben wie das Extrahieren von Informationen aus Belegen.
In diesem Anwendungsfall wird mit dem Prompt ein Bild des Belegs analysiert und Informationen wie ein generierter Titel, der ausgegebene Betrag und die Kategorie der Ausgabe ausgegeben. Damit das Modell die Informationen im bevorzugten Format ausgibt, können wir die Structured Output API von ML Kit verwenden, um nahtlos ein von uns definiertes Kotlin-Datenobjekt auszugeben.
// implementation("com.google.mlkit:genai-prompt:1.0.0-beta3")
// ksp("com.google.mlkit:genai-schema-compiler:1.0.0-alpha1")
@Generable("Information extracted from an expense receipt")
data class ParsedReceipt(
@Guide("Generated title for the expense less than 6 words. Based on restaurant or activity name.")
val title: String,
@Guide("Total amount of the expense. Look for values at the bottom and words like total or balance due.")
val amount: Double,
@Guide("Type of expense", enumValues = ["travel", "food", "shopping", "entertainment", "other"])
val category: String,
)
val prompt = "Determine if the image is a receipt or expense.
If it is NOT a receipt or expense, output the text 'NOT_A_RECEIPT'.
Otherwise, parse the receipt information."
val request = generateContentRequest(ImagePart(bitmap), TextPart(prompt)) {}
val requestWithStructuredOutput = generateTypedContentRequest(request, ParsedReceipt::class)
// Define the configuration for Gemini Nano 4 E4B preview model
// When selecting models, you can specify which performance charactertists are most important
// for your use case. Use ModelPreference.FULL when you want to prioritize reasoning power over speed.
// Use ModelPreference.FAST when complex logic is not required and latency is a priority.
val previewFullConfig = generationConfig {
modelConfig = modelConfig {
releaseStage = ModelReleaseStage.PREVIEW
preference = ModelPreference.FULL
}
}
val geminiNano4BPreviewModel = Generation.getClient(previewFullConfig)
val response = geminiNano4BPreviewModel.generateContent(requestWithStructuredOutput)
val parsedReceipt: ParsedReceipt? = response.candidates.firstOrNull()?.responseMultimodale Eingabe
Schließlich möchten wir Nutzern die Möglichkeit geben, während der Reise Audio-Memos aufzunehmen. Dazu entwickeln wir eine Funktion für Sprachnotizen, die vollständig auf dem Gerät ausgeführt wird. Mit der Speech Recognition API von ML Kit können Nutzer kurze Sprachnotizen aufzeichnen, die automatisch in Text transkribiert werden. Anhand des transkribierten Texts wird mit der Prompt API von ML Kit ermittelt, welche Reiseaktivität mit der aufgezeichneten Sprachnotiz verknüpft ist. So können Nutzer ihre Reise ganz einfach zusammenfassen, während sie durch den Reiseplan scrollen.
Mit der ML Kit GenAI Speech Recognition API können Sie Audioinhalte vollständig auf dem Gerät in Text umwandeln. Dazu stehen zwei verschiedene Modi zur Verfügung. Im einfachen Modus wird ein herkömmliches Spracherkennungsmodell auf dem Gerät verwendet. Er ist auf den meisten Android-Geräten mit API-Level 31 und höher verfügbar. Im erweiterten Modus wird Gemini Nano verwendet, um eine größere Sprachabdeckung und eine bessere Qualität zu bieten. Er wird derzeit auf Pixel 10-Geräten unterstützt.
Für unsere Funktion kombinieren wir die Speech Recognition API mit der ML Kit GenAI Prompt API:
// implementation("com.google.mlkit:genai-prompt:1.0.0-beta3")
// implementation("com.google.mlkit:genai-speech-recognition:1.0.0-alpha1")
val tripEvents = ...
// Set up speech recognition
val speechRecognizerOptions =
speechRecognizerOptions {
locale = Locale.US
preferredMode = SpeechRecognizerOptions.Mode.MODE_ADVANCED
}
val speechRecognizer: SpeechRecognizer = SpeechRecognition.getClient(speechRecognizerOptions)
suspend fun transcribeVoiceNote(recognizer: SpeechRecognizer) {
// Display partial text as the user is recording audio
var partialTextResponse = ""
// Display the full text once user is finished recording audio
var transcription = ""
val request: SpeechRecognizerRequest
= speechRecognizerRequest { audioSource = AudioSource.fromMic() }
recognizer.startRecognition(request).collect { response ->
when (response) {
is SpeechRecognizerResponse.PartialTextResponse -> {
partialTextResponse = response.text
}
is SpeechRecognizerResponse.FinalTextResponse -> {
transcription = response.text
processAndCategorizeVoiceNote(transcription, tripEvents)
}
}
}
}
fun processAndCategorizeVoiceNote(transcribedVoiceNote: String, events: List<Event>) {
val prompt = "Given the voice note $transcribedVoiceNote
and the following events for this trip: $events, rewrite this transcription
to remove filler words. Then, identify which events from the
list this rewritten transcription matches to."
// Utilize ML Kit's Prompt API to process voice note and tag it with the relevant trip activities
Generation.getClient().generateContent(prompt)
}Fazit
Mithilfe der GenAI-APIs von ML Kit konnten wir Gemini Nano nutzen, um intelligente Funktionen für die JetPacker-App zu entwickeln, die vollständig auf dem Gerät ausgeführt werden. So konnten wir die Nutzerfreundlichkeit verbessern, ohne dass zusätzliche Cloud-Kosten entstanden sind.
Den vollständigen Quellcode für Jetpacker finden Sie auf GitHub. Im Video Build Intelligent Android apps with Google’s AI erfahren Sie mehr darüber, wie Sie intelligente Funktionen mithilfe von On-Device-Modellen, cloudbasierter Verarbeitung und den neuesten Agent-Frameworks direkt in Ihre App einbinden können.
Weitere Informationen
Weitere Teile dieser Blogpost-Reihe:
Teil 1:Einführung der App und allgemeiner Überblick.
Teil 2 (dieser Beitrag): On-Device-Technologie. Erfahren Sie mehr über die GenAI-APIs von ML Kit und Gemini Nano, um datenschutzorientierte Funktionen wie die Zusammenfassung von Routen, das Parsen von Belegen und die lokale Audioverarbeitung zu entwickeln.
Teil 3 :Hybrid- und Cloud-Schlussfolgerungen. Hier erfahren Sie, wie Sie mit Firebase AI Logic LLM-Antworten mit realen Daten wie Google Maps und Webkontext fundieren können.
Teil 4:Systemintegration. Integration in das Android-System für künstliche Intelligenz mit AppFunctions
Teil 5 (demnächst verfügbar): Agentische In-App-Workflows. Erweitern Sie die App mit einem End-to-End-Buchungsassistenten, der auf A2UI und ADK basiert.
Sie möchten mehr über die Android-Entwicklung erfahren? Folge Android Developers auf YouTube oder LinkedIn.
Für alle Code-Snippets in diesem Blogpost gilt der folgende Urheberrechtshinweis:
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
AnleitungenWillkommen zurück zur Blogpost-Reihe „Intelligente Android-Apps entwickeln“. In dieser Reihe verwandeln wir eine einfache Android-App in eine personalisierte, intelligente und agentenbasierte Anwendung.
Thomas Ezan, Jolanda Verhoef, Caren Chang • Lesezeit: 8 Minuten -
AnleitungenJetpacker ist eine technische Showcase-App, die unser Team für die diesjährige Google I/O von Grund auf neu entwickelt hat (mit Antigravity). Im Grunde hilft Jetpacker Nutzern, ihr nächstes großes Abenteuer zu planen, zu erkunden und zu genießen.
Jolanda Verhoef • Lesezeit: 4 Minuten -
AnleitungenWillkommen zurück zur Blogpost-Reihe „Intelligente Android-Apps entwickeln“. In dieser Reihe verwandeln wir eine einfache Android-App in eine personalisierte, intelligente und agentenbasierte Anwendung. In unserem vorherigen Beitrag haben wir uns angesehen, wie Sie mit Firebase AI Logic cloudbasierte und hybride KI-Funktionen entwickeln können.
Ben Weiss • Lesezeit: 6 Minuten
Lassen Sie sich Woche für Woche die neuesten Informationen zur Android-Entwicklung zusenden.