PDA

View Full Version : مبانی برنامه نویسی اندروید



hesamy2004
شنبه 07 اسفند 1389, 09:37 صبح
این مقاله بخش دوم از فصل اول (نکات پایه ای اندروید) می باشد. اگر تاکنون بخش اول را مطالعه نکرده اید، لطفاً ابتدا مقاله “اندروید چیست؟ (http://www.kamalan.com/?p=521)” را مطالعه فرمایید. برنامه های اندروید (Android applications) به زبان جاوا نوشته میشوند. SDK ی اندروید کدها را کامپایل میکند – به همراه تمامی دیتاها و منابع دیگر (مانند تصاویر) – و در داخل پکیج اندروید و با پسوند apk. ذخیره مینماید. تمامی کدهای موجود در یک apk. مربوط به یک برنامه (application) تلقی میشوند و سیستم عامل اندروید این فایل را به عنوان یک فایل اجرایی در نظر میگیرد.

با نصب هر برنامه بر روی یک دستگاه اندرویدی یک پکیج امنیتی مخصوص به خود آن برنامه به آن تعلق میگیرد.

۱) سیستم عامل اندروید سیستمی مبنتی بر لینوکس با قابلیت پشتیبانی از چندکاربر است، بدین صورت که هر برنامه به معنی یک کاربر در نظر گرفته میشود.

۲) بصورت پیش فرض، سیستم به هر برنامه ای یک کد احراز هویت (Linux user ID) مخصوص به خودش را میدهد (این کد فقط برای سیستم قابل شناسایی است و برای برنامه شناخته شده نیست). سیستم برای تمام فایلهای برنامه مجوز صادر میکند، این کار باعث میشود تا تنها برنامه با آن کد هویتی خودش به فایلها دسترسی داشته باشد.

۳) هر پردازشی بر روی ماشین مجازی خودش (virtual machine) اجرا میشود. بنابراین، اجرای کدهای یک برنامه از برنامه دیگر در شرایط مجزا (isolation) انجام میشود.

۴) بصورت پیش فرض، اجرای هر برنامهای بر روی پردازش لینوکسی مربوط به خودش انجام میشود. اندروید، پردازش را زمانی اجرا میکند که کامپوننت نیاز به اجرا شدن داشته باشد (در ادامه به توضیح کامپوننت ها خواهیم پرداخت، نگران نباشید!)، پردازش را زمانی متوقف میکند (shuts down) که دیگر به آن نیازی نباشد یا زمانیکه سایر برنامه ها برای اجرا به حافظه بیشتر نیاز داشته باشند.


بدین روش، سیستم اندروید اصل حداقل امتیاز (principle of least privilege) را اجرا میکند. بر اساس این اصل، هر برنامه ای، بصورت پیش فرض، تنها به کامپوننت هایی دسترسی خواهد داشت که برای اجرا به آنها نیاز داشته باشد و نه بیشتر. این روش محیطی بسیار امن خواهد ساخت، بدین ترتیب که یک برنامه تا زمانیکه مجوزهای لازم را نداشته باشد، نمیتواند به منابع سیستم دسترسی داشته باشد.

اما، راه هایی وجود دارد که یک برنامه بتواند دیتاهای خود را با دیگر برنامه ها به اشتراک بگذارد و یا به سرویس هایی که سیستم میدهد، دسترسی داشته باشد:

۱) این قابلیت برای دو برنامه وجود دارد که بتوانند از یک کد هویتی (Linux user ID) مشترک استفاده کنند. بدین ترتیب هرکدام میتوانند از فایلهای دیگری استفاده نمایند. برای حفظ منایع سیستم، برنامه هایی که از یک کد هویتی استفاده میکنند میتوانند از یک ماشین مجازی استفاده کنند و بترتیب بر روی پردازشهای لینوکسی اجرا شوند (برنامه ها نیاز به sign شدن با یک گواهینامه (certificate) دارند).

۲) هر برنامه میتواند درخواست مجوز برای دسترسی به دیتای دستگاه (device) مانند کانتکت های کاربر (user’s contacts)، پیامهای SMS، حافظه جانبی (SD card)، دوربین، بلوتوث و غیره را داشته باشد. تمامی این مجوزها در زمان نصب برنامه از کاربر مورد سئوال قرار خواهد گرفت.



مطالب فوق توضیح مختصری در مورد چگونگی وجود و عملکرد یک برنامه در سیستم اندروید بود. سایر مواردی که در این مقاله توضیح داده خواهند شد، عبارتند از:

۱) چارچوب و ساختار کامپوننت ها که برنامه شما را می سازند.

۲) فایل مانیفست (manifest) که در آن کامپوننت ها تعریف میشوند و درخواست استفاده از دیتاهای دستگاه داده میشود.

۳) منابعی که از کدهای برنامه جدا هستند و اجازه میدهند که کدهای برنامه شما با درصد بالایی بهینه سازی شوند.



ادامه دارد …

hesamy2004
سه شنبه 10 اسفند 1389, 19:40 عصر
کامپوننت های برنامه (Application Components)

کامپوننت های برنامه، ضروری ترین بلوک های ساختمانی (building blocks) در ساخت برنامه های کاربردی می باشند. هر کامپوننت دارای خصوصیاتی است که از آن طریق میتوانید درخواست های خود را به سیستم اعلام کنید. ضرورتاً همه کامپوننت ها دریافت کننده دستورات کاربر نیستند و بعضی مواقع وابسته به یکدیگرند، اما هرکدامشان نقش مستقل خود را ایفا میکنند. از آنجا که کامپوننت ها مستقل از یکدیگر هستند، با استفاده از آنها قادریم رفتار کلی برنامه را مشخص کنیم.

چهار نوع مختلف از کامپوننت ها وجود دارد. هر نوع در خدمت یک هدف مشخص است و چرخه حیات (lifecycle) مخصوص به خودش را دارد که معلوم میکند کامپوننت چگونه ایجاد میشود و چگونه از بین میرود.

در اینجا به معرفی چهار نوع کامپوننتها می پردازیم.

اکتیویتی ها (Activities): اکتیویتی بیانگر یک اسکرین کامل (صفحه نمایشگر) به همراه یک واسط کاربری است. بعنوان مثال، یک برنامه چک کردن ایمیل را درنظر بگیرید. در این برنامه ممکن است یک اکتیویتی برای نشان دادن لیست ایمیل های جدید داشته باشید، یک اکتیویتی دیگر برای نوشتن و ارسال ایمل داشته باشید و یک اکتیویتی دیگر برای خواندن ایمیل داشته باشید که هرکدام مستقل از دیگری کار میکنند. بدین ترتیب، یک برنامه مجزا میتواند با هرکدام از این اکتیویتی ها ارتباط برقرار کند (اگر برنامه ایمیل اجازه اینکار را بدهد). بعنوان مثال، یک برنامه عکس برداری میتواند اکتیویتی ارسال ایمیل از برنامه ایمیل فوق را بمنظور ارسال عکس گرفته شده، اجرا نماید.

هر اکتیویتی یک زیرکلاس از کلاس Activity است که در مورد این کلاس مفصل در فصل مربوط به خودش توضیح داده خواهد شد.

سرویس ها (Services): یک سرویس کامپوننتی است که در پس زمینه (background) اجرا میشود تا یک کاری را برای مدت طولانی انجام دهد یا کاری را برای یک فرایند از راه دور (remote processes) انجام دهد. سرویس مانند اکتیویتی واسط گرافیکی ندارد. بعنوان مثال، یک سرویس میتواند موزیکی را در پس زمینه اجرا نماید درحالیکه کاربر مشغول کار با برنامه دیگری است یا مثلاً سرویس مشغول ارسال دریافت دیتا در شبکه است درحالیکه کاربر مشغول انجام کار دیگریست. کامپوننت دیگری، مانند اکتیویتی، میتواند یک سرویس را اجرا کند تا با آن در تعامل باشد.

هر سرویس یک زیرکلاس از کلاس Service است که در مورد این کلاس مفصل در فصل مربوط به خودش توضیح داده خواهد شد.

تامین کنندگان محتوا (Content providers): یک تامین کننده محتوا به مدریت دیتای به اشتراک گذاشته شده در برنامه می پردازد. دیتا میتواند به روش های مختلف ذخیره شود. مثلاً در فایل، در دیتابیس SQLite، در وب، یا هر فضای موجود که برنامه توان دسترسی به آنرا داشته باشد. از طریق تامین کننده محتوا، سایر برنامه ها میتوانند به جستجو و تغییر دیتای موجود بپردازند (اگر تامین کننده محتوا اجازه دهد). بعنوان مثال، در سیتم اندروید تامین کننده محتوایی قرار گرفته است که به مدریت اطلاعات تماس کاربر می پردازد. بنابراین، هر برنامه ای با مجوز مناسب میتواند به اطلاعات تماس دسترسی پیدا کند و در آن به جستجو بپردازد.

همچنین تامین کنندگان محتوا برای خواندن از فایل و نوشتن در فایل (reading and writing data) مناسب اند که ممکن است این فایل برای برنامه شما خصوصی باشد و قرار نباشد به اشتراک گذاشته شود. به عنوان مثال، برنامه نمونه Notepad از تامین کننده محتوا به منظور ذخیره سازی فایل استفاده میکند.

تامین کننده محتوا زیرکلاسی از کلاس ContentProvider است و میبایست مجموعه ای از API ها را بمنظور انجام ترنزاکشن ها اجرا کند.

دریافت کننده های اعلانات (Broadcast receivers): یک دریافت کننده کامپوننتی است که به پخش اعلانات همگانی سیستم (system-wide broadcast announcements) جواب میدهد. اصالت بسیاری از اعلانات به سیستم بر میگردد. بعنوان مثال، یک اعلان اعلام میکند که صفحه نمایش خاموش است، باتری کم است یا عکس گرفته شد. همچنین برنامه ها قابلیت راه اندازی (initiate) اعلانات را دارند. بعنوان مثال، اجازه دهند تا برنامه های دیگر بدانند که فرضاً دیتا در موبایل دانلود شده است و برای آنها قابل استفاده است. اگرچه دریافت کننده های اعلانات واسط گرافیکی ندارند، میتوانند نوار وضعیتی برای خود داشته باشند تا کاربر را زمانیکه اتفاقی رخ داد، باخبر کنند. معمولاً، دریافت کننده اعلانات مانند یک دروازه (gateway) برای سایر برنامه ها است و برای انجام کارهای بسیار کوچک در نظر گرفته میشود. بعنوان نمونه، ممکن است سرویسی را راه اندازی نماید تا بسته به اتفاقی کاری را انجام دهد.

یک دریافت کننده اعلانات بعنوان زیر کلاسی از کلاس BroadcastReceiver است و هر اعلان بصورت یک شیء (Intent object) تحویل داده میشود. در مورد دریافت کننده های اعلانات نیز در فصل های بعد صحبت خواهیم کرد.



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

وقتی سیستم کامپوننتی را اجرا میکند، خط پردازش برنامه آغاز میشود (اگر تا حالا اجرا نشده باشد) و کلاسهای مورد نیاز برای اجرای برنامه فراخوانی میشوند. بعنوان مثال، اگر برنامه شما اکتیویتی برنامه دوربین را اجرا نماید تا عکس بگیرد، اکتیویتی در خط پردازشی قرار میگیرد که متعلق به برنامه عکسبرداری است، نه در خط پردازش برنامه شما. بنابراین، برخلاف انجام پردازش ها در سایر سیستمهای دیگر، برنامه های اندروید یک نقطه شروع معین (single entry point) ندارند (مثل نقطه شروع ()main).

از آنجاییکه سیستم، اجرای هر برنامه را در خط پردازش مجزا از برنامه های دیگر انجام میدهد و هر برنامه ممکن است مجوزهای مختلف داشته باشد، برنامه شما نمیتواند بطور مستقیم کامپوننتی از دیگر برنامه ها را اجرا کند. اما سیستم اندروید میتواند اینکار را برای شما انجام دهد. بنابراین، برای اجرای اکتیویتی برنامه ای دیگر، باید پیامی (message) به سیستم ارسال کنید تا قصد (intent) شما برای اجرای آن کامپوننت خاص را معلوم کند. سیستم کامپوننت مورد نظر را برایتان اجرا میکند.



ادامه دارد …

hesamy2004
سه شنبه 17 اسفند 1389, 10:33 صبح
اجرای کامپوننت ها (Activating Components)

سه نوع از چهار نوع کامپوننت ها (اکتیویتی ها، سرویس ها و دریافت کننده ها) با پیام هایی (asynchronous message) که به Intent مفروفند، اجرا می شوند. Intent کامپوننت ها را در زمان اجرا بهم وصل میکند (اینطوری میتوانید فکر کنید که کامپوننتی یک درخواستی را ارسال میکند و منتظر جواب می شود)، خواه کامپوننت ها مربوط به برنامه شما باشند یا نباشند.

