AppFunctions হল একটি Android প্ল্যাটফর্ম API যার সাথে Android MCP ইন্টিগ্রেশন সহজ করার জন্য Jetpack লাইব্রেরি থাকে। এটি আপনার অ্যাপকে ডিভাইসে থাকা MCP সার্ভারের মতো আচরণ করতে সাহায্য করে। এর ফলে, Google Gemini-র মতো এজেন্ট ও অ্যাসিস্ট্যান্টের সাথে প্রোঅ্যাক্টিভ ফিচার ব্যবহার করার জন্য টুল হিসেবে কাজ করে এমন ফাংশন কন্ট্রিবিউট করা যায়। মে ২০২৬ পর্যন্ত, Gemini-এর সাথে AppFunctions ইন্টিগ্রেশন বিশ্বস্ত পরীক্ষকদের সাথে ব্যক্তিগত প্রিভিউতে আছে। AppFunctions ও ডেভেলপমেন্ট টুল ব্যবহার করার জন্য আপনি এখন অ্যাপ তৈরি করা শুরু করতে পারেন।
এইসব AppFunction নির্ধারণ করার মাধ্যমে, আপনি Android OS-এ বিল্ট-ইন রেজিস্ট্রিকে পরিষেবা, ডেটা ও অ্যাকশন প্রদান করার জন্য আপনার অ্যাপকে সক্ষম করেন, এর ফলে ব্যবহারকারীরা এজেন্ট ও সিস্টেম-লেভেল ইন্টার্যাকশনের মাধ্যমে টাস্ক সম্পূর্ণ করতে পারেন।
মডেল কন্টেক্সট
প্রোটোকল (MCP)-এর মধ্যে থাকা টুলের মোবাইল সমতুল্য হিসেবে AppFunctions কাজ করে। MCP সাধারণত এজেন্টরা কীভাবে সার্ভার-সাইড টুলের সাথে কানেক্ট করে তা স্ট্যান্ডার্ডাইজ করে, অন্যদিকে AppFunctions
Android অ্যাপের জন্য একই মেকানিজম প্রদান করে। এর ফলে আপনি নিজের অ্যাপের ক্ষমতাকে অর্কেস্ট্রেট করা যায় এমন
"টুল" হিসেবে এক্সপোজ করতে পারেন যা অনুমোদিত অ্যাপ (কলার) ব্যবহারকারীর
ইন্টেন্ট পূরণ করার জন্য খুঁজে পেতে ও এক্সিকিউট করতে পারে। কলারের কাছে অবশ্যই EXECUTE_APP_FUNCTIONS অনুমতি থাকতে হবে যাতে তিনি
AppFunctions খুঁজে পেতে ও এক্সিকিউট করতে পারেন এবং এর মধ্যে এজেন্ট, অ্যাপ ও Gemini-র মতো AI
অ্যাসিস্ট্যান্ট অন্তর্ভুক্ত থাকতে পারে।
Android 16 বা তার পরবর্তী যেকোনও ভার্সনে চলে এমন ডিভাইসে AppFunctions উপলভ্য।
ব্যবহারের উদাহরণ
AppFunctions টাস্ক অটোমেট করা এবং ব্যবহারকারীর ইন্টার্যাকশন স্ট্রিমলাইন করার জন্য একটি শক্তিশালী মেকানিজম প্রদান করে। আপনার অ্যাপের ক্ষমতাগুলি খুলে দেওয়ার মাধ্যমে, আপনি ব্যবহারকারীদের ন্যাচারাল ল্যাঙ্গুয়েজ ব্যবহার করে জটিল লক্ষ্য পূরণ করতে সাহায্য করেন। এর ফলে, আপনার UI-এর মাধ্যমে ধাপে ধাপে, ম্যানুয়াল নেভিগেশনের প্রয়োজনীয়তা প্রায়ই কমে যায়।
নিম্নলিখিত পরিস্থিতিগুলি থেকে বোঝা যায় যে কীভাবে বিভিন্ন ধরনের অ্যাপ ক্যাটেগরির মধ্যে এক্সপিরিয়েন্স ড্রাইভ করতে AppFunctions ব্যবহার করা যেতে পারে:
টাস্ক ম্যানেজমেন্ট ও প্রোডাক্টিভিটি
- ব্যবহারকারীর অনুরোধ: "আজ বিকেল ৫টায় অফিস থেকে আমার প্যাকেজ সংগ্রহ করার কথা মনে করিয়ে দিও"।
- AppFunction অ্যাকশন: কলার প্রাসঙ্গিক টাস্ক ম্যানেজমেন্ট অ্যাপ শনাক্ত করে এবং টাস্ক তৈরি করার জন্য একটি ফাংশন ইনভোক করে, অটোমেটিক ব্যবহারকারীর প্রম্পটের উপর ভিত্তি করে শিরোনাম, সময় ও লোকেশন ফিল্ড পূরণ করে।
/** * Create a new task or reminder with a title, due time, and location. * * @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( title: String, dueDateTime: LocalDateTime? = null, location: String? = null, ): Task = TODO()
মিডিয়া ও বিনোদন
- ব্যবহারকারীর অনুরোধ: "এই বছরের সেরা জ্যাজ অ্যালবাম দিয়ে একটি নতুন প্লেলিস্ট তৈরি করো"।
- AppFunction অ্যাকশন: কলার একটি মিউজিক অ্যাপের মধ্যে প্লেলিস্ট তৈরি করার ফাংশন এক্সিকিউট করে, "২০২৬ সালের সেরা জ্যাজ অ্যালবাম"-এর মতো কনটেক্সট কোয়েরি হিসেবে পাস করে যাতে অবিলম্বে প্লেলিস্ট তৈরি করা যায়।
/** * Create a new music playlist based on a natural language query. * * @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( query: String, ): Playlist = TODO()
ক্রস-অ্যাপ ওয়ার্কফ্লো
- ব্যবহারকারীর অনুরোধ: "লিসার ইমেল থেকে নুডলসের রেসিপি খুঁজে বের করো এবং উপকরণগুলি আমার শপিং লিস্টে যোগ করো"।
- AppFunction অ্যাকশন: এই অনুরোধে একাধিক অ্যাপের ফাংশন ব্যবহার করা হয়। প্রথমে, কলার ইমেল অ্যাপের সার্চ ফাংশন ব্যবহার করে কন্টেন্ট রিট্রিভ করে। তারপরে, এটি প্রাসঙ্গিক উপকরণগুলি এক্সট্র্যাক্ট করে এবং ব্যবহারকারীর তালিকা পূরণ করতে একটি শপিং তালিকা অ্যাপের ফাংশন ব্যবহার করে।
/** * Search for emails matching a query or sender name to retrieve content like recipes. * * @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( query: String, ): List<EmailSummary> = TODO() /** * Add a list of items or ingredients to the user's active shopping list. * * @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( items: List<String>, ): ShoppingList = TODO()
ক্যালেন্ডার ও শিডিউলিং
- ব্যবহারকারীর অনুরোধ: "পরের সোমবার সন্ধ্যা ৬টায় মায়ের জন্মদিনের পার্টি আমার ক্যালেন্ডারে যোগ করো"।
- AppFunction অ্যাকশন: অনুমোদিত এজেন্টিক অ্যাপ ক্যালেন্ডার অ্যাপের "ইভেন্ট তৈরি করুন" ফাংশন ইনভোক করে, "পরের সোমবার" ও "সন্ধ্যা ৬টা"-এর মতো প্রাসঙ্গিক প্রসঙ্গ পার্স করে যাতে ব্যবহারকারীকে ক্যালেন্ডার ম্যানুয়ালি খুলতে না হয়।
/** * Schedule a new event on the user's primary calendar. * * @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( title: String, startDateTime: LocalDateTime, ): Event = TODO()
AppFunctions কীভাবে কাজ করে
নিচের ডায়াগ্রাম থেকে কীভাবে অ্যাপগুলি কোনও এজেন্টের সাথে AppFunctions শেয়ার করে এবং তারপরে সেগুলি এক্সিকিউট করা হয়, সেই সম্পর্কে একটি সাধারণ ফ্লো দেখতে পাবেন। ব্যবহারকারীর অনুরোধ হ্যান্ডেল করার সময় এজেন্টরা সম্ভবত সার্ভার-সাইড রিমোট MCP টুল ও লোকাল AppFunctions, দুটিকেই একসাথে বিবেচনা করে। স্থানীয় AppFunctions ব্যবহারের বিস্তারিত ফ্লো নিচে দেওয়া হল:
- AppFunction ঘোষণা: Android অ্যাপটি AppFunction ব্যবহার করার জন্য তৈরি করা হয়েছে যাতে "নোট তৈরি করুন" বা "মেসেজ পাঠান"-এর মতো ফিচার উপলভ্য করা যায়।
- স্কিমা জেনারেশন: AppFunctions Jetpack লাইব্রেরি একটি XML স্কিমা ফাইল তৈরি করে যা অ্যাপে ঘোষণা করা সমস্ত AppFunctions-এর তালিকা তৈরি করে। উপলভ্য AppFunctions ইন্ডেক্স করার জন্য Android OS এই ফাইলটি ব্যবহার করে।
- মেটাডেটা রিট্রিভাল: এজেন্ট কোয়েরি করে AppFunction মেটাডেটা রিট্রিভ করতে পারে। ফাংশন-নির্দিষ্ট KDocs ছাড়াও, একাধিক টুল জুড়ে এজেন্ট অর্কেস্ট্রেশন গাইড করতে, ডেভেলপাররা অ্যাপ মেটাডেটাতে অ্যাপ-লেভেল অপারেশনাল প্যাটার্ন এবং সীমাবদ্ধতা নির্ধারণ করতে পারেন।
- AppFunction বেছে নেওয়া ও প্রয়োগ করা: ব্যবহারকারীর প্রম্পটের উপর ভিত্তি করে, এজেন্ট উপযুক্ত প্যারামিটার সহ উপযুক্ত AppFunction বেছে নেয় ও প্রয়োগ করে।
AppFunctions Jetpack লাইব্রেরি আপনার অ্যাপের ফাংশনালিটি এক্সপোজ করাকে সহজ করে তোলে।
অ্যানোটেশন প্রসেসরের সাহায্যে, আপনি সেইসব ফাংশন অ্যানোটেট করেন যেগুলি এজেন্টদের জন্য
উপলভ্য করতে চান। কলকারী তারপরে AppFunctionManager ব্যবহার করে এইসব ইন্ডেক্স করা
ফাংশন খুঁজে পেতে ও ইনভোক করতে পারবেন।
কোনও ফাংশন ইনভোক করার আগে, কলকারীদের যাচাই করে নিতে হবে যে ডিভাইসটি
AppFunctions ফিচার কাজ করে কিনা। এটি করার জন্য
AppFunctionManager-এর একটি ইনস্ট্যান্স রিট্রিভ করার চেষ্টা করতে হবে। কাজ করা শুরু করলে, কলাররা যাচাই করতে পারবেন যে কোনও নির্দিষ্ট
ফাংশন টার্গেট অ্যাপের মধ্যে চালু আছে কিনা, এর জন্য
isAppFunctionEnabled(packageName,functionId) ব্যবহার করা হয়। অন্যান্য প্যাকেজে
ফাংশনের স্ট্যাটাস কোয়েরি করার জন্য
android.permission.EXECUTE_APP_FUNCTIONS অনুমতি প্রয়োজন।
AppFunction ফিচার কাজ করে কিনা তা যাচাই করার জন্য আপনার অ্যাপের প্রয়োজন নেই;
এটি Jetpack লাইব্রেরির মধ্যে অটোমেটিক ম্যানেজ করা হয়। যেমন,
AppFunctionManager ফিচারটি কাজ করে কিনা তা যাচাই করতে পারে।
নোট নেওয়ার অ্যাপের জন্য AppFunctions-এর একটি উদাহরণ এখানে দেওয়া হল, যার মধ্যে নোট তৈরি, এডিট ও তালিকাভুক্ত করার ক্ষমতা আছে:
@RequiresApi(36) @AndroidEntryPoint @AppFunctionServiceEntryPoint( serviceName = "TaskAppFunctionService", appFunctionXmlFileName = "task_app_function_service", ) abstract class BaseTaskAppFunctionService : AppFunctionService() { @Inject internal lateinit var taskRepository: TaskRepository /** * Creates a task based on [createTaskParams]. * * @param createTaskParams The parameter to describe how to create the task. */ @AppFunction(isDescribedByKDoc = true) suspend fun createTask( createTaskParams: CreateTaskParams, ): Task = withContext(Dispatchers.IO) { // Developers can use predefined exceptions to let the agent know // why it failed. if (createTaskParams.title == null && createTaskParams.content == null) { throw AppFunctionInvalidArgumentException("Title or content should be non-null") } val id = taskRepository.createTask( createTaskParams.title, createTaskParams.content ) return@withContext taskRepository .getTask(id) ?.toTask() ?: throw AppFunctionElementNotFoundException("Task not found for ID = $id") } // Maps internal TaskEntity private fun TaskEntity.toTask() = Task(id = id, title = title, content = description) }
/** The parameter to create the task. */ @AppFunctionSerializable(isDescribedByKDoc = true) data class CreateTaskParams( /** The title of the task. */ val title: String?, /** The content of the task. */ val content: String?, ) /** The user-created task. */ @AppFunctionSerializable(isDescribedByKDoc = true) data class Task( /** The ID of the task. */ val id: String, /** The title of the task. */ val title: String, /** The content of the task. */ val content: String, )
স্যাম্পেল, দক্ষতা ও টেস্টিং টুল
AppFunctions-এ আপনার দক্ষতা বাড়াতে সাহায্য করার জন্য আমরা নিম্নলিখিত বিষয়গুলি উপলভ্য করেছি:
- আপনার ডিভাইসে সবকিছু কীভাবে কাজ করে তা যাচাই ও এক্সপ্লোর করতে, AppFunctions স্যাম্পেল এক্সপ্লোর করুন।
- চার-ধাপে লাইফসাইকেল জুড়ে ডেভেলপমেন্টের
গতি বাড়াতে AppFunctions এজেন্ট স্কিল ব্যবহার করুন:
- ডিসকভারি: AI অর্কেস্ট্রেশনের জন্য উচ্চ-মূল্যের ফিচার শনাক্ত ও সাজেস্ট করতে আপনার কোডবেস বিশ্লেষণ করুন।
- ইমপ্লিমেন্টেশন ও কনফিগারেশন: Kotlin ইমপ্লিমেন্টেশন তৈরি করুন এবং সিস্টেম মেটাডেটা ও বিল্ড ডিপেন্ডেন্সি কনফিগার করুন।
- KDoc রিফাইনমেন্ট: AI এজেন্ট ও Android MCP-র জন্য ফাংশন ও প্রপার্টি ডকুমেন্টেশন অপ্টিমাইজ করা।
- টেস্টিং ও ডিবাগিং: ডিভাইসে লোকাল মূল্যায়ন ও ডিবাগিংয়ের জন্য ADB কমান্ড দিন।
- কমান্ড-লাইন টেস্টিং ও যাচাইকরণের জন্য, ADB কমান্ড ব্যবহার করুন, যেমন, ফাংশন
রেজিস্ট্রেশন টেস্ট করা, মেটাডেটা বিবরণ চেক করা এবং ডিভাইসে
ফাংশন এক্সিকিউট করার জন্য সরাসরি, হালকা পদ্ধতি হিসেবে
adb shell cmd app_function ...।
প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)
নিম্নলিখিত বিভাগে AppFunctions সম্পর্কে প্রায়শই জিজ্ঞাসিত প্রশ্নের উত্তর দেওয়া হয়েছে।
আমি একজন অ্যাপ ডেভেলপার। আমি কি আজই AppFunctions প্রয়োগ করতে পারব?
হ্যাঁ, আগের বিভাগে বিস্তারিতভাবে দেওয়া নির্দেশিকা অনুসরণ করে আপনার অ্যাপের মধ্যে AppFunctions প্রয়োগ ও পরীক্ষা করা সম্ভব।
AppFunctions ও MCP-র মধ্যে পার্থক্য কী?
দুটিই AI এজেন্টকে টুল অর্কেস্ট্রেট করার অনুমতি দেয়, তবে এগুলির আর্কিটেকচার, লেটেন্সি এবং ডেভেলপারদের প্রয়োজনীয় প্রচেষ্টার মধ্যে উল্লেখযোগ্য পার্থক্য রয়েছে। AppFunctions হল বিল্ট-ইন OS-লেভেল হুক যা শুধুমাত্র Android-এর জন্য উপলভ্য এবং লোকালি এক্সিকিউট হয়। অন্যদিকে, স্ট্যান্ডার্ড MCP সার্ভার হল একটি প্ল্যাটফর্ম-অ্যাগনস্টিক সমাধান যা ক্লাউড এক্সিকিউশন এবং নেটওয়ার্ক রাউন্ড-ট্রিপের উপর নির্ভর করে।
সংক্ষেপে, AppFunctions-এর মাধ্যমে ডেভেলপ করলে, আপনি ডিভাইসে সরাসরি আগে থেকে থাকা অ্যাপ স্টেট ব্যবহার করতে পারবেন এবং এর জন্য আপনাকে Android অ্যাপের বাইরে পরিষেবা বজায় রাখতে হবে না।
আমি অ্যাপে AppFunctions প্রয়োগ করেছি। আমার সিস্টেম এজেন্ট কেন সেগুলি অ্যাক্সেস করতে পারছে না?
AppFunctions হল একটি পরীক্ষামূলক ফিচার। এই পরীক্ষামূলক পর্যায়ে সামগ্রিক অভিজ্ঞতার কোয়ালিটি যাতে সঠিকভাবে মূল্যায়ন করা যায়, সেই জন্য শুধুমাত্র সীমিত সংখ্যক অ্যাপ ও সিস্টেম এজেন্ট সম্পূর্ণ পাইপলাইন অ্যাক্সেস করতে পারবে।
AppFunctions-এর সাধারণ উপলভ্যতার জন্য আমি কীভাবে আমার অ্যাপ প্রস্তুত করতে পারি?
আপনার অ্যাপের কোন কোন ফিচার এজেন্টিক অটোমেশনের কাছে এক্সপোজ করতে চান তা বিবেচনা করুন।
আপনি নিজের অ্যাপে AppFunctions প্রয়োগ করতে পারবেন। এটি করতে, এই পৃষ্ঠার
আগের বিভাগে উল্লেখ করা ধাপগুলি অনুসরণ করুন এবং adb shell cmd app_function list-app-functions কল করে যাচাই করুন যে সেগুলি
ডিভাইসে রেজিস্টার করা আছে।
আমি কি এন্ড-টু-এন্ড এজেন্টিক ডেভেলপার অভিজ্ঞতায় আগেভাগে অ্যাক্সেস পেতে পারি?
Android-এ প্রোডাকশনে AppFunctions লঞ্চ করার জন্য প্রয়োজনীয় এন্ড-টু-এন্ড ডেভেলপার অভিজ্ঞতা পরীক্ষা করে দেখতে আমরা বেছে নেওয়া অ্যাপ অনবোর্ড করার জন্য একটি আগেভাগে অ্যাক্সেস প্রোগ্রাম (EAP) পরিচালনা করছি। এই EAP রেজিস্ট্রেশন ফর্ম পূরণ করে আপনার AppFunctions ইন্টিগ্রেট করার ব্যাপারে আগ্রহ রেজিস্টার করতে পারবেন। আপনার আগ্রহ রেজিস্টার করার মাধ্যমে, আপনি সম্পূর্ণ ইন্টিগ্রেশনে অটোমেটিক অ্যাক্সেস পান না। EAP-এর জন্য আপনার অ্যাপ বেছে নেওয়া হলে অথবা AppFunctions সর্বজনীনভাবে উপলভ্য হলে আমরা আপনাকে ইমেল করে জানাব।
AppFunctions-এর ব্যাপারে আমি কীভাবে মতামত জানাব?
আপনি সমস্যা জমা দিয়ে এবং Early Access প্রোগ্রামের ফর্মে আপনার আগ্রহ রেজিস্টার করে API সম্পর্কে মতামত জানাতে পারেন।