مشخصات مقاله
-
5072
-
0.0
-
3644
-
0
-
0
آموزش ساختار داخلی و معماری سیستم اندروید (Android Architecture)
برنامه نویسی و توسعه اپلیکیشن برای Android
سیستم عامل اندروید
اندروید یک سیستم عامل مبتنی بر نسخه ی اصلاح و بروز رسانی شده ی Linux 2.6 و توابع برنامه نویسی و اینترفیس Java می باشد. جهت اجرای بهینه ی اندروید بر روی دستگاه موبایل، تیم توسعه دهندگان اندروید تعدای کتابخانه و درایور ویرایش شده به آن اضافه کرده اند.
در واقع علاوه بر خود دستگاه مجازی جاوا (Java virtual machine) یا همان DVM، ابزار مختلفی دیگری نظیر کامپایلر، خطایاب کد (debugger) و نرم افزار شبیه ساز (Emulator) در اختیار توسعه دهنده قرار داده شده است.
Android در اصل ساخت تیم نرم افزاری به نام Open Handset Alliance بوده و هم اکنون توسط شرکت گوگل رهبری می شود.
اندروید از یک دستگاه مجازی ویژه به نام Dalvik استفاده می کند. این دستگاه از bytecode های (فرمت کامپایل شده برنامه ی جاوایی) به خصوصی استفاده می کند، از این جهت شما نمی توانید انتظار اجرای bytecode متعارف جاوا را بر روی محیط اندروید داشته باشید (bytecode مجموعه ای از دستورات است که برای اجرای موثر توسط مفسر، طراحی شده است. بر خلاف کد منبع که برای انسان قابل فهم است، bytecode که کد قابل حمل نیز خوانده می شود از یک سری کدهای عددی فشرده، آدرس های عددی و ثابت ها تشکیل شده است).
سیستم اندروید ابزاری به نام dx در اختیار توسعه دهنده قرار می دهد که فایل های تشکیل شده از کلاس های جاوا (java class file) را به فایل هایی با پسوند dex (Dalvik Executable یا فایل های اجرایی dalvik) تبدیل می کند. برنامه ی aapt (ابزار بسته بندی فایل های asset و محتوا در اندروید) اپلیکیشن های اندروید و فایل های آن ها را داخل فایلی میزبانی به نام Android Package با پسوند .apk می گنجاند. جهت تسهیل پروسه ی توسعه ی پروژه و نرم افزارهای اندرویدی، شرکت گوگل ابزاری تخصصی به نام ADT (مجموعه ابزار ساخت و توسعه اپلیکیشن های اندرویدی) ویژه ی محیط کاری Eclipse ارائه می دهد. ابزار نام برده فرایند تبدیل از کلاس های جاوایی به فایل های dex را به صورت خودکار انجام داده و خود فایل apk را در زمان آماده سازی و نصب پروژه (deployment) ایجاد می نماید.
در ادامه ی مبحث حاضر به شرح سیستم runtime و بستر اجرای اندروید خواهیم پرداخت.
سیستم داخلی اندروید (internals)
در زمان اجرا و راه اندازی سیستم اندروید، هسته یا kernel لینوکس ابتدا فرایند "init" را فراخوانی می کند. init دو فایل "/init.rc" و "init.device.rc" را به ترتیب می خواند. فایل دوم بر اساس نوع دستگاه متفاوت بوده و به بیانی دقیق تر با توجه به هر دستگاه (device specific) ویژه و اختصاصی می باشد. فایل نام برده در محیط دستگاه مجازی تحت عنوان "init.goldfish.rc" شناخته می شود.
فایل init.rc، به وسیله ی ابزاری به نام "/system/bin/app_process"، فرایند "Zygote" (یک کامپوننت نرم افزاری و سرویسی از سیستم عامل اندروید که پدر تمامی فرایندهای اپلیکیشن های اندرویدی می باشد) را اجرا می کند. فرایند مزبور کلاس های اصلی جاوا را در حافظه بارگذاری نموده و پروسه ی پردازش اولیه ی آن ها را آغاز می کند. این کلاس ها برای اپلیکیشن اندرویدی مورد نظر بارها قابل استفاده بوده (reusable) و همین امر نیز اجرای آن را به مراتب تسریع می بخشد. پس از اتمام عملیات اولیه، فرایند ذکر شده (zygote) به socket گوش فرا داده و منتظر دریافت درخواست ها می شود.
در اندروید درایور ویژه ای به نام Binder وجود دارد که زمینه ی ارتباطات بین فرایندی بهینه را فراهم می آورد به گونه ای که ارجاعات و اشاره گرهایی به آبجکت ها بین فرایندها رد و بدل می شوند و خود آبجکت ها در Shared Memory نگهداری می شوند. در نتیجه ی این امر، از آنجایی که اکنون داده ها و اطلاعات کمتری می بایست بین فرایندها رد و بدل شود، ارتباط بهینه سازی می گردد.
برخلاف سایر سیستم های مبتنی بر لینوکس، اندروید فضای جایگزین و اضافی (swap space) در اختیار ندارد، به همین جهت میزان حافظه ی قابل استفاده برای سیستم، محدود به همان حافظه ی مستقر بر روی دستگاه می باشد.
اندروید از کتابخانه ی ویژه ی C به نام "Bionic" به جای Glibc بهره می گیرد. این کتابخانه با Glibc سازگار نبوده و به حافظه کمتری احتیاج دارد. در واقع Bionic دربردارنده ی یک نوع خاص از پیاده سازی thread می باشد که میزان حافظه ی مورد استفاده ی هر thread را بهینه ساخته و زمان اجرای thread های جدید را کاهش می دهد.
از ویرایش 2.3 به بعد، سیستم اندروید از Ext4، سیستم فایل متعارف Linux، استفاده می کند. پیش از ویرایش 2.3، سیستم فایل مورد استفاده ی اندروید YAFFS بود. برخی از ارائه دهندگان اپلیکیشن و خدمات نرم افزاری (vendor) سیسم فایل اختصاصی و دلخواه خود را جایگزین سیستم فایل متعارف اندروید می کنند.
تمامی اپلیکیشن ها user application data اختصاصی خود را دارند و به صورت پیش فرض تنها از خود اپلیکیشن می توان به این فایل ها دسترسی داشت. به منظور به اشتراک گذاری داده ها بین اپلیکیشن ها، شما می توانید اطلاعات را در فایل های ذخیره کنید که برای اپلیکیشن های دیگر قابل دسترسی می باشد. همچنین به عنوان روشی جایگزین، اپلیکیشن ها می توانند content provider اختصاصی خود را تعریف کرده و جهت تامین داده های مورد نیاز خود از این کامپوننت نرم افزاری استفاده کنند. اپلیکیشن هایی که با کلید یا گواهی نامه (certificate) یکسان امضای دیجیتالی شده باشند، می توانند با اعلان المان "android:sharedUserId" در فایل تنظیمات "AndroidManifest.xml"، یک شناسه ی مشترک داشته باشند. اپلیکیشن هایی که شناسه ی مشترک دارند، همگی در بستر فرایند یکسان اجرا شده و شناسه ی کاربری واحدی دارند. از اینرو می توانند به اطلاعات و فایل های هم دسترسی داشته باشند.
فایل .apk اپلیکیشنی که بر روی دستگاه نصب شده در پوشه ی "data/app" جایگذاری می شود. شما می توانید با استفاده از file manager یا دستور adb pull / push، اپلیکیشن را بارگیری کرده یا آن را بر روی دستگاه نصب کنید. فایل نصبی (.apk) اپلیکیشن های پولی یا اپلیکیشن هایی از فروشگاه های مجازی که قابلیت "Copy Protection" آن ها فعال شده، در پوشه ی "data/app-private" قرار دارند و به طور پیش فرض برای کاربر قابل دسترسی نمی باشند.
به منظور محافظت هر چه بیشتر اپلیکیشن در مقابل کپی برداری غیرمجاز، می توانید از کتابخانه ی "Licence Verification Library" استفاده نمایید. این کتابخانه بررسی می کند آیا اپلیکیشن پولی مورد نظر از Android Market به طور قانونی خریداری شده یا خیر.
در حال حاضر حداکثر حجم اپلکیشن های اندرویدی بین 16 تا 24 مگابایت متغیر می باشد. اینکه حجم واقعی اپلیکیشن چقدر است، منحصرا در زمان کامپایل اپلیکیشن مشخص می شود.