چگونه‌ها

ساخت برنامه‌های هوشمند اندروید: ادغام با سیستم هوشمند اندروید با استفاده از AppFunctions

مطالعه ۶ دقیقه‌ای
مشاهده پروفایل بن وایس
Ben Weiss مهندس روابط توسعه‌دهنده

به مجموعه پست‌های وبلاگ « ساخت برنامه‌های هوشمند اندروید » خوش آمدید، جایی که ما یک برنامه اندروید پایه را می‌گیریم و آن را به یک تجربه شخصی‌سازی‌شده، هوشمند و عامل‌گرا تبدیل می‌کنیم. در پست قبلی خود، نحوه استفاده از منطق هوش مصنوعی فایربیس برای ساخت ویژگی‌های هوش مصنوعی ابری و ترکیبی را بررسی کردیم.

رابط‌های کاربری سنتی موبایل در انجام وظایف متمرکز و عملی برتری دارند و سیستم هوشمند اندروید در حال معرفی ویژگی‌های مکملی است تا اقدامات پیچیده و چند مرحله‌ای را آسان‌تر کند. AppFunctions با تکمیل رابط‌های کاربری سنتی، یک نقطه ورود جدید و قدرتمند ارائه می‌دهد: یک عامل ممتاز در دستگاه می‌تواند به ویژگی‌های برنامه در پس‌زمینه دسترسی داشته باشد. این امر می‌تواند به ویژه هنگامی که کاربران در حال رانندگی، پیاده‌روی یا انجام چند کار همزمان هستند، مفید باشد.

در این مقاله، به شما نشان خواهیم داد که چگونه این قابلیت‌ها را با استفاده از Android AppFunctions در برنامه‌ی برنامه‌ریزی سفر خود، JetPacker ، طراحی و ادغام کرده‌ایم. منطق پشت انتخاب ویژگی‌هایمان را بررسی خواهیم کرد، در مورد ابزارهای تخصصی که برای تسریع توسعه استفاده کرده‌ایم بحث خواهیم کرد و به کدی که باعث می‌شود همه چیز کار کند، خواهیم پرداخت.

طراحی ویژگی‌های آماده برای هوش مصنوعی: انتخاب‌هایی که برای کاربران شما مهم هستند

برای انتخاب ویژگی‌هایی که باید به سیستم اطلاعاتی ارائه شوند، ما به دنبال وظایفی بودیم که در آنها یک دستور صوتی یا متنی به طور عینی سریع‌تر از لمس کردن صفحه نمایش باشد. در این ضبط صفحه نمایش در کنار هم، می‌توانید این تضاد را به خوبی مشاهده کنید: در سمت چپ، کاربری در حال لمس کردن چندین صفحه نمایش برای ثبت هزینه است؛ در سمت راست، همان کار فوراً در پس‌زمینه از طریق یک عامل ممتاز انجام می‌شود.

اولین انتخاب ما ردیابی هزینه‌ها بود. ثبت هزینه قهوه در طول سفر معمولاً به چند مرحله نیاز دارد - باز کردن قفل گوشی، باز کردن برنامه، پیدا کردن سفر فعال، رفتن به برگه هزینه‌ها، زدن دکمه افزودن، گرفتن عکس از رسید و بررسی نتیجه. با ارائه ویژگی‌های addExpense و getExpenses به عنوان AppFunctions، عامل سیستم کارهای سنگین را انجام می‌دهد. وقتی کاربر می‌گوید: «هزینه قهوه پنج دلاری را به سفر پاریس من اضافه کنید»، عامل به طور خودکار در پس‌زمینه به دنبال شناسه سفر صحیح می‌گردد و هزینه را وارد می‌کند و جریان رابط کاربری دستی را به طور کامل نادیده می‌گیرد.

ما همچنین مدیریت برنامه سفر را در اولویت قرار دادیم. پیدا کردن فعالیت بعدی در یک برنامه سفر شلوغ معمولاً نیاز به پیمایش در یک نمای جدول زمانی فشرده دارد. با ارائه getItinerary و addItineraryEvent به سیستم، کاربر می‌تواند به سادگی بپرسد: «بعداً در پاریس چه کار خواهم کرد؟» و فوراً پاسخ دریافت کند.

در نهایت، ما بر روی ثبت یادداشت بدون دخالت دست تمرکز کردیم. تایپ کردن یادآوری‌ها یا یادداشت‌ها هنگام قدم زدن در یک خیابان شلوغ دشوار و ناامن است. ارائه قابلیت یادداشت صوتی به کاربر این امکان را می‌دهد که بگوید: «پرواز فوق‌العاده بود، من یک غروب خورشید زیبا دیدم و توانستم خوب بخوابم» و عامل دارای امتیاز به طور خودکار آن را رونویسی و مستقیماً با استفاده از addVoiceNote AppFunction در پایگاه داده سفر ذخیره می‌کند.

MCP اندروید با پشتیبانی AppFunctions

کل این تجربه بر اساس Android MCP ساخته شده است. تحت این طراحی، برنامه به عنوان یک سرور محلی MCP عمل می‌کند. به جای API های از راه دور، شما ویژگی‌های برنامه خود را مستقیماً به سیستم هوشمند روی دستگاه ارائه می‌دهید.

Android AppFunctions رابط برنامه‌نویسی کاربردی (API) است که این مفهوم را به واقعیت تبدیل می‌کند. این رابط، توابع کاتلین حاشیه‌نویسی‌شده را می‌خواند و آن‌ها را به تعاریف ابزار ایمن از نظر نوع و در محیط سندباکس کامپایل می‌کند که عامل دارای امتیاز می‌تواند آن‌ها را کشف و به‌صورت محلی روی دستگاه فراخوانی کند.

نمودار MCP اندروید.png
نموداری که هماهنگی AppFunctions بین برنامه‌های ما، پلتفرم اندروید و عامل‌های سیستم را نشان می‌دهد.

تحت مدل MCP اندروید، برنامه شما به عنوان یک سرور محلی MCP عمل می‌کند که ابزارهای ساختاریافته را در معرض نمایش قرار می‌دهد، در حالی که پلتفرم اندروید به عنوان رجیستری ابزار مرکزی عمل می‌کند. در سمت کلاینت MCP، برنامه‌های عامل پس از اعطای مجوزهای ممتاز سیستم برای دسترسی به رجیستری، در سیستم اطلاعاتی ثبت می‌شوند.

وقتی کاربری با یک عامل ثبت‌شده تعامل می‌کند، LLM آن مشخص می‌کند که آیا درخواست می‌تواند توسط یک AppFunction مدیریت شود، از متادیتای پلتفرم پرس‌وجو می‌کند و توابع ثبت‌شده مناسب را در پس‌زمینه اجرا می‌کند. این طراحی کلاینت-سرور محلی MCP به شما کنترل کامل می‌دهد: شما دقیقاً انتخاب می‌کنید که کدام ویژگی‌ها برای عامل قابل دسترسی باشند و بقیه داده‌های برنامه خود را خصوصی نگه دارید.

چگونه با مهارت‌های اندروید، توسعه را تسریع کردیم

برای ساده‌سازی فرآیند ادغام، ما از مهارت توسعه AppFunctions بهره بردیم. مهارت توسعه AppFunctions یک همراه کامل در توسعه است. این مهارت ما را در کل چرخه حیات هدایت کرد: نگاشت کلاس‌های داده Kotlin برای سریال‌سازی پارامترها، تولید نقاط ورود Service لازم، اصلاح مستندات KDoc ما برای اطمینان از اینکه LLM مرزهای پارامترها را درک می‌کند، و راه‌اندازی تست خودکار با استفاده از ADB.

ارائه ویژگی‌های اپلیکیشن به سیستم اطلاعاتی

بحث تئوری کافی است، بیایید به سراغ پیاده‌سازی برویم.

پیکربندی و تنظیمات وابستگی

ما با اضافه کردن وابستگی‌های AppFunctions شروع می‌کنیم. یکی برای API و یکی برای کامپایلر پردازش نماد کاتلین.