یک اینتنت با ساخت یک شیء از Intent بوجود می آید؛ با اینکار پیامی تعریف میشود که بوسیله آن میتوان یک کامپوننت خاص یا نوع خاصی از کامپوننت را فعال کرد. یک اینتنت بترتیب میتواند صریح یا ضمنی (explicit or implicit) باشد.

در اکتیویتی ها و سرویس ها، یک اینتنت معرف عملی برای اجراست (بعنوان مثال برای “دیدن” یا “ارسال” یک چیزی) و ممکن است چیزی را معرفی کند که کامپوننت برای اجرا نیاز به آن داشته باشد. بعنوان مثال، اینتنت ممکن است درخواستی را به یک اکتیویتی ارسال کند که آن اکتیویتی یک تصویری را نمایش دهد یا یک صفحه وبی را باز کند. در بعضی موارد، میتوانید یک اکتیویتی را اجرا کنید تا یک نتیجه ای را دریافت کنید، که در اینصورت، اکتیویتی نیز نتیجه را درغالب یک اینتنت برگشت میدهد (بعنوان مثال، میتوانید یک اینتنت ارسال کنید تا کاربر شماره تماس مورد نظرش را انتخاب کند و این شماره به شما برگشت داده شود. اینتنت برگشت داده شده شامل یکدر دریافت کننده های اعلانات، اینتنت خیلی ساده یک اعلان (خبر) را ارسال میکند (بعنوان مثال، یک اعلان ارسال میکند که باتری خیلی کم است. این عمل فقط شامل یک رشته “battery is low” است).

در نوع آخر کامپوننت، تامین کننده محتوا، توسط اینتنت اجرا نمیشود. بلکه، زمانی فعال میشود که درخواستی از یک ContentResolver برسد. وظیفه ContentResolver سر و سامان دادن به ترنزاکشن های ارسالی یه تامین کننده محتواست. این کار به امنیت ارسال و دریافت دیتا کمک میکند زیرا یک سطح دسترسی عادی بین تامین کننده محتوا و کامپوننت درخواست دهنده را حذف کرده است.

متدهای مختلفی بمنظور اجرای هر نوع کامپوننت وجود دارد:

۱- یک اکتیویتی با ارسال یک اینتنت به ()startActivity یا ()startActivityForResult اجرا میشود (وقتی میخواهید اکتیویتی یک نتیجه را به شما برگرداند).

۲- یک سرویس با ارسال یک اینتنت به ()startService یا ()bindService اجرا میشود.

۳- یک اعلان توسط ارسال یک اینتنت به متدهایی مانند ()sendBroadcast ، ()sendOrderedBroadcast ، ()sendStickyBroadcast آماده سازی (initiate) میشود.

۴- با فراخوانی متد ()query در یک ContentResolver میتوان در یک تامین کننده محتوا پرس و جو (query) انجام داد.


فایل مانیفست (The Manifest File)

قبل از اینکه یک سیستم اندروید قادر به اجرای یک کامپوننت باشد، سیستم باید بداند کامپوننتی وجود دارد . این کار با خواندن فایلی بنام AndroidManifest.xml که معروف به فایل مانیفست است، انجام میشود. برنامه شما باید تمام کامپوننت ها را در این فایل معرفی کند، که آدرس این فایل دایرکتوری اصلی پروژه تان است. مانیفست شامل قسمت های مختلفی است که کامپوننت ها هم در یکی از این قسمتها میبایست معرفی شوند. چند نمونه از چیزهایی که باید معرفی شوند در زیر آمده اند:

۱- تعریف هر مجوزی که کاربر برای کار با برنامه به آن نیاز دارد، مانند دسترسی به اینترنت یا درخواست دسترسی به اطلاعات تماس کاربر.

۲- تعریف حداقل سطح دسترسی APIی برنامه، بسته به اینکه برنامه از چه APIی استفاده میکند.

۳- تعریف خصوصیات سخت افزاری و نرم افزاری که توسط برنامه مورد استفاده قرار میگیرد. مانند، دوربین، بلوتوث و صفحه مولتی تاچ

۴- کتابخانه های API استفاده شده در برنامه مانند استفاده از Google Maps library و موارد دیگر.


تعریف کامپوننت ها

مهمترین وظیفه مانیفست آگاه کردن سیستم اندروید از کامپوننت های برنامه است. بعنوان مثال کد زیر (لطفاً فایل ضمیمه را ببینید) نحوه تعریف یک کامپوننت را در مانیفست نشان میدهد.

در المان <application>، صفت (attribute) android:icon اشاره به یکی از منابع سیستم (که در اینجا آیکون است) میکند که برای برنامه یک آیکون تعریف کند.

در المان <activity>، صفت android:name اسم کلاس اکتیویتی را مشخص میکند و صفت android:label رشته ای تعریف میکند که به کاربر نشان داده میشود و این رشته به نام اکتیوتی اصلی برنامه اشاره میکند.

تمام کامپوننت های برنامه می بایست بطریق زیر معرفی شوند:

۱- <activity> المانهای اکتیویتی ها

۲- <service> المانهای سرویس ها

۳- <receiver> المانهای دریافت کننده های اعلانات

۴- <provider> المانهای تامین کننده محتوا


نکته مهم اینکه اکتیویتی ها، سرویس ها و تامین کنندگان محتوایی که در سورس برنامه مورد استفاده قرار داده اید ولی در فایل مانیفیست تعریف نکرده اید، برای سیستم اندروید قابل شناسایی نیستند، در نتیجه، هزگز هم اجرا نمی شوند. اما، دریافت کننده اعلانات علاوه بر اینکه میتواند در مانبفست تعریف شود، بطور داینامیک هم میتواند در کد برنامه ساخته شود (بعنوان یک شیء از BroadcastReceiver) و در سیستم، با فراخوانی متد ()registerReceiver ثبت شود.


معرفی کردن قابلیت های کامپوننت

همانطور که در بالا توضیح داده شد، برای اجرا کردن کامپوننت ها (اکتیویتی ها، سرویس ها و دریافت کننده های اعلانات)، باید از اینتنت استفاده شود. باید به صراحت نام کامپوننت مورد نظر (نام کلاس کامپوننت) به اینتنت اعلام شود تا عمل مورد نظر شما اجرا شود. با این حال، قدرت حقیقی اینتنت در مفهوم قدرت عمل (intent actions) آن نهفته است. در این حالت، شما فقط نوع کاری که به آن نیاز دارید را اعلام میکنید (درصورت نیاز میتوانید دیتای مورد نیاز برای آن عمل را نیز ضمیمه کنید)، و اجازه دهید سیستم برای شما کامپوننت مورد نظرتان را انتخاب کند و آنرا اجرا نماید. اگر چندین کامپوننت مختلف وجود داشت که همگی میتوانستند عمل خواسته شده توسط اینتنت را انجام دهند، حالا کاربر میتواند انتخاب کند که کدام برنامه اجرا شود.

روشی که سیستم در پیش میگیرد تا کامپوننت مورد نظر را انتخاب کند تا به اینتنت جواب دهد بدینگونه است که در مانیفیست هر برنامه ای قسمتی به نام intent filters وجود دارد. سیستم آنرا میخواند و وقتی اینتنتی ارسال میشود با اینها مقایسه میکند، اگر اینتنت با اینتنت فیلتر همخوانی داشت، آن برنامه را اجرا میکند.

وقتی شما کامپوننتی را در مانیفست برنامه تان معرفی میکنید، بصورت اختیاری میتوانید اینتنت فیلتر را – که توانایی های برنامه شما را نشان میدهد – نیز معرفی نمایید. بنابراین با این کار شما برنامه تان را قادر میسازید در صورتیکه برنامه ای دیگر نیاز به استفاده از قابلیت های برنامه شما را داشت، بتواند برنامه تان را اجرا کند و از نتیجه برنامه شما استفاده کند. برای معرفی اینتنت فیلتر به کامپوننتتان باید المان <intent-filter> را بصورت زیر گروه در قسمت معرفی کامپوننت، بیان کنید.

بعنوان مثال، یک برنامه ایمیل با یک اکتیویتی برای ارسال ایمیل، ممکن است اینتنت فیلتری در مانفستش تعریف شده باشد که به اینتنت send پاسخ دهد (بمنظور ارسال ایمیل). حال یک اکتیویتی در برنامه شما میتواند یک اینتنت ایجاد نماید و عمل send را درخواست کند (ACTION_SEND)، حال سیستم وقتی اینتنت شما را با فیلترهای موجود چک میکند به برنامه ایمیل میرسد و آنرا اجرا میکند وقتی شما دستور ()startActivity را صادر کنید.




ادامه دارد…

hesamy2004
پنج شنبه 19 اسفند 1389, 21:00 عصر
معرفی کردن ملزومات برنامه ها

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

بعنوان مثال، اگر برنامه شما نیاز به دوربین داشته باشد و از API های معرفی شده در سری ۲٫۱ استفاده کند (API Level 7)، می بایست در فایل مانیفست بعنوان ملزومات معرفی شود. بدین ترتیب، موبایل هایی که دوربین ندارند و یا از API های پایینتر از این سری استفاده میکنند، قادر به نصب برنامه نخواهند بود.

شما همچنین میتوانید بگویید که برنامه تان از دوربین استفاده میکند، ولی دوربین مساله اساسی نیست. در اینصورت، برنامه در ابتدای اجرا شدن چک میکند تا ببیند موبایل دوربین دارد و سپس ببیند اگر برنامه از چیزی استفاده میکند که دوربین از آن پشتیبانی نمیکند، آن خصوصیت را غیر فعال کند.

موارد زیر خصوصیات بسیار مهمی است که در حین طراحی و برنامه نویسی باید مد نظر قرار دهید:

اندازه صفحه و تراکم (Screen size and density): بمنظور طبقه بندی موبایل ها بر اساس نوع صفحه نمایشگر، اندروید به معرفی دو خصوصیت برای هر موبایل می پردازد: اندازه صفحه (ابعاد فیزیکی صفحه) و تراکم صفحه (تراکم فیزیکی پیکسل ها در صفحه نمایش که با dpi مشخص میشود). برای ساده سازی معرفی انواع صفحات، سیستم اندروید صفخات را به گروه های مختلف تقسیم بندی کرده است تا راحتتر مورد انتخاب واقع شوند.

تقسیم بندی براساس اندازه صفحه: کوچک (small)، معمولی (normal)، بزرگ (large) و خیلی بزرگ (extra large)

تقسیم بندی براساس تراکم صفحه: تراکم کم (low density)، تراکم متوسط (medium density)، تراکم زیاد (high density) و تراکم خیلی زیاد (extra high density)

بصورت پیش فرض، برنامه شما با تمام انواع صفحات و تراکم های مختلف سازگار است، علت این است که سیستم اندروید تنظیمات مناسب را برای واسط کاربری (UI layout) شما و منابع تصویری (image resources) برنامه انجام میدهد. اما، شما میبایست برنامه تان را براساس یک اندازه صفحه خاص و تصاویر را براساس تراکم صفحه طراحی و انتخاب کنید. در فایل مانیفست با استفاده از المان <supports-screens> میبایست اندازه صفحه نمایشگر پشتیبانی شده، ذکر شود.

تنظیمات ورودی (Input configurations): ابزارهای مختلف ورودی های متفاوتی برای دریافت اطلاعات از کاربر معرفی کرده اند. چند نمونه از ورودی های مختلف، صفحه کلید سخت افزاری، گوی (trackball) و کلیدهای چند جهته (five-way navigation pad) هستند. اگر برنامه شما نوع خاصی از ورودی را پشتیبانی میکند باید در فایل مانیفست با استفاده از المان <uses-configuration> معرفی شود. اما بندرت اتفاق میافتد که برنامه به یک ورودی خاص نیاز داشته باشد.

ویژگی های دستگاه (Device features): خصوصیات سخت افزاری و نرم افزاری متنوعی بر روی دستگاه های مختلف اندروید وجود دارد، مانند دوربین، حسگر نور، بلوتوث، نسخه خاصی از OpenGL و یا صفحه لمسی. هزگز نباید تصور کنید یک ویژگی خاص بر روی تمامی ابزارهای مختلف وجود دارد، بنابراین میبایست در فایل مانیفست با استفاده از المان <uses-feature> به معرفی ویژگیهای خاصی که در برنمه تان استفاده شده است، بپردازید.

نسخه پلتفرم (Platform Version): اغلب، ابزارهای مختلف اندروید از نسخه های متفاوتی استفاده میکنند، مانند اندروید ۱٫۶ و اندروید ۲٫۳٫ در نسخه های جدیدتر از API هایی استفاده شده است که در نسخ قدیمی وجود نداشته است. بمنظور معرفی API های قابل دسترس، هر نسخه از پلتفرم یک سطح API مخصوص دارد، بعنوان مثال اندروید ۱٫۰ شامل API Level 1 است و اندروید ۲٫۳ شامل API Level 9 است. اگر از API هایی استفاده میکنید که بعد از نسخه ۱٫۰ به پلتفرم اضافه شده است، میبایست با استفاده از المان <uses-sdk> حداقل سطح API را مشخص کنید



این بسیار مهم است که به نکات بالا توجه کنید و در برنامه مورد استفاده قرار دهید. علت این است که، زمانیکه شما برنامه تان را در مارکت اندروید قرار میدهید، مارکت از این تعاریف استفاده میکند تا برنامه ها را برای موبایل های مختلف فیلتر کند. بدین ترتیب، برنامه شما برای موبایل هایی قابل دسترس خواهد بود که کلیه ملزومات برنامه شما را پشتیبانی کنند.


منابع برنامه (Application Resources)

برنامه های اندروید از ترکیب چیزهای مختلفی ساخته میشود نتنها کد صرف. برنامه برای ساخته شدن نیاز به منابعی دارد که از سورس کدها مجزا هستند، مانند تصاویر، فایلهای صوتی و هرچیزی که در برنامه مورد توجه کاربر قرار میگیرد. بعنوان مثال، میبایست انیمیشن ها، منوها، استایل ها، رنگ ها و طرح گرافیکی اکتیویتی مورد استفاده کاربر با فایل های XML، تعریف شوند. همچنین، استفاده از این منابع مختلف در برنامه، از این جهت که نیاز به تغییر در سورس کد برنامه را ندارد، قابلیت بروزرسانی برنامه را بسیار ساده تر میکند. همچنین برنامه شما را قادر میسازد تا برنامه خود را برای ابزارهای دیگر با صفحات متفاوت و زبان های متفاوت، بهینه سازی کنید.

به هر منبعی که به برنامه تان اضافه میکنید، یک عدد منحصربفرد توسط SDK بعنوان کد هویتی (ID) تعلق میگیرد که شما میتوانید از آن کد در سورس برنامه یا از منابع دیگری ک در فایل های XML تعریف شده اند، بعنوان مرجعی به منبع اصلی استفاده کنید. بعنوان مثال اگر برنامه شما یک فایل تصویری با نام logo.png دارد (ذخیره شده در مسیر /res/drawable)، SDK یک کد هویتی با نام R.drawable.logo به منبع تصویری اختصاص میدهد که شما میتوانید از این برای رفرنس در کد برنامه تان استفاده کنید و از آن در واسط گرافیکی برنامه استفاده کنید.

یکی از مهمترین ویژگی که جدا بودن منابع از سورس کد برنامه دارد، قابلیتی است که به شما برای استفاده از منابع در طرح بندی موبایل های مختلف میدهد. بعنوان مثال، با تعریف یک رشته در فایل XML، میتوانید آنرا به زبانهای مختلف ترجمه کرده و در فایلهای مختلف ذخیره کنید. سپس، براساس زبانی که در دایرکتوری منابع برنامه تعریف کرده اید (مثلاً زبان فرانسه /res/values-fr) و زبان انتخاب شده توسط کاربر، سیستم اندروید زبان مناسب را در برنامه شما نشان خواهد داد.

اندروید از توصیف کننده های (qualifiers) متنوعی برای منابع جایگزین (alternative resources) شما پشتیبانی میکند. توصیف کننده، یک رشته کوچک است که شما آنرا در نام دایرکتوری منابع برنامه وارد میکنید تا براساس نیاز از آنها استفاده شود. بعنوان مثالی دیگر، شما اغلب مجبور میشوید، بسته به جهت (orientation) موبایل و اندازه آن، حالت های گرافیکی مختلفی برای اکتیویتی بسازید. بعنوان مثال، وقتی جهت موبایل در حالت درازی (portrait orientation) است، ممکن است بخواهید دکمه ها بحالت عمودی نشان داده شوند ولی زمانی که صفحه یا جهت موبایل در حالت پهنا (landscape orientation) قرار گرفته است، دکمه ها بصورت افقی قرار گرفته باشند. بنابراین، سیستم بصورت خودکار طرح گرافیکی مناسب را بسته به جهت موبایل انتخاب میکند.



پایان

————————–

منبع (http://developer.android.com/guide/topics/fundamentals.html)