AppFunctions ist eine Android-Plattform-API mit einer zugehörigen Jetpack Bibliothek, die die Android-MCP-Integration vereinfacht. Damit können sich Ihre Apps wie MCP-Server auf dem Gerät verhalten und Funktionen bereitstellen, die als Tools für proaktive Funktionen sowie für Agents und Assistenten wie Google Gemini verwendet werden können. Seit Mai 2026 befindet sich die AppFunctions-Integration mit Gemini in einer privaten Vorabversion mit Trusted Testern. Sie können Ihre Apps jetzt auf die Verwendung von AppFunctions und Entwicklungstools vorbereiten.
Wenn Sie diese AppFunctions definieren, kann Ihre App Dienste, Daten und Aktionen für die in das Android-Betriebssystem integrierte Registrierung bereitstellen. So können Nutzer Aufgaben über Agents und Interaktionen auf Systemebene erledigen.
AppFunctions sind das mobile Äquivalent von Tools im Model Context
Protocol (MCP). Während MCP traditionell standardisiert, wie Agents eine Verbindung zu serverseitigen Tools herstellen, bieten AppFunctions denselben Mechanismus für Android-Apps. So können Sie die Funktionen Ihrer App als orchestrierbare „Tools“ bereitstellen, die von autorisierten Apps (Aufrufern) erkannt und ausgeführt werden können, um Nutzerabsichten zu erfüllen. Aufrufer benötigen die EXECUTE_APP_FUNCTIONS Berechtigung, um
AppFunctions zu erkennen und auszuführen. Dazu gehören Agents, Apps und KI
Assistenten wie Gemini.
AppFunctions ist auf Geräten mit Android 16 oder höher verfügbar.
Beispielanwendungsfälle
AppFunctions bieten einen leistungsstarken Mechanismus zum Automatisieren von Aufgaben und Optimieren von Nutzerinteraktionen. Wenn Sie die Funktionen Ihrer App öffnen, können Nutzer komplexe Aufgaben in natürlicher Sprache erledigen. Oft ist es dann nicht mehr erforderlich, Schritt für Schritt manuell in der Benutzeroberfläche zu navigieren.
Die folgenden Szenarien veranschaulichen, wie AppFunctions verwendet werden können, um die Nutzererfahrung in verschiedenen App-Kategorien zu verbessern:
Aufgabenverwaltung und Produktivität
- Nutzeranfrage: "Erinnere mich daran, heute um 17:00 Uhr mein Paket bei der Arbeit abzuholen".
- AppFunction-Aktion: Der Aufrufer identifiziert die relevante App zur Aufgabenverwaltung und ruft eine Funktion auf, um eine Aufgabe zu erstellen. Die Felder für Titel, Uhrzeit und Ort werden automatisch anhand des Prompts des Nutzers ausgefüllt.
/** * Create a new task or reminder with a title, due time, and location. * * @param title The descriptive title of the task (e.g., "Pick up my package"). * @param dueDateTime The specific date and time when the task should be completed. * @param location The physical location associated with the task (e.g., "Work"). * @return The created Task */ @AppFunction(isDescribedByKDoc = true) suspend fun createTask( title: String, dueDateTime: LocalDateTime? = null, location: String? = null, ): Task = TODO()
Medien und Unterhaltung
- Nutzeranfrage: "Erstelle eine neue Playlist mit den besten Jazzalben aus diesem Jahr".
- AppFunction-Aktion: Der Aufrufer führt eine Funktion zum Erstellen von Playlists aus in einer Musik-App aus und übergibt Kontext wie „beste Jazzalben für 2026“ als Abfrage, um die Playlist sofort zu generieren.
/** * Create a new music playlist based on a natural language query. * * @param query The description used to generate the playlist (e.g., "top jazz albums from 2026"). * @return The final created playlist based on songs. */ @AppFunction(isDescribedByKDoc = true) suspend fun createPlaylistFromQuery( query: String, ): Playlist = TODO()
App-übergreifende Workflows
- Nutzeranfrage: "Suche in Lisas E-Mail nach dem Nudelrezept und füge die Zutaten meiner Einkaufsliste hinzu".
- AppFunction-Aktion: Für diese Anfrage werden Funktionen aus mehreren Apps verwendet. Zuerst verwendet der Aufrufer die Suchfunktion einer E-Mail-App, um den Inhalt abzurufen. Anschließend werden die relevanten Zutaten extrahiert und die Funktion einer Einkaufslisten-App aufgerufen, um die Liste des Nutzers zu füllen.
/** * Search for emails matching a query or sender name to retrieve content like recipes. * * @param query The search term or contact name (e.g., "Lisa noodle recipe"). * @return A list of matching email summaries containing the requested information. */ @AppFunction(isDescribedByKDoc = true) suspend fun searchEmails( query: String, ): List<EmailSummary> = TODO() /** * Add a list of items or ingredients to the user's active shopping list. * * @param items The names of the ingredients or products to add to the list. * @return The final shopping list with new items added */ @AppFunction(isDescribedByKDoc = true) suspend fun addItemsToShoppingList( items: List<String>, ): ShoppingList = TODO()
Kalender und Terminplanung
- Nutzeranfrage: "Füge meinem Kalender für nächsten Montag um 18:00 Uhr die Geburtstagsparty meiner Mutter hinzu".
- AppFunction-Aktion: Die genehmigte Agent-App ruft die Funktion „Termin erstellen“ der Kalender App auf und analysiert den relevanten Kontext wie „nächsten Montag“ und „18:00 Uhr“, um den Eintrag zu erstellen, ohne dass der Nutzer den Kalender manuell öffnen muss.
/** * Schedule a new event on the user's primary calendar. * * @param title The name of the calendar event (e.g., "Mom's birthday party"). * @param startDateTime The specific date and time the event is scheduled to begin. * @return The created Event object. */ @AppFunction(isDescribedByKDoc = true) suspend fun createCalendarEvent( title: String, startDateTime: LocalDateTime, ): Event = TODO()
Funktionsweise von AppFunctions
Das folgende Diagramm veranschaulicht den typischen Ablauf, wie AppFunctions von Apps für einen Agent freigegeben und anschließend ausgeführt werden. Agents berücksichtigen bei der Bearbeitung von Nutzeranfragen wahrscheinlich sowohl serverseitige Remote-MCP-Tools als auch lokale AppFunctions. Der detaillierte Ablauf für die Verwendung lokaler AppFunctions ist wie folgt:
- AppFunction-Deklaration: Die Android-App ist so konzipiert, dass sie AppFunctions verwendet, um ihre Funktionen wie „Notiz erstellen“ oder „Nachricht senden“ verfügbar zu machen.
- Schemaerstellung: Die AppFunctions Jetpack-Bibliothek generiert eine XML Schemadatei, in der alle deklarierten AppFunctions in der App aufgeführt sind. Das Android Betriebssystem verwendet diese Datei, um die verfügbaren AppFunctions zu indexieren.
- Abrufen von Metadaten: Der Agent kann AppFunction-Metadaten abrufen, indem er sie abfragt. Zusätzlich zu funktionsspezifischen KDocs können Entwickler in den App-Metadaten betriebliche Muster und Einschränkungen auf App-Ebene definieren, um die Agent-Orchestrierung über mehrere Tools hinweg zu steuern.
- Auswahl und Ausführung von AppFunctions: Basierend auf Nutzerprompts wählt der Agent die entsprechende AppFunction mit den entsprechenden Parametern aus und führt sie aus.
Die AppFunctions Jetpack-Bibliothek vereinfacht die Bereitstellung der Funktionen Ihrer App.
Mit dem Annotation Processor können Sie die Funktionen annotieren, die Sie Agents zur Verfügung stellen möchten. Aufrufer können diese indexierten
Funktionen dann mit AppFunctionManager erkennen und aufrufen.
Bevor sie eine Funktion aufrufen, sollten Aufrufer prüfen, ob das Gerät die AppFunctions-Funktion unterstützt. Dazu versuchen sie, eine Instanz von AppFunctionManager abzurufen. Wenn die Funktion unterstützt wird, können Aufrufer mit
isAppFunctionEnabled(packageName,functionId)prüfen, ob eine bestimmte
Funktion in einer Ziel-App aktiviert ist. Für das Abfragen des Status von
Funktionen in anderen Paketen ist die
android.permission.EXECUTE_APP_FUNCTIONS Berechtigung erforderlich.
Ihre App muss nicht prüfen, ob die AppFunction-Funktion unterstützt wird. Das wird automatisch in der Jetpack-Bibliothek erledigt. So kann
AppFunctionManager beispielsweise prüfen, ob die Funktion unterstützt wird.
Hier ist ein Beispiel für AppFunctions für eine Notizen-App mit Funktionen zum Erstellen, Bearbeiten und Auflisten von Notizen:
@RequiresApi(36) @AndroidEntryPoint @AppFunctionServiceEntryPoint( serviceName = "TaskAppFunctionService", appFunctionXmlFileName = "task_app_function_service", ) abstract class BaseTaskAppFunctionService : AppFunctionService() { @Inject internal lateinit var taskRepository: TaskRepository /** * Creates a task based on [createTaskParams]. * * @param createTaskParams The parameter to describe how to create the task. */ @AppFunction(isDescribedByKDoc = true) suspend fun createTask( createTaskParams: CreateTaskParams, ): Task = withContext(Dispatchers.IO) { // Developers can use predefined exceptions to let the agent know // why it failed. if (createTaskParams.title == null && createTaskParams.content == null) { throw AppFunctionInvalidArgumentException("Title or content should be non-null") } val id = taskRepository.createTask( createTaskParams.title, createTaskParams.content ) return@withContext taskRepository .getTask(id) ?.toTask() ?: throw AppFunctionElementNotFoundException("Task not found for ID = $id") } // Maps internal TaskEntity private fun TaskEntity.toTask() = Task(id = id, title = title, content = description) }
/** The parameter to create the task. */ @AppFunctionSerializable(isDescribedByKDoc = true) data class CreateTaskParams( /** The title of the task. */ val title: String?, /** The content of the task. */ val content: String?, ) /** The user-created task. */ @AppFunctionSerializable(isDescribedByKDoc = true) data class Task( /** The ID of the task. */ val id: String, /** The title of the task. */ val title: String, /** The content of the task. */ val content: String, )
Beispiele, Funktion und Testtools
Wir haben Folgendes zur Verfügung gestellt, damit Sie Ihre Kenntnisse in AppFunctions verbessern können:
- Im AppFunctions-Beispiel können Sie prüfen und herausfinden, wie alles auf Ihren Geräten funktioniert.
- Mit der AppFunctions-Agent-Funktion können Sie die Entwicklung in den vier Phasen beschleunigen:
- Erkennung: Analysieren Sie Ihre Codebasis, um hochwertige Funktionen für die KI-Orchestrierung zu identifizieren und zu empfehlen.
- Implementierung und Konfiguration: Generieren Sie Kotlin-Implementierungen und konfigurieren Sie Systemmetadaten und Build-Abhängigkeiten.
- KDoc-Optimierung: Optimieren Sie die Dokumentation von Funktionen und Eigenschaften für KI Agents und Android MCP.
- Tests und Fehlerbehebung: Stellen Sie ADB-Befehle für die lokale Auswertung und Fehlerbehebung auf dem Gerät bereit.
- Für Befehlszeilentests und -prüfungen können Sie ADB-Befehle wie
adb shell cmd app_function ...verwenden, um die Funktions registrierung zu testen, Metadatenbeschreibungen zu prüfen und Funktionen auf dem Gerät auszuführen. - Wenn Sie Android MCP in Aktion erleben und End-to-End-Workflows ohne Prompts testen möchten, installieren Sie die Android-App des AppFunctions-Test-Agents auf Ihrem Gerät und verwenden Sie sie.
Häufig gestellte Fragen
In diesem Abschnitt werden häufig gestellte Fragen zu AppFunctions beantwortet.
Ich bin App-Entwickler. Kann ich AppFunctions schon implementieren?
Ja, Sie können AppFunctions in Ihrer App implementieren und testen. Folgen Sie dazu der Anleitung in den vorherigen Abschnitten.
Was ist der Unterschied zwischen AppFunctions und MCP?
Mit beiden können KI-Agents Tools orchestrieren. Es gibt jedoch erhebliche Unterschiede in der Architektur, Latenz und dem erforderlichen Aufwand für Entwickler. AppFunctions sind integrierte Hooks auf Betriebssystemebene, die nur für Android verfügbar sind und lokal ausgeführt werden. Im Gegensatz dazu ist ein Standard-MCP-Server eine plattformunabhängige Lösung, die auf der Ausführung in der Cloud und Netzwerk-Roundtrips basiert.
Kurz gesagt: Wenn Sie mit AppFunctions entwickeln, können Sie den vorhandenen App-Status direkt auf dem Gerät verwenden und müssen keine Dienste außerhalb Ihrer Android-App verwalten.
Ich habe AppFunctions in meiner App implementiert. Warum kann mein System-Agent nicht darauf zugreifen?
AppFunctions sind eine experimentelle Funktion. Um die Qualität der Gesamterfahrung in dieser experimentellen Phase sorgfältig zu bewerten, können nur eine begrenzte Anzahl von Apps und System-Agents auf die gesamte Pipeline zugreifen.
Wie kann ich meine App auf die allgemeine Verfügbarkeit von AppFunctions vorbereiten?
Überlegen Sie, welche Funktionen Ihrer App Sie für die Agent-Automatisierung bereitstellen möchten.
Sie können AppFunctions in Ihrer App implementieren. Folgen Sie dazu der Anleitung in den vorherigen Abschnitten auf dieser Seite und prüfen Sie, ob sie auf dem Gerät registriert sind. Rufen Sie dazu adb shell cmd app_function list-app-functions auf.
Kann ich vorab auf die End-to-End-Agent-Entwicklungserfahrung zugreifen?
Wir führen ein Early-Access-Programm (EAP) durch, um ausgewählte Apps für das Testen der End-to-End-Entwicklungserfahrung vorzubereiten, die für die Einführung von AppFunctions in der Produktion auf Android erforderlich ist. Wenn Sie Ihre AppFunctions über dieses EAP-Registrierungsformular einbinden möchten, können Sie Ihr Interesse bekunden. Wenn Sie Ihr Interesse bekunden, erhalten Sie NICHT automatisch Zugriff auf die vollständige Integration. Wir benachrichtigen Sie per E-Mail, wenn Ihre App für das EAP ausgewählt wurde oder wenn AppFunctions öffentlich verfügbar werden.
Wie kann ich Feedback zu AppFunctions geben?
Sie können Feedback zur API geben, indem Sie ein Problem melden und Ihr Interesse am Early-Access-Programm bekunden.