implementation("androidx.appfunctions:appfunctions:1.0.0-alpha10")
ksp("androidx.appfunctions:appfunctions-compiler:1.0.0-alpha10")

مدل‌سازی انواع داده‌های سفارشی

هر شیء سفارشی که با عامل رد و بدل می‌شود باید با @AppFunctionSerializable حاشیه‌نویسی شود. در فایل TripSerializable.kt ، مدل داده سفر خود را تعریف می‌کنیم:

@AppFunctionSerializable(isDescribedByKDoc = true)
data class TripSerializable(
    /** The trip's unique identifier. */
    val id: String,
    /** The trip's title. */
    val title: String,
    /** The trip's destination location. */
    val location: String,
    /** The trip's start date in milliseconds. */
    val startDate: Long,
    /** The trip's end date in milliseconds. */
    val endDate: Long,
    /** A list of participants. */
    val participants: List<String>,
)

ارائه ویژگی‌ها با استفاده از حاشیه‌نویسی @AppFunction

در مرحله بعد، این مهارت توابع کاتلین را نوشت که کوئری‌های پایگاه داده را انجام می‌دهند و آنها را با @AppFunction حاشیه‌نویسی می‌کنند. می‌توانیم این را در searchTrip مشاهده کنیم:

/**
 * Looks for trips based on optional filters like id, title (name), location, and dates.
 *
 * @param id The unique identifier of the trip.
 * @param title The title or name of the trip.
 * @param location The destination location.
 * @param startDate The minimum start date in milliseconds.
 * @param endDate The maximum end date in milliseconds.
 * @return A list of trips matching the filters.
 */
@AppFunction(isDescribedByKDoc = true)
suspend fun searchTrip(
    id: String? = null,
    title: String? = null,
    location: String? = null,
    startDate: Long? = null,
    endDate: Long? = null
): List<TripSerializable> {
    return withContext(Dispatchers.IO) {
    // implementation
}

از آنجایی که AppFunctions به طور پیش‌فرض روی نخ رابط کاربری اجرا می‌شود، ما withContext(Dispatchers.IO) برای تغییر به یک توزیع‌کننده پس‌زمینه استفاده می‌کنیم. علاوه بر این، KDoc خود را اصلاح می‌کنیم تا از افعال واضح و ضروری استفاده کند و محدودیت‌های پارامتر را مشخص کند. این مستندات مستقیماً در طرحواره ابزار کامپایل می‌شوند که عامل ممتاز برای حل پارامترها و مدیریت خطاهای زمان اجرا از آن استفاده می‌کند.

نقطه ورود سرویس و ادغام Hilt

برای ثبت این ویژگی‌ها در سیستم اطلاعاتی، یک کلاس پایه انتزاعی ایجاد می‌کنیم که AppFunctionService ارث‌بری می‌کند. آن را با @AppFunctionServiceEntryPoint حاشیه‌نویسی می‌کنیم:

@RequiresApi(36)
@AndroidEntryPoint
@AppFunctionServiceEntryPoint(
    serviceName = "JetPackerAppFunctionService",
    appFunctionXmlFileName = "jetpacker_app_function_service"
)
abstract class BaseJetPackerAppFunctionService : AppFunctionService() {
    @Inject internal lateinit var tripDao: TripDao
    // DAOs and database references are injected here...
}

در طول کامپایل، KSP زیرکلاس نهایی سرویس عینی، JetPackerAppFunctionService ، را همانطور که با پارامتر serviceName اعلام شده است، تولید می‌کند. ما همچنین app_metadata.xml را در مانیفست برنامه ثبت می‌کنیم. این فایل، قوانین عملیاتی سراسری را برای AppFunctionهای اعلام شده توسط JetPacker فراهم می‌کند.

تست و تأیید AppFunctions شما

پس از پیاده‌سازی، باید تأیید کنید که AppFunctions شما ثبت شده و به درستی کار می‌کند.

در دستگاه‌هایی که اندروید ۱۷ یا جدیدتر را اجرا می‌کنند یا شبیه‌سازهایی که از اندروید استفاده می‌کنند، می‌توانید از دستورات ADB در ترمینال خود برای فهرست کردن و فراخوانی توابع خود استفاده کنید. اجرای دستور adb shell cmd app_function list-app-functions تمام توابع ثبت شده برای بسته شما را نمایش می‌دهد. سپس می‌توانید با اجرای دستور adb shell cmd app_function execute-app-function و ارسال یک رشته پارامتر خام JSON، یک تابع خاص را اجرا کرده و ادغام آن با پایگاه داده را آزمایش کنید.

به جای این دستورات ADB، می‌توانید از AppFunctions Testing Agent نیز برای بررسی پیکربندی، فهرست کردن و اجرای AppFunctionها و حتی مشاهده نحوه رفتار AppFunctionهای خود در یک جریان محاوره‌ای واقعی استفاده کنید.

جمع بندی آن

وقتی به ویژگی‌های برنامه‌ای که می‌توانند به سیستم اطلاعاتی با استفاده از AppFunctions اضافه شوند فکر می‌کنیم، نیاز به تغییر جزئی در نحوه تفکر در مورد کد و مستندات داریم. AppFunctions شما را قادر می‌سازد از این مدل تعاملی جدید برای برنامه‌ها استفاده کنید، که امکان دسترسی به ویژگی‌های برنامه را با استفاده از یک عامل فراهم می‌کند.

اول، مهارت توسعه AppFunctions یک ابزار ضروری برای چرخه عمر است که به شما در کشف ویژگی‌ها، پیاده‌سازی و اصلاح AppFunctions برای برنامه‌هایتان کمک می‌کند. دوم، نظرات KDoc یک دارایی API کامپایل شده هستند؛ توضیحات واضح پارامترها مستقیماً بر دقت اجرای عامل سیستم تأثیر می‌گذارند. در نهایت، Android MCP اجرای محلی را فراهم می‌کند که به برنامه‌ها اجازه می‌دهد با خیال راحت با عامل‌های هوش مصنوعی همکاری کنند.

ارائه ویژگی‌های برنامه از طریق AppFunctions، برنامه شما را برای سیستم اطلاعاتی آماده می‌کند. به ما اطلاع دهید که چگونه برنامه‌های خود را برای دوران عاملیت تطبیق می‌دهید!

بیشتر بدانید

بخش‌های دیگر این مجموعه پست‌های وبلاگ را ببینید:
بخش اول: معرفی اپلیکیشن و بررسی اجمالی آن
بخش ۲: هوش درون دستگاهی. برای ساخت ویژگی‌های اولویت‌دار حریم خصوصی مانند خلاصه‌سازی برنامه سفر، تجزیه رسید و پردازش صوتی محلی، به بررسی عمیق APIهای GenAI کیت ML و Gemini Nano بپردازید.
بخش ۳: استدلال ترکیبی و ابری. نحوه استفاده از منطق هوش مصنوعی فایربیس را برای پایه‌ریزی پاسخ‌های LLM در داده‌های دنیای واقعی مانند نقشه‌های گوگل و زمینه وب بررسی کنید.
بخش ۴ (این پست!): یکپارچه‌سازی سیستم. یکپارچه‌سازی با سیستم هوشمند اندروید با استفاده از AppFunctions.
بخش ۵ (به زودی): گردش‌های کاری درون‌برنامه‌ای. برنامه را با یک دستیار رزرو سرتاسری که توسط A2UI و ADK پشتیبانی می‌شود، گسترش دهید.

به اطلاعات بیشتری در مورد توسعه اندروید علاقه دارید؟ توسعه‌دهندگان اندروید را در یوتیوب یا لینکدین دنبال کنید!

تمام قطعه کدهای موجود در این پست وبلاگ، از اطلاعیه حق نشر زیر پیروی می‌کنند:

Copyright 2026 Google LLC.
SPDX-License-Identifier: Apache-2.0
نوشته شده توسط:
ادامه مطلب