Descripción general de AppFunctions

AppFunctions permite que tu app para Android comparta partes específicas de la funcionalidad que el sistema y varios agentes y asistentes de IA pueden descubrir e invocar. Cuando defines estas funciones, permites que tu app proporcione servicios, datos y acciones al SO Android, lo que permite que los usuarios completen tareas a través de agentes de IA y de interacciones a nivel del sistema.

AppFunctions funciona como el equivalente para dispositivos móviles de las herramientas del Protocolo de contexto del modelo (MCP). Si bien el MCP estandariza tradicionalmente la forma en que los agentes se conectan a las herramientas del servidor, AppFunctions proporciona el mismo mecanismo para las apps para Android. Esto te permite exponer las capacidades de tu app como "herramientas" orquestables que las apps autorizadas (llamadores) pueden descubrir y ejecutar para satisfacer los intents del usuario. Los llamadores deben tener el EXECUTE_APP_FUNCTIONS permiso para descubrir y ejecutar AppFunctions, y pueden incluir agentes, apps, y asistentes de IA como Gemini.

AppFunctions funciona con dispositivos que ejecutan Android 16 o versiones posteriores.

Ejemplos de casos de uso

AppFunctions proporciona un mecanismo potente para automatizar tareas y optimizar las interacciones del usuario. Cuando expones las capacidades de tu app, permites que los usuarios logren objetivos complejos con lenguaje natural, lo que, a menudo, evita la necesidad de una navegación manual paso a paso con tu IU.

En las siguientes situaciones, se ilustra cómo se pueden usar AppFunctions para impulsar experiencias en una variedad de categorías de apps:

  • Administración de tareas y productividad
    • Solicitud del usuario: "Recuérdame que recoja mi paquete en el trabajo hoy a las 5 p.m.".
    • Acción de AppFunction: El llamador identifica la app de administración de tareas pertinente e invoca una función para crear una tarea, que completa automáticamente los campos de título, hora y ubicación según la instrucción del usuario.
  • Medios de comunicación y entretenimiento
    • Solicitud del usuario: "Crea una playlist nueva con los mejores álbumes de jazz de este año".
    • Acción de AppFunction: El llamador ejecuta una función de creación de playlist en una app de música y pasa el contexto, como "los mejores álbumes de jazz de 2026", como la consulta para generar y lanzar el contenido de inmediato.
  • Flujos de trabajo entre apps
    • Solicitud del usuario: "Busca la receta de fideos en el correo electrónico de Lisa y agrega los ingredientes a mi lista de compras".
    • Acción de AppFunction: Esta solicitud usa funciones de varias apps. Primero, el llamador usa la función de búsqueda de una app de correo electrónico para recuperar el contenido. Luego, extrae los ingredientes pertinentes e invoca la función de una app de lista de compras para completar la lista del usuario.
  • Calendarios y programación
    • Solicitud del usuario: "Agrega la fiesta de cumpleaños de mamá a mi calendario para el próximo lunes a las 6 p.m.".
    • Acción de AppFunction: La app agente aprobada invoca la función "crear evento" de la app de calendario y analiza el contexto pertinente, como "el próximo lunes" y "las 6 p.m.", para crear la entrada sin que el usuario deba abrir el calendario de forma manual.

Cómo funciona AppFunctions

AppFunctions es una función de la plataforma Android 16 y una biblioteca de Jetpack complementaria que permite que las apps expongan funciones específicas para que los llamadores, como las apps agente, accedan a ellas y las ejecuten en el dispositivo.

En el siguiente diagrama, se ilustra el flujo típico de cómo las apps comparten AppFunctions con un agente y, luego, las ejecutan. Es probable que los agentes consideren las herramientas de MCP remotas del servidor y las AppFunctions locales cuando manejan las solicitudes de los usuarios. El flujo detallado para usar AppFunctions locales es el siguiente:

  • Declaración de AppFunction: La app para Android se compila para exponer sus AppFunctions, como "Crear nota" o "Enviar mensaje".
  • Generación de esquemas: La biblioteca de AppFunctions Jetpack genera un archivo de esquema XML que enumera todas las AppFunctions declaradas en la app. El SO Android usa este archivo para indexar las AppFunctions disponibles.
  • Recuperación de metadatos: El agente puede recuperar los metadatos de AppFunction consultándolos.
  • Selección y ejecución de AppFunction: Según las instrucciones del usuario, el agente seleccionará y ejecutará la AppFunction adecuada con los parámetros correspondientes.
Diagrama que muestra el flujo típico de AppFunctions desde la exposición de la app hasta la ejecución del agente.
Figura 1: El flujo típico de cómo un agente expone y luego ejecuta AppFunctions.

La biblioteca de AppFunctions Jetpack simplifica la exposición de la funcionalidad de tu app. Con el procesador de anotaciones, los desarrolladores anotan las funciones que quieren exponer. Luego, los llamadores pueden descubrir e invocar estas funciones indexadas con AppFunctionManager.

Antes de invocar una función, los llamadores deben verificar que el dispositivo admita la función AppFunctions. Para ello, deben intentar recuperar una instancia de AppFunctionManager. Una vez que se admita, los llamadores podrán verificar si una función específica está habilitada en una app de destino con isAppFunctionEnabled(packageName, functionId). Para consultar el estado de las funciones en otros paquetes, se requiere el android.permission.EXECUTE_APP_FUNCTIONS permission.

No es necesario que tu app verifique si se admite la función AppFunction. Esto se maneja automáticamente en la biblioteca de Jetpack. Por ejemplo, AppFunctionManager puede verificar si se admite la función.

Este es un ejemplo de AppFunctions para una app para tomar notas con capacidades para crear, editar y enumerar notas:

/**
 * A note app's [AppFunction]s.
 */
class NoteFunctions(
    private val noteRepository: NoteRepository
) {
    /**
     * Lists all available notes.
     *
     * @param appFunctionContext The context in which the AppFunction is executed.
     */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun listNotes(appFunctionContext: AppFunctionContext): List<Note>? {
        return noteRepository.appNotes.ifEmpty { null }?.toList()
    }

    /**
     * Adds a new note to the app.
     *
     * @param appFunctionContext The context in which the AppFunction is executed.
     * @param title The title of the note.
     * @param content The note's content.
     */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun createNote(
        appFunctionContext: AppFunctionContext,
        title: String,
        content: String
    ): Note {
        return noteRepository.createNote(title, content)
    }

    /**
     * Edits a single note.
     *
     * @param appFunctionContext The context in which the AppFunction is executed.
     * @param noteId The target note's ID.
     * @param title The note's title if it should be updated.
     * @param content The new content if it should be updated.
     */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun editNote(
        appFunctionContext: AppFunctionContext,
        noteId: Int,
        title: String?,
        content: String?,
    ): Note? {
        return noteRepository.updateNote(noteId, title, content)
    }
}

/**
 * A note.
 */
@AppFunctionSerializable(isDescribedByKDoc = true)
data class Note(
    /** The note's identifier */
    val id: Int,
    /** The note's title */
    val title: String,
    /** The note's content */
    val content: String
)

Preguntas frecuentes

En la siguiente sección, se abordan las preguntas frecuentes sobre AppFunctions.

P.: Soy desarrollador de apps. ¿Puedo implementar AppFunctions hoy?

R: Sí, es posible implementar y probar AppFunctions en tu app siguiendo las instrucciones detalladas en las secciones anteriores.

P.: Implementé AppFunctions en mi app. ¿Por qué mi agente del sistema no puede acceder a ellas?

R: AppFunctions es una función experimental. Para evaluar cuidadosamente la calidad de la experiencia general durante esta fase experimental, solo una cantidad limitada de apps y agentes del sistema pueden acceder a toda la cadena de procesamiento.

P.: Estoy desarrollando un agente. ¿Puedo acceder a AppFunctions que proporcionan las apps?

R: Tu agente de prueba puede acceder a AppFunctions en un entorno de desarrollo. Durante esta fase experimental, solo una cantidad limitada de agentes del sistema puede acceder a AppFunctions y ejecutarlas en producción.

P.: ¿Qué agentes del sistema tienen acceso a AppFunctions?

R: Solo una cantidad limitada de agentes del sistema puede acceder a toda la cadena de procesamiento mientras AppFunctions sea experimental.

P.: ¿Cómo puedo preparar mi app para la disponibilidad general de AppFunctions?

R: Considera qué funciones de tu app quieres exponer a la automatización agente. Puedes implementar AppFunctions en tu app. Para ello, sigue los pasos de las secciones anteriores de esta página y verifica que estén registradas en el dispositivo llamando a adb shell cmd app_function list-app-functions.

P.: ¿Puedo obtener acceso anticipado a la experiencia de desarrollador agente de extremo a extremo?

R: Estamos llevando a cabo un Programa de Acceso Anticipado (EAP) para incorporar apps seleccionadas en la prueba de la experiencia de desarrollador de extremo a extremo necesaria para lanzar AppFunctions a producción en Android. Puedes registrar tu interés en integrar tus AppFunctions a través de este formulario de registro del EAP. Si registras tu interés, NO obtendrás acceso automáticamente a la integración completa. Te enviaremos un correo electrónico si se selecciona tu app para el EAP o para informarte cuando AppFunctions esté disponible de forma pública.

P.: ¿Cómo puedo enviar comentarios sobre AppFunctions?

R: Puedes enviar comentarios sobre la API registrando un problema y registrando tu interés en el formulario del Programa de Acceso Anticipado.