Android ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজ (AIDL) হল এমন একটি টুল যা ব্যবহারকারীদের
IPC থেকে অ্যাবস্ট্রাক্ট করতে দেয়। কোনও ইন্টারফেস (.aidl
ফাইলে নির্দিষ্ট করা) দেওয়া হলে, বিভিন্ন বিল্ড সিস্টেম aidl বাইনারি ব্যবহার করে C++ বা Java
বাইন্ডিং তৈরি করে যাতে এই ইন্টারফেসটি রানটাইম বা বিটনেস যাই হোক না কেন, বিভিন্ন প্রসেস জুড়ে ব্যবহার করা যায়।
Android-এর যেকোনও প্রসেসের মধ্যে AIDL ব্যবহার করা যেতে পারে: প্ল্যাটফর্ম কম্পোনেন্ট অথবা অ্যাপের মধ্যে। তবে, এটি কখনও অ্যাপের জন্য API হিসেবে ব্যবহার করা হয় না। প্ল্যাটফর্মে SDK API প্রয়োগ করার জন্য AIDL ব্যবহার করা হতে পারে যেমন, কিন্তু SDK API সারফেসে কখনও সরাসরি AIDL API থাকে না। অ্যাপের মধ্যে সরাসরি AIDL কীভাবে ব্যবহার করতে হয় সেই সম্পর্কে ডকুমেন্টেশন পেতে, Android ডেভেলপার ডকুমেন্টেশন দেখুন। আলাদাভাবে আপডেট করা প্ল্যাটফর্ম কম্পোনেন্টের মধ্যে AIDL ব্যবহার করা হলে, APEX (Android 10 থেকে শুরু) বা HAL (Android 11 থেকে শুরু)-এর মতো এক্ষেত্রে স্টেবল AIDL নামে পরিচিত ভার্সনিং সিস্টেম ব্যবহার করতে হবে।
উদাহরণ
এখানে একটি AIDL ইন্টারফেসের উদাহরণ দেওয়া হল:
package my.package;
import my.package.Baz; // defined elsewhere
interface IFoo {
void doFoo(Baz baz);
}
সার্ভার প্রসেস একটি ইন্টারফেস রেজিস্টার করে এবং সেটিতে কল পরিবেশন করে এবং ক্লায়েন্ট প্রসেস সেইসব ইন্টারফেসে কল করে। অনেক ক্ষেত্রে, একটি প্রসেস ক্লায়েন্ট এবং সার্ভার উভয় হিসাবে কাজ করে কারণ এটি একাধিক ইন্টারফেস উল্লেখ করতে পারে। AIDL ভাষা সম্পর্কে আরও জানতে, AIDL ভাষা দেখুন। এইসব ইন্টারফেস ব্যবহার করার জন্য উপলভ্য বিভিন্ন রানটাইম সম্পর্কে আরও জানতে, AIDL ব্যাকএন্ড দেখুন। এই ধরনের ঘোষণা কোনও নির্দিষ্ট ভাষায় ক্লাস ঘোষণার মতোই হয়, তবে এগুলি বিভিন্ন প্রসেস জুড়ে কাজ করে।
এটি কীভাবে কাজ করে
কল করার জন্য AIDL বাইন্ডার কার্নেল ড্রাইভার ব্যবহার করে। আপনি কল করলে, একটি মেথড শনাক্তকারী এবং সমস্ত অবজেক্ট একটি বাফারে প্যাক করা হয় এবং একটি রিমোট প্রসেসে কপি করা হয় যেখানে একটি বাইন্ডার থ্রেড ডেটা পড়ার জন্য অপেক্ষা করে। বাইন্ডার থ্রেড কোনও ট্রানজ্যাকশনের জন্য ডেটা পেলে, থ্রেডটি লোকাল প্রসেসে নেটিভ স্টাব অবজেক্ট খোঁজে এবং এই ক্লাস ডেটা আনপ্যাক করে লোকাল ইন্টারফেস অবজেক্টে কল করে। এই লোকাল ইন্টারফেস অবজেক্টটি একটি সার্ভার প্রসেস তৈরি এবং রেজিস্টার করে। একই প্রসেস ও একই ব্যাকএন্ডে কল করা হলে, কোনও প্রক্সি অবজেক্ট থাকে না এবং তাই কোনও প্যাকিং বা আনপ্যাকিং ছাড়াই সরাসরি কল করা হয়। আরও তথ্যের জন্য, বাইন্ডারের ওভারভিউ দেখুন।
ডিভাইসে পরিষেবার সাথে ইন্টার্যাক্ট করুন
Android-এ ডিভাইসে পরিষেবার সাথে ইন্টার্যাক্ট করার অনুমতি দেওয়ার জন্য কয়েকটি কমান্ড থাকে। ব্যবহার করে দেখুন:
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing