জাইগোট হলো অ্যান্ড্রয়েড অপারেটিং সিস্টেমের একটি প্রসেস, যা একই অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (ABI) সম্পন্ন সকল সিস্টেম ও অ্যাপ প্রসেসের রুট হিসেবে কাজ করে।
পিক্সেল ৭ এবং এর পরবর্তী মডেলের মতো আধুনিক ডিভাইসগুলোতে একটি ৬৪-বিট জাইগোট প্রসেস থাকে। এছাড়াও, প্রাইমারি ABI-এর জন্য রয়েছে ওয়েবভিউ জাইগোট , যা একটি বিশেষায়িত জাইগোট এবং এতে ওয়েবভিউ চালনাকারী প্রসেসগুলোর জন্য নির্দিষ্ট লাইব্রেরি ও রিসোর্স থাকে।
জাইগোট যে কাজগুলো করে থাকে তা নিচে দেওয়া হলো:
অ্যান্ড্রয়েড ওএস চালু হওয়ার সময় ইনিট ডেমন জাইগোট প্রসেসটি তৈরি করে। কিছু ডুয়াল আর্কিটেকচার সিস্টেমে দুটি জাইগোট প্রসেস (একটি ৬৪-বিট এবং একটি ৩২-বিট) তৈরি হয়। এই পৃষ্ঠায় শুধুমাত্র সিঙ্গেল আর্কিটেকচার সিস্টেমগুলো নিয়ে আলোচনা করা হয়েছে।
জাইগোট তাৎক্ষণিকভাবে আনস্পেশালাইজড অ্যাপ প্রসেস (USAP) নামক প্রসেস তৈরি করতে পারে, অথবা অ্যাপ্লিকেশনগুলোর প্রয়োজন অনুযায়ী প্রসেস তৈরি করার জন্য অপেক্ষা করতে পারে। প্রথম বিকল্পটি একটি সিস্টেম প্রপার্টি বা অ্যান্ড্রয়েড ডিবাগ ব্রিজ কমান্ডের মাধ্যমে সক্রিয় করতে হবে। জাইগোটকে তাৎক্ষণিকভাবে প্রসেস তৈরি করার জন্য কনফিগার করার বিষয়ে আরও তথ্যের জন্য, ‘আনস্পেশালাইজড অ্যাপ প্রসেস পুল সক্রিয় করুন’ দেখুন।
যদি আপনার ডিভাইসে USAP পুল সক্রিয় করা থাকে:
- সিস্টেম সার্ভার একটি পুল থেকে উপলব্ধ USAP-এর সাথে সংযোগ করার জন্য একটি ইউনিক্স ডোমেইন সকেট ব্যবহার করে। সিস্টেম সার্ভার প্রসেসের আইডি (PID), সি-গ্রুপ এবং অন্যান্য তথ্য পরিবর্তন করে অ্যাপ্লিকেশন ব্যবহারের জন্য USAP-টিকে পূর্ব-কনফিগার করার অনুরোধ করে।
- USAP প্রাক-কনফিগারেশন সম্পন্ন করলে, এটি PID সহ সিস্টেম সার্ভারকে উত্তর পাঠায়।
- যখন কোনো অ্যাপ্লিকেশন এই USAP-গুলোর একটি দখল করে, তখন সেই USAP-টি আর পুলের অংশ থাকে না। যখন পুলে একটি বা তার কম USAP থাকে, তখন জাইগোট নতুন USAP যোগ করে পুলটি পুনরায় পূর্ণ করে।
যদি আপনার জাইগোট লেজি ইভ্যালুয়েশন ব্যবহার করে প্রসেস তৈরি করে:
- সিস্টেম সার্ভার একটি কমান্ড পায় যে, একটি অ্যাপের একটি প্রসেস প্রয়োজন।
- সিস্টেম সার্ভারটি উপযুক্ত জাইগোটে কমান্ড পাঠানোর জন্য একটি ইউনিক্স ডোমেইন সকেট ব্যবহার করে।
- জাইগোট প্রসেসটিকে ফোর্ক করে এবং পিআইডি, সিগ্রুপ ও অন্যান্য তথ্য পরিবর্তন করে।
- প্রক্রিয়াটি সম্পন্ন হলে, এটি পিআইডি-টি জাইগোটের কাছে ফেরত পাঠায়, যা পরবর্তীতে সেটি সিস্টেম সার্ভারে পুনরায় পাঠিয়ে দেয়।
USAP পুল সক্রিয় করুন
USAP পুলের ব্যবহার সক্রিয় করতে, নিম্নলিখিতগুলির মধ্যে যেকোনো একটি করুন:
/build/make/target/product/runtime_libart.mkফাইলেdalvik.vm.usap_pool_enabledসিস্টেম প্রপার্টিটির মানtrueসেট করুন।নিম্নলিখিত কমান্ডটি চালান:
adb shell am broadcast -a \"com.google.android.gms.phenotype.FLAG_OVERRIDE\" --es package \"com.google.android.platform.runtime_native\" --es user \"\*\" --esa flags \"usap_pool_enabled\" --esa values \"true\" --esa types \"string\" com.google.android.gms
এই বৈশিষ্ট্যটি সক্রিয় করা হলে, প্রতিটি জাইগোট ফোর্কড প্রসেসের একটি পুল বজায় রাখে, যা অ্যাপ্লিকেশন চালু হওয়ার প্রক্রিয়ার অ্যাপ্লিকেশন-নিরপেক্ষ অংশগুলি সম্পাদন করে।
জাইগোটের সমস্যা সমাধান করুন
এই বিভাগে জাইগোট-সম্পর্কিত সমস্যাগুলির সমাধান রয়েছে।
জাইগোটটি বিধ্বস্ত হচ্ছে
যদি আপনার ডিভাইসটি সঠিকভাবে রিবুট না হয় এবং আপনার লগ বা ক্র্যাশ রিপোর্টে জাইগোট (Zygote) সম্পর্কিত সমস্যা দেখা যায়, তাহলে সম্ভবত আপনি সম্প্রতি এমন কোনো পরিবর্তন করেছেন যার কারণে initd বা সিস্টেম সার্ভার ক্র্যাশ করছে। আপনার কোডটি ঠিক করলে সমস্যাটি সমাধান হয়ে যাবে।
SELinux প্রত্যাখ্যান বা IO ব্যর্থতা
জাইগোট প্রসেস সীমানা জুড়ে ফাইল ডেসক্রিপ্টরের পরিচ্ছন্নতার বিষয়ে অত্যন্ত সতর্ক। যখন ফর্ক করার সময় ফাইল ডেসক্রিপ্টর উপস্থিত থাকে কিন্তু কোনো অ্যালাওলিস্টে (allowlist) না থাকে, তখন আমরা /dev/null এ একটি dup সিস্টেম কল ব্যবহার করি, যাতে ক্যাশ করা ফাইল ডেসক্রিপ্টরগুলো অনিচ্ছাকৃতভাবে নতুন খোলা ফাইল অ্যাক্সেস করতে ব্যবহৃত না হয়।
যদি আপনি ফ্রেমওয়ার্কে এমন কোনো পরিবর্তন করেন যার মধ্যে জাইগোটে রিসোর্স লোড করার চেষ্টাও অন্তর্ভুক্ত, এবং তার ফলে SELinux ডিনায়াল বা IO ফেইলর পান:
নামবিহীন ফাইল ডেসক্রিপ্টরগুলোর ক্ষেত্রে,
Restatকল করার সময় সেগুলোকেfds_to_ignoreভেক্টরে অন্তর্ভুক্ত করুন।নামযুক্ত ফাইল বর্ণনাকারীর জন্য:
-
WORKING_DIRECTORY /frameworks/base/core/jni/fd_utils.cppফাইলটি সম্পাদনা করুন। - খোলা ফাইলগুলির জন্য অনুমতি তালিকায় পাথটি যোগ করুন।
-