AppFunctions là một API nền tảng Android đi kèm với thư viện Jetpack để đơn giản hoá việc tích hợp MCP Android. Nó cho phép các ứng dụng của bạn hoạt động như các máy chủ MCP trên thiết bị, đóng góp các chức năng đóng vai trò là công cụ để các tính năng chủ động sử dụng cùng với các tác nhân và trợ lý, chẳng hạn như Google Gemini. Kể từ tháng 5 năm 2026, tính năng tích hợp AppFunctions với Gemini sẽ ở giai đoạn xem trước riêng tư với người kiểm thử đáng tin cậy. Bạn có thể bắt đầu chuẩn bị ứng dụng ngay bây giờ để sử dụng AppFunctions và các công cụ phát triển.
Bằng cách xác định các AppFunction này, bạn cho phép ứng dụng của mình cung cấp các dịch vụ, dữ liệu và hành động cho sổ đăng ký được tích hợp vào hệ điều hành Android, cho phép người dùng hoàn thành các tác vụ thông qua các tác nhân và lượt tương tác ở cấp hệ thống.
AppFunctions đóng vai trò tương đương với các công cụ trên thiết bị di động trong Giao thức ngữ cảnh mô hình (MCP). Mặc dù MCP thường chuẩn hoá cách các tác nhân kết nối với các công cụ phía máy chủ, nhưng AppFunctions cung cấp cùng một cơ chế cho các ứng dụng Android. Điều này cho phép bạn hiển thị các khả năng của ứng dụng dưới dạng "công cụ" có thể điều phối mà các ứng dụng được uỷ quyền (phương thức gọi) có thể khám phá và thực thi để đáp ứng ý định của người dùng. Người gọi phải có quyền EXECUTE_APP_FUNCTIONS để khám phá và thực thi AppFunction, đồng thời có thể bao gồm các tác nhân, ứng dụng và trợ lý AI như Gemini.
AppFunctions có trên các thiết bị chạy Android 16 trở lên.
Ví dụ về các trường hợp sử dụng
AppFunctions cung cấp một cơ chế mạnh mẽ để tự động hoá các tác vụ và tinh giản hoạt động tương tác của người dùng. Bằng cách mở rộng các chức năng của ứng dụng, bạn cho phép người dùng hoàn thành các mục tiêu phức tạp bằng ngôn ngữ tự nhiên, thường thay thế nhu cầu điều hướng từng bước theo cách thủ công bằng giao diện người dùng của bạn.
Các tình huống sau đây minh hoạ cách AppFunctions có thể được dùng để thúc đẩy trải nghiệm trong nhiều danh mục ứng dụng:
Quản lý công việc và tăng năng suất
- Yêu cầu của người dùng: "Nhắc tôi đến lấy gói hàng tại nơi làm việc hôm nay lúc 5 giờ chiều".
- Hành động AppFunction: Phương thức gọi xác định ứng dụng quản lý tác vụ có liên quan và gọi một hàm để tạo tác vụ, tự động điền các trường tiêu đề, thời gian và vị trí dựa trên câu lệnh của người dùng.
/** * Create a new task or reminder with a title, due time, and location. * * @param context The execution context provided by the system. * @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( context: AppFunctionContext, title: String, dueDateTime: LocalDateTime? = null, location: String? = null ) : TaskTruyền thông và giải trí
- Yêu cầu của người dùng: "Tạo một danh sách phát mới gồm những album nhạc jazz hàng đầu của năm nay".
- Hành động AppFunction: Phương thức gọi thực thi một hàm tạo danh sách phát trong một ứng dụng âm nhạc, truyền ngữ cảnh như "các đĩa nhạc jazz hàng đầu năm 2026" làm truy vấn để tạo danh sách phát ngay lập tức.
/** * Create a new music playlist based on a natural language query. * * @param context The execution context provided by the system. * @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( context: AppFunctionContext, query: String ): PlaylistQuy trình công việc trên nhiều ứng dụng
- Yêu cầu của người dùng: "Tìm công thức mì trong email của Lisa và thêm các nguyên liệu vào danh sách mua sắm của tôi".
- Thao tác AppFunction: Yêu cầu này sử dụng các hàm từ nhiều ứng dụng. Trước tiên, người gọi sử dụng chức năng tìm kiếm của ứng dụng email để truy xuất nội dung. Sau đó, ứng dụng này sẽ trích xuất các thành phần có liên quan và gọi chức năng của một ứng dụng danh sách mua sắm để điền danh sách của người dùng.
/** * Search for emails matching a query or sender name to retrieve content like recipes. * * @param context The execution context provided by the system. * @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( context: AppFunctionContext, query: String ): List<EmailSummary> /** * Add a list of items or ingredients to the user's active shopping list. * * @param context The execution context provided by the system. * @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( context: AppFunctionContext, items: List<String> ): ShoppingListLịch và lên lịch
- Yêu cầu của người dùng: "Thêm tiệc sinh nhật của mẹ vào lịch của tôi vào 6 giờ tối thứ Hai tuần sau".
- Hành động AppFunction: Ứng dụng có tính chất đại lý đã được phê duyệt sẽ gọi chức năng "tạo sự kiện" của ứng dụng lịch, phân tích cú pháp ngữ cảnh liên quan như "thứ Hai tới" và "6 giờ chiều" để tạo mục nhập mà không cần người dùng mở lịch theo cách thủ công.
/** * Schedule a new event on the user's primary calendar. * * @param context The execution context provided by the system. * @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( context: AppFunctionContext, title: String, startDateTime: LocalDateTime ): Event
Cách hoạt động của AppFunctions
Sơ đồ sau đây minh hoạ quy trình điển hình về cách các ứng dụng chia sẻ AppFunction với một tác nhân và sau đó thực thi. Các tác nhân có thể xem xét cả công cụ MCP từ xa phía máy chủ và AppFunctions cục bộ cùng nhau khi xử lý các yêu cầu của người dùng. Sau đây là quy trình chi tiết để sử dụng AppFunctions cục bộ:
- Khai báo AppFunction: Ứng dụng Android được tạo để sử dụng AppFunction nhằm cung cấp các tính năng, chẳng hạn như "Tạo ghi chú" hoặc "Gửi tin nhắn".
- Tạo lược đồ: Thư viện AppFunctions Jetpack tạo một tệp lược đồ XML liệt kê tất cả AppFunctions đã khai báo trong ứng dụng. Hệ điều hành Android dùng tệp này để lập chỉ mục các AppFunctions có sẵn.
- Truy xuất siêu dữ liệu: Tác nhân có thể truy xuất siêu dữ liệu AppFunction bằng cách truy vấn siêu dữ liệu đó.
- Lựa chọn và thực thi AppFunction: Dựa trên câu lệnh của người dùng, tác nhân sẽ chọn và thực thi AppFunction phù hợp với các tham số thích hợp.
Thư viện AppFunctions Jetpack giúp đơn giản hoá việc hiển thị chức năng của ứng dụng.
Với trình xử lý chú giải, bạn chú giải các hàm mà bạn muốn cung cấp cho các tác nhân. Sau đó, người gọi có thể khám phá và gọi các hàm được lập chỉ mục này bằng cách sử dụng AppFunctionManager.
Trước khi gọi một hàm, người gọi phải xác minh rằng thiết bị hỗ trợ tính năng AppFunctions bằng cách cố gắng truy xuất một phiên bản của AppFunctionManager. Sau khi được hỗ trợ, các phương thức gọi có thể xác minh xem một hàm cụ thể có được bật trong ứng dụng mục tiêu hay không bằng cách sử dụng isAppFunctionEnabled(packageName,functionId). Để truy vấn trạng thái của các hàm trong những gói khác, bạn cần có android.permission.EXECUTE_APP_FUNCTIONSpermission.
Ứng dụng của bạn không bắt buộc phải xác minh xem tính năng AppFunction có được hỗ trợ hay không; việc này sẽ được tự động xử lý trong thư viện Jetpack. Ví dụ: AppFunctionManager có thể xác minh xem tính năng này có được hỗ trợ hay không.
Sau đây là ví dụ về AppFunctions cho một ứng dụng ghi chú có các chức năng tạo, chỉnh sửa và liệt kê ghi chú:
/**
* 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
)
Câu hỏi thường gặp
Phần sau đây giải đáp các câu hỏi thường gặp về AppFunctions.
Tôi là một nhà phát triển ứng dụng. Tôi có thể triển khai AppFunctions ngay hôm nay không?
Có, bạn có thể triển khai và kiểm thử AppFunctions trong ứng dụng của mình bằng cách làm theo hướng dẫn được trình bày chi tiết trong các phần trước.
AppFunctions và MCP có gì khác nhau?
Cả hai đều cho phép các tác nhân AI điều phối các công cụ, nhưng có sự khác biệt đáng kể về cấu trúc, độ trễ và nỗ lực cần thiết của nhà phát triển. AppFunctions là các lệnh gọi ở cấp hệ điều hành được tích hợp sẵn dành riêng cho Android và thực thi cục bộ. Ngược lại, máy chủ MCP tiêu chuẩn là một giải pháp độc lập với nền tảng, dựa vào việc thực thi trên đám mây và các chuyến khứ hồi trên mạng.
Nói tóm lại, việc phát triển bằng AppFunctions cho phép bạn sử dụng trực tiếp trạng thái ứng dụng hiện có trên thiết bị và không yêu cầu bạn duy trì các dịch vụ bên ngoài ứng dụng Android.
Tôi đã triển khai AppFunctions trong ứng dụng của mình. Tại sao tác nhân hệ thống của tôi không truy cập được vào các AppFunctions đó?
AppFunctions là một tính năng thử nghiệm. Để đánh giá cẩn thận chất lượng của trải nghiệm tổng thể trong giai đoạn thử nghiệm này, chỉ một số ít ứng dụng và tác nhân hệ thống mới có thể truy cập vào toàn bộ quy trình.
Làm cách nào để chuẩn bị ứng dụng cho giai đoạn phát hành rộng rãi AppFunctions?
Hãy cân nhắc những tính năng nào trong ứng dụng mà bạn muốn cung cấp cho tính năng tự động hoá dựa trên tác nhân.
Bạn có thể triển khai AppFunctions trong ứng dụng của mình. Để làm như vậy, hãy làm theo các bước trong các phần trước đó trên trang này và xác minh rằng chúng đã được đăng ký trên thiết bị bằng cách gọi adb shell cmd app_function list-app-functions.
Tôi có thể được sử dụng sớm trải nghiệm nhà phát triển dựa trên tác nhân từ đầu đến cuối không?
Chúng tôi đang triển khai một Chương trình tiếp cận sớm (EAP) để tích hợp một số ứng dụng nhất định vào quá trình kiểm thử trải nghiệm toàn diện dành cho nhà phát triển cần thiết để ra mắt AppFunctions cho phiên bản phát hành công khai trên Android. Bạn có thể đăng ký tham gia chương trình tiếp cận sớm để tích hợp AppFunctions thông qua biểu mẫu đăng ký tham gia EAP này. Khi đăng ký bày tỏ sự quan tâm, bạn KHÔNG tự động có quyền truy cập vào toàn bộ quy trình tích hợp. Chúng tôi sẽ gửi email cho bạn nếu ứng dụng của bạn được chọn tham gia chương trình tiếp cận sớm hoặc để thông báo cho bạn khi AppFunctions được phát hành công khai.
Làm cách nào để tôi có thể gửi ý kiến phản hồi về AppFunctions?
Bạn có thể gửi ý kiến phản hồi về API bằng cách gửi vấn đề và đăng ký tham gia Chương trình tiếp cận sớm thông qua biểu mẫu.