AOT (Ahead-Of-Time) — ایک کمپائیلیشن ٹیکنالوجی جس میں سورس کوڈ یا بائٹ کوڈ کو پروگرام پر عملدرآمد سے پہلے، بلڈ یا انسٹالیشن مرحلے میں مشین ہدایات میں تبدیل کیا جاتا ہے۔ Android میں، AOT کمپائیلیشن ART رن ٹائم ماحول کی ایک اہم اختراع بن گئی، جس نے ورژن 5.0 Lollipop میں Dalvik کی جگہ لی۔ Google، 2024 کے مطابق، ART میں AOT کمپائیلیشن وارم اپ تاخیر کو ختم کرتی ہے اور JIT نقطہ نظر کے مقابلے میں ایپلیکیشنز کی بجلی کی کھپت کو 10–15% تک کم کرتی ہے۔
اہم نکات
Ahead-Of-Time (AOT) ایک کمپائیلیشن طریقہ ہے جس میں پروگرام کو چلانے سے پہلے مشین کوڈ میں تبدیل کیا جاتا ہے۔ اصطلاح “Ahead-Of-Time” JIT (Just-In-Time) کے برعکس ہے: اگر JIT “عین وقت پر” کمپائل کرتا ہے، تو AOT “پہلے سے” کمپائل کرتا ہے۔ ایک AOT کمپائلر سورس کوڈ یا انٹرمیڈیٹ نمائندگی (بائٹ کوڈ) کو ان پٹ کے طور پر لیتا ہے اور چلانے کے لیے تیار ایک قابل عمل فائل تیار کرتا ہے۔
AOT کی تاریخ روایتی C اور C++ کمپائلرز سے جڑی ہوئی ہے، جہاں کمپائیلیشن ہمیشہ عملدرآمد سے پہلے ہوتی ہے۔ منیجڈ زبانوں (Java، C#، Dart) کے تناظر میں، AOT ایک حالیہ اختراع ہے: طویل عرصے تک یہ خیال کیا جاتا تھا کہ متحرک صلاحیتیں (ریفلیکشن، ڈائنامک کلاس لوڈنگ) AOT کو لاگو کرنا مشکل بناتی ہیں۔ Google نے Android کے لیے dex2oat بنا کر اس مسئلے کو حل کیا — DEX بائٹ کوڈ کا مقامی کوڈ میں AOT کمپائلر۔
ایک AOT کمپائلر مکمل ترجمہ سائیکل انجام دیتا ہے۔ پہلا مرحلہ — پارسنگ اور ایبسٹریکٹ سنٹیکس ٹری (AST) کی تعمیر۔ دوسرا — تجزیہ اور اصلاح: ڈیڈ کوڈ ہٹانا، ان لائننگ، لوپ آپٹیمائزیشن۔ تیسرا — ہدف آرکیٹیکچر (ARM، ARM64، x86) کے لیے مشین کوڈ جنریشن۔ نتیجہ — ایک قابل عمل فائل جسے رن ٹائم پر اضافی پروسیسنگ کی ضرورت نہیں ہوتی۔
# dex2oat AOT کمپائلر کو دستی چلانا
dex2oat --dex-file=classes.dex \
--oat-file=classes.oat \
--arch=arm64 \
--instruction-set-variant=generic
# کمپائل شدہ OAT فائل کی جانچ کریں
oatdump --oat-file=classes.oat --output=oat_dump.txt
Android میں، AOT کمپائیلیشن dex2oat یوٹیلٹی (dalvik executable to optimized android translator) کے ذریعے لاگو کی جاتی ہے۔ جب کوئی صارف ایپلیکیشن انسٹال کرتا ہے، سسٹم dex2oat چلاتا ہے، جو APK سے DEX فائلیں پڑھتا ہے، بائٹ کوڈ کو بہتر بناتا ہے اور ایک OAT فائل — مقامی کوڈ کے ساتھ ELF بائنری بناتا ہے۔ یہ فائل /data/dalvik-cache/ پارٹیشن میں محفوظ ہوتی ہے۔
کمپائیلیشن کے عمل میں آپٹیمائزیشن کی کئی سطحیں شامل ہیں۔ بنیادی سطح — بائٹ کوڈ تصدیق اور بنیادی اصلاح (ڈیڈ کوڈ ہٹانا، کانسٹنٹ فولڈنگ)۔ درمیانی سطح — میتھڈ ان لائننگ، لوپ انرولنگ، ایسکیپ اینالیسس۔ زیادہ سے زیادہ سطح — پوری ایپلیکیشن کی عالمی اصلاح، بشمول ڈی ورچولائزیشن اور اسٹیک سائز آپٹیمائزیشن۔ اصلاح کی سطح کمپائیلیشن موڈ (speed، speed-profile، space) پر منحصر ہے۔
ایک OAT فائل ELF (Executable and Linkable Format) فارمیٹ استعمال کرتی ہے — وہی فارمیٹ جو مقامی Linux بائنریز استعمال کرتی ہیں۔ OAT فائل کے اندر ہر ایپلیکیشن میتھڈ کے لیے کمپائل شدہ کوڈ ہوتا ہے، اس کے ساتھ میٹا ڈیٹا: کلاسز، فیلڈز، میتھڈز اور ان کے تعلقات کے بارے میں معلومات۔ ART اس میٹا ڈیٹا کو مکمل DEX پارسنگ کے بغیر تیز کلاس لوڈنگ اور علامتی حوالہ جات حل کرنے کے لیے استعمال کرتا ہے۔
| OAT جزو | مقصد |
|---|---|
| ELF ہیڈر | ELF فارمیٹ ہیڈر |
| کوڈ سیکشن | کمپائل شدہ میتھڈز کا مشین کوڈ |
| OAT ہیڈر | ART میٹا ڈیٹا: ورژن، سیکشن سائز |
| DEX سیکشنز | ریفلیکشن کے لیے اصل DEX ڈیٹا |
| لنک ٹیبل | JNI اور مقامی لائبریریوں کے لیے لنک ٹیبل |
AOT اور JIT کارکردگی اور لچک کے درمیان سمجھوتے کی جگہ میں مختلف نکات کی نمائندگی کرتے ہیں۔ AOT پہلے سیکنڈ سے زیادہ سے زیادہ عملدرآمد کی رفتار فراہم کرتا ہے لیکن زیادہ ڈسک جگہ اور انسٹالیشن وقت کی ضرورت ہوتی ہے۔ JIT جگہ اور انسٹالیشن وقت بچاتا ہے لیکن وارم اپ تاخیر اور بجلی کی کھپت کی چوٹیوں کی قیمت ادا کرتا ہے۔
بنیادی انتخاب کا عنصر استعمال کا معاملہ ہے۔ ایپلیکیشنز کے لیے جو ایک بار لانچ ہوتی ہیں اور طویل عرصے تک چلتی ہیں (گیمز، ایڈیٹرز، نیویگیشن)، AOT بہتر ہے — کمپائیلیشن کے اخراجات مستحکم کارکردگی سے پورے ہو جاتے ہیں۔ چھوٹی یوٹیلٹیز کے لیے جو شاذ و نادر ہی لانچ ہوتی ہیں اور مختصر مدت کے لیے چلتی ہیں، JIT زیادہ فائدہ مند ہو سکتا ہے — تیز انسٹالیشن اور چھوٹا فٹ پرنٹ چوٹی کی کارکردگی سے زیادہ اہم ہے۔
| معیار | AOT | JIT |
|---|---|---|
| شروع | فوری | وارم اپ کے ساتھ |
| انسٹالیشن | سست (کمپائیلیشن) | تیز |
| ڈسک جگہ | +15–30% | کم سے کم |
| بجلی کی کھپت | مستحکم | کمپائیلیشن کے دوران چوٹیاں |
| موافقت | کم | زیادہ |
ایک دلچسپ باریک بینی: AOT کوڈ ہمیشہ JIT سے تیز نہیں ہوتا۔ JIT کے پاس رن ٹائم پروفائلنگ معلومات تک رسائی ہوتی ہے — درست آبجیکٹ کی اقسام، کال فریکوئنسی، حقیقی برانچنگ پیٹرن۔ یہ AOT کے لیے دستیاب نہ ہونے والی اصلاحات (مثلاً، پروفائل گائیڈڈ ان لائننگ) کو لاگو کرنے کی اجازت دیتا ہے۔ عملی طور پر، AOT اور JIT کے درمیان کمپائل شدہ کوڈ کی کارکردگی کا فرق منظر نامے کے لحاظ سے ±5–10% ہے۔
AOT موبائل ایپلیکیشنز کے لیے تین اہم فوائد فراہم کرتا ہے۔ پہلا — پیش قیاسی کارکردگی۔ صارف پہلے سیکنڈز میں “ہکلانا” نہیں دیکھتا: ایپلیکیشن پہلے فریم سے زیادہ سے زیادہ رفتار سے چلتی ہے۔ یہ گیمز، اینیمیشنز اور ہموار ٹرانزیشن والے انٹرفیس کے لیے اہم ہے۔
دوسرا — توانائی کی کارکردگی۔ AOT JIT کمپائیلیشن کی مخصوص CPU چوٹی کے بوجھ پیدا نہیں کرتا۔ پروسیسر مستحکم موڈ میں کام کرتا ہے، ایپلیکیشن استعمال کے پہلے 30–60 سیکنڈز کے دوران بجلی کی کھپت کو 10–15% کم کرتا ہے۔ ایک عام صارف کے لیے جو روزانہ 20–30 ایپلیکیشنز لانچ کرتا ہے، یہ بیٹری کی زندگی میں نمایاں اضافہ فراہم کرتا ہے۔
AOT کمپائیلیشن رن ٹائم ماحول کو آسان بناتی ہے۔ جب تمام کوڈ پہلے سے کمپائل ہو چکا ہوتا ہے، رن ٹائم پر JIT کمپائلر، انٹرپریٹر یا پروفائلر کی ضرورت نہیں ہوتی۔ یہ رن ٹائم کے سائز کو کم کرتا ہے اور غلطیوں کے امکان کو کم کرتا ہے۔ مکمل AOT موڈ میں ART فعال JIT والے اسی طرح کے ماحول کے مقابلے میں تقریباً 15% کم RAM استعمال کرتا ہے۔
AOT کا بنیادی نقصان انسٹالیشن کا وقت ہے۔ Android 5.0 والے ابتدائی آلات پر، بڑی ایپلیکیشنز (100–200 MB) کو انسٹال کرنے میں AOT کمپائیلیشن کی وجہ سے 2–5 منٹ لگ سکتے تھے۔ اس نے منفی صارف تجربہ پیدا کیا: APK ڈاؤن لوڈ کرنے کے بعد، صارفین کو ایپلیکیشن کھولنے سے پہلے انتظار کرنا پڑتا تھا۔ Google نے Android 7.0 میں ہائبرڈ اسکیم پر سوئچ کرکے اس مسئلے کو جزوی طور پر حل کیا۔
دوسرا نقصان ڈسک جگہ ہے۔ OAT فائلیں اصل DEX فائلوں سے 15–30% بڑی ہوتی ہیں۔ 8–16 GB اندرونی اسٹوریج والے آلات پر، ہر ایپلیکیشن سسٹم پارٹیشن پر اضافی جگہ “کھاتی ہے۔” بڑی تعداد میں انسٹال شدہ ایپلیکیشنز (50–100) والے صارفین کے لیے، یہ سسٹم اپ ڈیٹس کے لیے ناکافی جگہ کا باعث بن سکتا ہے۔
AOT کوڈ کمپائیلیشن کے وقت مقرر ہوتا ہے۔ اگر ایپلیکیشن Android ورژن، ڈیوائس ماڈل یا صارف کی ترتیبات کے لحاظ سے مختلف عملدرآمد کے نمونے استعمال کرتی ہے، تو AOT موافقت نہیں کر سکتا۔ ایک منظر نامے کے لیے منتخب کردہ اصلاحات دوسرے کے لیے غیر موزوں ہو سکتی ہیں۔ JIT اس سلسلے میں زیادہ لچکدار ہے: جب عملدرآمد کے حالات تبدیل ہوتے ہیں تو یہ ہاٹ میتھڈز کو دوبارہ کمپائل کرتا ہے۔
AOT کمپائیلیشن نہ صرف Android میں استعمال ہوتی ہے۔ Flutter Dart کوڈ کو iOS اور Android کے لیے مقامی کوڈ میں کمپائل کرنے کے لیے AOT استعمال کرتا ہے۔ یہ کم درجے کے آلات پر بھی 60 fps پر UI کارکردگی کو یقینی بناتا ہے۔ ڈویلپمنٹ کے دوران، Flutter JIT (hot reload) استعمال کرتا ہے، اور ریلیز بلڈ کے لیے — AOT، دونوں طریقوں کے فوائد کو یکجا کرتا ہے۔
.NET ایکو سسٹم میں، ReadyToRun (R2R) ٹیکنالوجی اسمبلیوں کو پہلے سے مقامی کوڈ میں کمپائل کرنے کی اجازت دیتی ہے۔ یہ .NET ایپلیکیشنز کے اسٹارٹ اپ وقت کو 30–50% کم کرتی ہے۔ Go کمپائلر فطری طور پر ایک AOT کمپائلر ہے: Go پروگرام بغیر بیرونی انحصار کے ایک جامد بائنری میں کمپائل ہوتے ہیں، جو انہیں کنٹینر ماحول کے لیے مثالی بناتا ہے۔
// Flutter: Dart کا AOT کمپائیلیشن مقامی کوڈ میں
// ریلیز بلڈ AOT استعمال کرتی ہے
flutter build apk --release
// نتیجہ: AOT-کمپائل کردہ Dart کوڈ کے ساتھ libapp.so
// ڈویلپمنٹ JIT (hot reload) استعمال کرتی ہے
flutter run
AOT کا ایک اضافی فائدہ ریورس انجینئرنگ کو مشکل بنانا ہے۔ کمپائل شدہ مقامی کوڈ کو بائٹ کوڈ کے مقابلے میں ڈی کمپائل کرنا زیادہ مشکل ہے۔ JADX اور APKTool جیسے ٹولز DEX فارمیٹ کے ساتھ کام کرتے ہیں لیکن OAT فائلوں سے اسی سطح کی تفصیل کے ساتھ سورس کوڈ بازیافت نہیں کر سکتے۔ یہ اوبفسکیشن (ProGuard، R8) کی جگہ نہیں لیتا، لیکن تجزیہ کاروں کے لیے ایک اضافی رکاوٹ پیدا کرتا ہے۔
Android میں جدید معیار پروفائل پر مبنی AOT کمپائیلیشن ہے، جو Android 7.0 سے ART میں لاگو ہے۔ انسٹال کرتے وقت، ایپلیکیشن مکمل طور پر کمپائل نہیں ہوتی — اس کے بجائے، پہلے لانچ کے لیے تیز بائٹ کوڈ تصدیق اور JIT استعمال کیا جاتا ہے۔ یہ Android 5.0–6.0 میں خالص AOT کی طویل انسٹالیشن کے مسئلے کو حل کرتا ہے۔
2–3 ایپلیکیشن لانچ کے بعد، ART پروفائلر حقیقی استعمال کے بارے میں ڈیٹا اکٹھا کرتا ہے اور تعین کرتا ہے کہ کون سے میتھڈز کارکردگی کے لیے سب سے اہم ہیں۔ پھر، پس منظر میں (عام طور پر رات کو جب ڈیوائس چارج ہو رہی ہوتی ہے)، dex2oat ان ہاٹ میتھڈز کو مقامی کوڈ میں کمپائل کرتا ہے۔ پس منظر کی کمپائیلیشن کے بعد، ایپلیکیشن مکمل AOT کے برابر کارکردگی حاصل کرتی ہے، انسٹالیشن کے دوران صارف کے تجربے کو منفی طور پر متاثر کیے بغیر۔
// کمپائیلیشن موڈ کا پروگراماتی کنٹرول (Android 9+)
fun requestProfileCompilation(context: Context) {
val pm = context.packageManager
// پروفائل پر مبنی کمپائیلیشن استعمال کرنے کی سفارش کی جاتی ہے
pm.setComponentEnabledSetting(
ComponentName(context, javaClass()),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP
)
}
ہائبرڈ کمپائیلیشن کے فوائد کو زیادہ سے زیادہ کرنے کے لیے، ڈویلپرز کو کچھ اصولوں پر عمل کرنا چاہیے۔ بیس لائن پروفائلز (baseline profiles) استعمال کریں — پہلے سے اکٹھے کیے گئے پروفائلز جو APK کے ساتھ آتے ہیں اور ART کو انسٹالیشن کے فوراً بعد ہاٹ میتھڈز کی AOT کمپائیلیشن شروع کرنے کی اجازت دیتے ہیں۔ بیس لائن پروفائلز مکمل کارکردگی تک پہنچنے کا وقت 2–3 لانچ سے پہلے لانچ تک کم کر دیتے ہیں۔
اکثر پوچھے گئے سوالات
AOT صارف کے چلانے سے پہلے پروگرام کو مشین کوڈ میں تبدیل کرنا ہے۔ تصور کریں کہ ایک کتاب آپ کے کھولنے سے پہلے مکمل طور پر آپ کی زبان میں ترجمہ ہو جاتی ہے — آپ صفحہ کے ترجمے میں تاخیر کے بغیر فوراً پڑھتے ہیں۔
AOT انسٹالیشن کے دوران کوڈ کمپائل کرتا ہے (سست انسٹالیشن، لیکن تیز اسٹارٹ اپ)۔ JIT رن ٹائم پر کوڈ کمپائل کرتا ہے (تیز انسٹالیشن، لیکن پہلے سیکنڈ سست ہوتے ہیں)۔ جدید نظام دونوں طریقوں کو یکجا کرتے ہیں۔
Google JIT وارم اپ کے مسئلے کو ختم کرنا چاہتا تھا — ایپلیکیشن کے عملدرآمد کے پہلے سیکنڈز میں تاخیر۔ ART میں AOT کمپائیلیشن نے فوری اسٹارٹ اپ فراہم کیا اور بجلی کی کھپت کم کی، جو موبائل آلات کے لیے بہت اہم تھا۔
APK سائز تبدیل نہیں ہوتا — AOT کمپائیلیشن سسٹم پارٹیشن پر OAT فائلیں بناتی ہے جو اصل DEX فائلوں سے 15–30% بڑی ہوتی ہیں۔ صارف اسے ڈاؤن لوڈ فائل کے سائز میں اضافے کے طور پر نہیں، بلکہ خالی اندرونی اسٹوریج جگہ میں کمی کے طور پر دیکھتا ہے۔
یہ ایک ہائبرڈ طریقہ ہے جہاں ایپلیکیشن کے پہلے لانچ JIT استعمال کرتے ہیں، اور پھر سسٹم پس منظر میں صرف کثرت سے استعمال ہونے والے میتھڈز کو مقامی کوڈ میں کمپائل کرتا ہے۔ یہ JIT کی تیز انسٹالیشن کو AOT کی اعلی کارکردگی کے ساتھ جوڑتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں