خانه » آموزش » اندروید » برنامه اندروید چگونه کامپایل و اجرا می شود

برنامه اندروید چگونه کامپایل و اجرا می شود

بسمه تعالی

در این جلسه قصد داریم با نحوه ساخته شدن و اجرا شدن برنامه اندروید آشنا شویم.  اول از همه اصطلاح “کامپایل” شدن را تعریف می کنیم. در این باره pc mag staff می گوید:

A compiler is computer software that transforms computer code written in one programming language (the source language) into another programming language (the target language). Compilers are a type of translator that support digital devices, primarily computers. The name compiler is primarily used for programs that translate source code from a high-level programming language to a lower level language (e.g., assembly language, object code, or machine code) to create an executable program.

 

کامپایل شدن به معنای کنارهم قرار دادن و تبدیل کدهای و منابع برنامه و ساخت فایلی قابل اجرا برای دستگاه مقصد است. به برنامه ای که این کار را انجام می دهد کامپایلر گفته می شود. ممکن است برنامه ای برای محیط ویندوز کامپایل شود ( برنامه های ویندوزی) و یا برای اندروید کامپایل شود. ( برنامه های اندرویدی) اما هرکدام دارای شرایط و فرمت خاصی هستند که کامپایلر آن را کنترل می کند. برای استفاده از کامپایلر های مختلف برنامه ها و ابزار توسعه خاص مورد نیاز است. به عنوان مثال برای کامپایل کردن برنامه های اندرویدی می توان از Ecilipes یا Android studio و Intellij IDEA و غیره استفاده کرد. برای ساخت و کامپایل برنامه های ویندوزی از Visual Studio، Borland delphi و غیره استفاده کرد. بحث اصلی ما در مورد کامپایل برنامه اندروید است.

به مراحل کامپایل کد اندروید در شکل زیر توجه کنید:

در این جلسه قصد داریم با نحوه ساخته شدن و اجرا شدن برنامه اندروید آشنا شویم. اول از همه اصطلاح "کامپایل" شدن را تعریف می کنیم.

مرحله اول: ابتدا سورس کد ها و کتاب خانه ها توسط کامپایلر جاوا  که Javac نام دارد به بایت کد جاوا تبدیل می شود. بایت کد، کد تولید شده برای اجرا روی ماشین های مجازی است. این کد معمولاً سطح خیلی پایین تری از کد نوشته شده اصلی است اما سطح آن از سطح کد ماشین بالاتر است و معمولاً توسط ماشین مجازی به کد ماشین تبدیل و روی ماشین مقصد اجرا می شود. همانطور که می دانید برنامه های جاوا برای اجرا نیاز به سیستم عامل خاصی ندارند، بلکه هرجایی که Java Virtual Machine(JVM) نصب شده باشد قابل اجرا هستند. با نصب JVM روی هر سیستم عاملی می توان برنامه های جاوا را اجرا کرد. روی گوشی های اندروید هم یک JVM بهینه شده به نام Dalvik قرار دارد که برنامه نهایی را به زبان ماشین تبدیل و اجرا می کند.

مرحله دوم: بایت کد تولید شده توسط Proguard  که از ابزارهای gradle است بهینه و کدگذاری می شود که فایل نتیجه این مرحله DEX نام دارد و پسوند آن هم .dex است. ( در مورد gradle و Proguard بعداً در مقاله ای توضیح خواهم داد.)

مرحله سوم: فایل DEX تولید شده به همراه منابع و متعلقات دیگر توسط aapt(Android Asset Packaging Tool) به یک پکیج تبدیل شده و پسوند آن apk می شود.

خیلی خوب . تا اینجا برنامه ساخته شد. حال نوبت شرح اجرای آن است.

  1. سیستم لینوکس اندروید برای هر برنامه ای که قرار است اجرا شود، از روی یک پروسس از قبل آماده به نام Zygote یک نسخه جدید فورک می کند (فورک نوعی کپی خیلی سریع) و سپس سورس برنامه در این پردازش جدید اجرا می شود.
  2. سپس داده های static را به Process اضافه می کند. این داده ها عبارتند از Dalvik code، منابع برنامه و غیره… .
  3. سپس یک Dalvik Heap ( حافظه) برای برنامه در نظر گرفته می شود و اپ آنقدر می تواند فضا اضافه کند تا به آن حداکثر برسد. اگر اپ از حافظه تخصیص داده شده فراتر رود پیام خطای out of memory دریافت خواهیم کرد.

در ضمن باید اشاره کنم که اندروید برای مدیریت حافظه از  (Last recently used) LRU استفاده می کند تا سوئیچ کردن بین اپ ها سریع تر اتفاق بیافتد. یعنی با خارج شدن کاربر از برنامه آن را از بین نمی برد، زیرا شاید فوراً نیاز شد و باعث افت راندمان می شود. اگر سیستم دچار کمبود RAM شد آن پروسسی که دروترین ارجاع را داشته را Kill می کند تا فضای خالی برای process های جدید ایجاد شود.

 

آموزش برنامه نویسی اندروید

درباره مهدی تاجیک

مهندس نرم افزار و مدیر پروژه. از سال 82 برنامه نویسی رو بصورت جدی شروع کردم و از سال 90 برنامه نویسی اندروید می کنم. علاقه زیادی به یادگرفتن و یاد دادن دارم.

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نخواهد شدعلامتدارها لازمند *

*

bigtheme
x

شاید بپسندید

آموزش برنامه نویسی اندروید – جلسه اول

بخش هایی که در این جلسه آموزش یاد می گیریم: اندروید و برنامه اندرویدی و apk چیست؟ با چه زبانهایی می توان برای اندروید برنامه نویسی کرد و من با چه زبانی آموزش خواهم داد؟ بخش های اصلی تشکیل دهنده برنامه اندروید پکیج چیست؟ انواع دیوایس ها کدامند؟ Emulator چیست؟

تفاوت Handler و Thread و AsyncTask در اندروید

با سلام، ممکنه برای خیلی ها این سوال پیش اومده ...

نحوه ارتباط بین thread ها

thread یا رشته عبارتند از  واحد های کلی پردازش وظایف ...