🧠 اندروید واقعاً چی اجرا میکنه؟
«Android Runs ELF Files — Everything Else Is Just Layers»
تا حالا برات سوال شده:
چطور برنامهای که با
Python
JavaScript
Flutter
Kotlin
یا حتی C++
نوشته شده، روی اندروید اجرا میشه؟
مگه نگفتن اندروید فقط برای Java و Kotlin هست؟
واقعیت خیلی سادهتر و جالبتره 👇
🧩 حقیقت پایهای
اندروید در اصل یک سیستمعامل مبتنی بر لینوکس است.
و لینوکس فقط یک چیز اجرا میکند:
فایلهای ELF (Executable and Linkable Format)
📌 CPU فقط «کد ماشین» میفهمد.
نه Java.
نه Python.
نه JavaScript.
هر زبانی که استفاده کنی، در نهایت باید تبدیل شود به:
Machine Code → ELF → CPU
همین.
🚪 دو راه واقعی اجرای کد در اندروید
اندروید فقط دو مسیر اصلی دارد:
مسیر اول: Java / Kotlin → DEX → ART → Native
روند اجرای اپهای معمولی:
1️⃣ شما با Java یا Kotlin کد مینویسی
2️⃣ تبدیل میشود به DEX (Dalvik bytecode)
3️⃣ هنگام نصب، ART آن را کامپایل میکند
4️⃣ خروجی نهایی: کد native در قالب ELF
ART چیست؟
ART همان Android Runtime است.
خود ART هم یک فایل ELF است به نام:
libart.so📌 نکته مهم:
وقتی اپ اجرا میشود، در واقع دیگر bytecode اجرا نمیشود؛
بلکه کد native واقعی اجرا میشود.
مسیر دوم: Native Code با NDK
در این روش:
با C یا C++ کد مینویسی
با NDK کامپایل میشود
خروجی .so میدهد
.so یک ELF است
مستقیم توسط CPU اجرا میشود
این روش برای:
🎮 بازیها (Unity, Unreal)
⚡ موتورهای JavaScript
🐍 اجرای Python
💙 Flutter
و کتابخانههای سنگین
استفاده میشود.
🐍 پس Python روی اندروید چطور کار میکند؟
جادو نیست.
کاری که انجام میشود:
مفسر CPython را به صورت native کامپایل میکنند
تبدیل به یک فایل .so
اپ آن را load میکند
حالا میتوانی Python اجرا کنی
همین اتفاق برای JavaScript هم میافتد:
V8 یا Hermes کامپایل میشوند
به صورت native اجرا میشوند
کد JS را اجرا میکنند
Flutter هم همینطور:
Dart VM به صورت native اجرا میشود
📌 همه چیز در نهایت به ELF ختم میشود.
🚀 وقتی روی آیکون اپ میزنی چه اتفاقی میافتد؟
اینجا بخش جذاب ماجراست 👇
1️⃣ Launcher یک Intent میفرستد
2️⃣ ActivityManager بررسی میکند
3️⃣ اگر پروسه وجود نداشته باشد، از Zygote میخواهد یکی بسازد
4️⃣ Zygote خودش را fork میکند
5️⃣ اپ جدید در واقع یک کپی از Zygote است
6️⃣ ActivityThread.main() اجرا میشود
7️⃣ lifecycle شروع میشود
Zygote چیست؟
Zygote یک پروسه خاص است که هنگام بوت اجرا میشود و:
ART را preload میکند
کلاسهای framework را لود میکند
آماده است تا سریع اپ جدید بسازد
📌 اپ شما از صفر ساخته نمیشود؛
یک fork از Zygote است.
🧠 چرا مستقیم executable نمیسازیم؟
چرا مثل لینوکس دسکتاپ فقط یک ELF ندهیم اجرا شود؟
چند دلیل مهم:
🔐 امنیت
📦 سازگاری با چند معماری (ARM / x86)
⚙️ بهینهسازی هنگام نصب
♻️ Garbage Collection
📱 مدیریت lifecycle اپ
ART این مزایا را فراهم میکند.
🧬 جمعبندی مهندسی
اندروید فقط ELF اجرا میکند.
بقیه چیزها فقط لایه هستند.
React Native؟
لایه.
Flutter؟
لایه.
Python؟
لایه.
Java/Kotlin؟
لایه.
همهشان در نهایت:
Your Code
↓
Runtime (ART / V8 / Dart / CPython)
↓
Native Machine Code
↓
ELF
↓
CPU
🎯 نتیجه مهم
اندروید یک سیستمعامل عمومی است که executable اجرا میکند.
هیچ جادویی وجود ندارد.
فقط لایههای انتزاعی وجود دارد.
و هرچه لایهها را بهتر بفهمی،
درک عمیقتری از معماری اندروید و اجرای اپها خواهی داشت.
🔗لینک مقاله:
https://blog.azzahid.com/posts/android-runs-elf-files-everything-else-is-just-layers/@androidSec_fa