Exploring App Functions - unsolved unconference

Droidcon London 2025

@jamiesanson, Staff Android Engineer @ M&S

App Functions

An app function is a piece of functionality that apps expose to the system for cross-app orchestration.

Using App Functions

AndroidX AppFunctions

  • KSP plugin
  • @AppFunction
  • A bound Service
  • Various other things (schema, serialization annotation)
class NotosAppFunctions {
    @AppFunction
    suspend fun createNote(
        context: AppFunctionContext,
        text: String,
    ): Long = ...
}
class NotosAppFunctions {
    /**
     * Create a note given some text. 
     * Notes must be less than 2000 characters.
     */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun createNote(
        context: AppFunctionContext,
        text: String,
    ): Long = ...
}

And there’s more

  • Custom factories to support constructor injection
  • Describe functions with a versioned schema
  • Complex, Serializable inputs and outputs
<uses-permission android:name="android.permission.EXECUTE_APP_FUNCTIONS"/>
<queries>
    <package android:name="dev.sanson.notos"/>
</queries>
val manager = AppFunctionsManagerCompat.getInstance(context)
val searchSpec = AppFunctionSearchSpec(
    packageNames = setOf("dev.sanson.notos"),
    schemaCategory = "???",
    schemaName = "???",
    minSchemaVersion = 0 // ???
)
val functionPackages: Flow<List<AppFunctionPackageMetadata>> = 
    manager.observeAppFunctions(searchSpec)
val request = ExecuteAppFunctionRequest(
    targetPackageName = "dev.sanson.notos",
    functionIdentifier = "dev.sanson.notos.NotosAppFunctions#createNote",
    functionParameters = ...
)
val manager = AppFunctionsManagerCompat.getInstance(context)

val response = manager.executeAppFunction(request)
val manager = AppFunctionsManagerCompat.getInstance(context)

val response = manager.executeAppFunction(request) // 💥

Why can’t I call App Functions?

Source: https://www.androidauthority.com/android-16-qpr2-expected-features-3588166/

What are they for?

Discuss 💬

Links 🔗

https://jamie.sanson.dev/exploring-android-16-app-functions/

@jamiesanson