# AppFunctions, revisited

DevFeed: [AppFunctions, revisited](<https://devfeed.tech/articles/appfunctions-revisited-26158.md>)

Original publisher: [Read original article](<https://dev.to/tkuenneth/appfunctions-revisited-4n90>)

Author: Thomas Künneth

Published: 2026-07-25T11:36:27Z

Content type: tutorial

Language: en

Sources: [Thomas Künneth](<https://devfeed.tech/sources/thomas-kunneth.md>)

Topics: [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [Android](<https://devfeed.tech/topics/android.md>), [Library](<https://devfeed.tech/topics/library.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [Maven](<https://devfeed.tech/topics/maven.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [article](<https://devfeed.tech/tags/article.md>), [code](<https://devfeed.tech/tags/code.md>), [coding](<https://devfeed.tech/tags/coding.md>), [community](<https://devfeed.tech/tags/community.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [inclusive](<https://devfeed.tech/tags/inclusive.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [library](<https://devfeed.tech/tags/library.md>), [maven](<https://devfeed.tech/tags/maven.md>), [programming](<https://devfeed.tech/tags/programming.md>), [software](<https://devfeed.tech/tags/software.md>), [update](<https://devfeed.tech/tags/update.md>)

## AI overview

This tutorial revisits Android Jetpack AppFunctions after alpha10 stopped publishing appfunctions-service. It explains the new service entry-point model, generated subclasses and XML, manual service declaration, the removal of AppFunctionContext, and a correction about using installed-app display names instead of package names.

## Source excerpt

In Agentic interaction using AppFunctions I showed how Be nice publishes createAppPair for agents, using Jetpack appfunctions 1.0.0-alpha08. That setup leaned on a library-merged PlatformAppFunctionService, an AppFunctionContext parameter, and aggregate XML named app_functions.xml / app_functions_v2.xml. When I bumped toward what Android Studio was suggesting as of mid July, Sync failed: Could not find androidx.appfunctions:appfunctions-service:1.0.0-alpha10. On 1 July 2026, alpha10 stopped publishing appfunctions-service (Maven still lists it through alpha09). The Add the AppFunctions API guide now expects you to host an @AppFunctionServiceEntryPoint AppFunctionService. Spoiler: that is the real change. The rest of this post is how that landed in Be nice, plus an important update to the earlier article that is easy to miss if you only chase compile errors. Correction first In the earlier post I wrote that agents would pass package names for app1 and app2. That was wrong for Be nice. The implementation matches display names, case-insensitively, against installed apps. Package names are a convenient engineer habit; they are a poor agent habit when the user said "Clock" and "Contacts". KDoc and app-level metadata have to say what the code accepts -- agents lean on that text harder than on your mental model of the APK. What changed in the model Before alpha10 you annotated a helper class and let the service AAR merge a stock entry point into the manifest. Starting with alpha10: @AppFunction lives in androidx.appfunctions (not androidx.appfunctions.service) It is only legal on methods of an abstract AppFunctionService marked @AppFunctionServiceEntryPoint KSP generates the concrete subclass named in serviceName and the XML named in appFunctionXmlFileName You declare that generated service yourself; nothing merges a stock one anymore There is no AppFunctionContext parameter; the service is a Context Drop appfunctions:aggregateAppFunctions. Grepping for empty app_functions.