27 মার্চ, 2025 থেকে, আমরা AOSP তৈরি করতে এবং অবদান রাখতে aosp-main
এর পরিবর্তে android-latest-release
ব্যবহার করার পরামর্শ দিচ্ছি। আরও তথ্যের জন্য, AOSP-তে পরিবর্তনগুলি দেখুন।
এআইডিএল ওভারভিউ
সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন
আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।
অ্যান্ড্রয়েড ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজ (এআইডিএল) এমন একটি টুল যা ব্যবহারকারীদের আইপিসিকে বিমূর্ত করতে দেয়। একটি ইন্টারফেস দেওয়া হয়েছে (একটি .aidl
ফাইলে নির্দিষ্ট করা হয়েছে), বিভিন্ন বিল্ড সিস্টেম aidl
বাইনারি ব্যবহার করে C++ বা জাভা বাইন্ডিং তৈরি করে যাতে এই ইন্টারফেসটি প্রক্রিয়া জুড়ে ব্যবহার করা যায়, রানটাইম বা বিটনেস নির্বিশেষে।
এআইডিএল অ্যান্ড্রয়েডের যেকোনো প্রক্রিয়ার মধ্যে ব্যবহার করা যেতে পারে: প্ল্যাটফর্ম উপাদানগুলির মধ্যে বা অ্যাপগুলির মধ্যে। যাইহোক, এটি কখনই অ্যাপের জন্য API হিসাবে ব্যবহার করা হয় না। উদাহরণস্বরূপ, প্ল্যাটফর্মে একটি SDK API প্রয়োগ করতে AIDL ব্যবহার করা যেতে পারে, কিন্তু SDK API পৃষ্ঠে কখনও সরাসরি AIDL API গুলি থাকে না। সরাসরি অ্যাপগুলির মধ্যে কীভাবে AIDL ব্যবহার করবেন সে সম্পর্কে ডকুমেন্টেশনের জন্য, সংশ্লিষ্ট Android বিকাশকারীদের ডকুমেন্টেশন দেখুন। যখন AIDL আলাদাভাবে আপডেট করা প্ল্যাটফর্মের উপাদানগুলির মধ্যে ব্যবহার করা হয়, যেমন APEXes (Android 10-এ শুরু হয়) বা HALs (Android 11-এ শুরু হয়), স্থিতিশীল AIDL নামে পরিচিত সংস্করণ সিস্টেম ব্যবহার করা আবশ্যক।
উদাহরণ
এখানে একটি উদাহরণ AIDL ইন্টারফেস:
package my.package;
import my.package.Baz; // defined elsewhere
interface IFoo {
void doFoo(Baz baz);
}
একটি সার্ভার প্রক্রিয়া একটি ইন্টারফেস নিবন্ধন করে এবং এটিতে কল সরবরাহ করে এবং একটি ক্লায়েন্ট প্রক্রিয়া সেই ইন্টারফেসে কল করে। অনেক ক্ষেত্রে, একটি প্রক্রিয়া একটি ক্লায়েন্ট এবং একটি সার্ভার উভয় হিসাবে কাজ করে কারণ এটি একাধিক ইন্টারফেস উল্লেখ করতে পারে। এআইডিএল ভাষা সম্পর্কে আরো বিস্তারিত জানার জন্য, এআইডিএল ভাষা দেখুন। এই ইন্টারফেসগুলি ব্যবহার করার জন্য উপলব্ধ বিভিন্ন রানটাইম সম্পর্কে আরও বিশদ বিবরণের জন্য, AIDL ব্যাকএন্ড দেখুন। এই ধরনের ঘোষণা একটি প্রদত্ত ভাষায় একটি ক্লাস ঘোষণার মত, কিন্তু তারা প্রক্রিয়া জুড়ে কাজ করে।
এটা কিভাবে কাজ করে
AIDL কল করার জন্য বাইন্ডার কার্নেল ড্রাইভার ব্যবহার করে। যখন আপনি একটি কল করেন, একটি পদ্ধতি শনাক্তকারী এবং সমস্ত বস্তু একটি বাফারে প্যাক করা হয় এবং একটি দূরবর্তী প্রক্রিয়াতে অনুলিপি করা হয় যেখানে একটি বাইন্ডার থ্রেড ডেটা পড়ার জন্য অপেক্ষা করে। একবার একটি বাইন্ডার থ্রেড একটি লেনদেনের জন্য ডেটা গ্রহণ করলে, থ্রেডটি স্থানীয় প্রক্রিয়ায় একটি নেটিভ স্টাব অবজেক্টের সন্ধান করে এবং এই ক্লাসটি ডেটা আনপ্যাক করে এবং একটি স্থানীয় ইন্টারফেস অবজেক্টে কল করে। এই স্থানীয় ইন্টারফেস বস্তুটি একটি সার্ভার প্রক্রিয়া তৈরি করে এবং নিবন্ধন করে। যখন একই প্রক্রিয়ায় এবং একই ব্যাকএন্ডে কল করা হয়, তখন কোনো প্রক্সি অবজেক্টের অস্তিত্ব থাকে না এবং তাই কলগুলি কোনো প্যাকিং বা আনপ্যাকিং ছাড়াই সরাসরি হয়। আরও তথ্যের জন্য, বাইন্ডার ওভারভিউ দেখুন।
ডিভাইসে পরিষেবাগুলির সাথে যোগাযোগ করুন
ডিভাইসে পরিষেবাগুলির সাথে ইন্টারঅ্যাক্ট করার অনুমতি দেওয়ার জন্য অ্যান্ড্রয়েড কয়েকটি কমান্ডের সাথে আসে। চেষ্টা করুন:
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing
এই পৃষ্ঠার কন্টেন্ট ও কোডের নমুনাগুলি Content License-এ বর্ণিত লাইসেন্সের অধীনস্থ। Java এবং OpenJDK হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2025-07-30 UTC-তে শেষবার আপডেট করা হয়েছে।
[[["সহজে বোঝা যায়","easyToUnderstand","thumb-up"],["আমার সমস্যার সমাধান হয়েছে","solvedMyProblem","thumb-up"],["অন্যান্য","otherUp","thumb-up"]],[["এতে আমার প্রয়োজনীয় তথ্য নেই","missingTheInformationINeed","thumb-down"],["খুব জটিল / অনেক ধাপ","tooComplicatedTooManySteps","thumb-down"],["পুরনো","outOfDate","thumb-down"],["অনুবাদ সংক্রান্ত সমস্যা","translationIssue","thumb-down"],["নমুনা / কোড সংক্রান্ত সমস্যা","samplesCodeIssue","thumb-down"],["অন্যান্য","otherDown","thumb-down"]],["2025-07-30 UTC-তে শেষবার আপডেট করা হয়েছে।"],[],[],null,["# AIDL overview\n\nThe Android Interface Definition Language (AIDL) is a tool that lets users\nabstract away IPC. Given an interface (specified in a `.aidl`\nfile), various build systems use the `aidl` binary to construct C++ or Java\nbindings so that this interface can be used across processes, regardless of the\nruntime or bitness there.\n\nAIDL can be used between any process in Android: between platform components\nor between apps. However, it is never used as an API for apps. AIDL may be used\nto implement an SDK API in the platform, for example, but the SDK API surface\nnever contains AIDL APIs directly. For documentation about how to use AIDL\nbetween apps directly, see corresponding\n[Android developers\ndocumentation](https://developer.android.com/guide/components/aidl).\nWhen AIDL is used between platform components that are updated separately, such\nas APEXes (starting in Android 10) or HALs (starting in\nAndroid 11), the versioning system known as\n[Stable AIDL](/docs/core/architecture/aidl/stable-aidl) must be used.\n\nExample\n-------\n\nHere is an example AIDL interface: \n\n package my.package;\n\n import my.package.Baz; // defined elsewhere\n\n interface IFoo {\n void doFoo(Baz baz);\n }\n\nA *server* process registers an interface and serves calls to it, and a *client*\nprocess makes calls to those interfaces. In many cases, a process acts as both a\nclient and a server since it may be referencing multiple interfaces. For more\ndetails about the AIDL language, see\n[AIDL language](/docs/core/architecture/aidl/aidl-language). For more details\nabout the various runtimes available to use these interfaces, see\n[AIDL backends](/docs/core/architecture/aidl/aidl-backends). These type\ndeclarations are exactly like a class declaration in a given language, but they\nwork across processes.\n\nHow it works\n------------\n\nAIDL uses the binder kernel driver to make calls. When you make a call, a\nmethod identifier and all of the objects are packed onto a buffer and copied to\na remote process where a binder thread waits to read the data. Once a binder\nthread receives data for a transaction, the thread looks up a native stub object\nin the local process, and this class unpacks the data and makes a call on a\nlocal interface object. This local interface object is the one a server process\ncreates and registers. When calls are made in the same process and the same\nbackend, no proxy objects exist, and so calls are direct without any\npacking or unpacking. For further information, see the\n[Binder overview](/docs/core/architecture/ipc/binder-overview).\n\nInteract with services on the device\n------------------------------------\n\nAndroid comes with a few commands to allow interacting with services on the\ndevice. Try: \n\n adb shell dumpsys --help # listing and dumping services\n adb shell service --help # sending commands to services for testing"]]