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

Android یک سیستم عامل تحت موبایل و مبتنی بر هسته ی Linux است. پروژه ی توسعه و ارتقا اندروید AOSP یا پروژه ی کد باز اندروید نام دارد که شرکت Google آن را رهبری می کند. سیستم عامل اندروید از چهار لایه تشکیل شده است، اما یک توسعه دهنده ی اندروید معمولا با دو لایه ی بالایی (Application و Application Framework) آن سروکار دارد.
پروژه های کتابخانه ای اندروید

پروژه های کتابخانه اندروید این فصل به نحوه و چگونگی ایجاد و استفاده از پروژه های کتابخانه در اندروید می پردازد .

این فصل از سری مقاله های آموزشی اندروید, استفاده از کتابخانه ی Otto event bus و کاربرد آن در اندروید را به شما آموزش می دهد .

آموزش حاضر نحوه ی استفاده از support library ها و همچنین دلایلی که چرا گاهی بهتر است از بکار بردن آن ها در پروژه پرهیز کرد را شرح می دهد.

آموزش حاضر به شرح ایجاد و استفاده از پروژه های کتابخانه ای (library project) در اندروید می پردازد.

مقاله ی حاضر تمامی کتابخانه های پرکاربرد را به همراه code repository های (انباری از کدهای آماده) کارا و محبوب اندروید معرفی می نماید.

مبحث حاضر به شرح نحوه ی استفاده از Otto event bus در اپلیکیشن های اندروید می پردازد. Otto یک پروژه ی متن باز و رایگان (open source) است که به کامپوننت ها اجازه می دهد تا مکانیزم event bus (واسط و مترجم پیغام بین فرستنده و گیرنده) را پیاده سازی کرده تا کامپوننت های بتوانند به event ها گوش داده (subscribe) و به آن ها پیغام ارسال کنند (publish).
موضوعات ویژه برنامه نویسی اندروید

مقاله ی پیش رو نحوه ی استفاده از media API را به منظور ضبط صدا و پخش آن به شما آموزش می دهد .

ین فصل با در اختیار گذاشتن چند نکته ی آموزشی سودمند به شما آموزش می دهد چگونه کد منبع (source code) اندروید را دریافت کرده

مقاله ی آموزشی پیش رو نگاهی بر هسته ی اندروید انداخته و توضیحاتی چند درباره ی معماری اندروید به شما می دهد.

این فصل نحوه ی نشاندن (push) اطلاعات از یک سرور به دستگاه گوگل را برای شما تشریح می کند .

مجموع توابع تقویم (Calendar API) از ویرایش 4.0 اندروید عرضه شد .

آموزش حاضر نحوه ی استفاده از توابع کتابخانه ای Media API جهت پخش و ضبط صدا در محیط اندروید را شرح می دهد. پروژه ی این مبحث در محیط کاری Eclipse 3.7، با ویرایش 1.6 زبان java و بر اساس ورژن 4.0.3 سیستم عامل اندروید نوشته می شود.

آموزش حاضر به شرح نحوه ی دریافت و ترجمه ی کدهای اپلیکیشن های اندروید و نیز دانلود source code مجموعه ابزار ساخت و توسعه ی اپلیکیشن های اندرویدی (ADT) که افزونه ها و plug in های محیط کاری Eclipse هستند، می پردازد. این مبحث بر اساس Ubuntu می باشد.

مقاله ی پیشرو ساختار درونی اندروید را مورد بررسی قرار داده و توضیحاتی در خصوص معماری آن در اختیار شما قرار می دهد.

آموزش حاضر نحوه ی ارسال اطلاعات (push) از یک server (سرویس دهنده) به دستگاه مبتنی بر Google را شرح می دهد. پروژه ها و مثال های این مبحث در محیط کاری Eclipse 3.7، با استفاده از زبان Java نوشته شده و مبتنی بر Android 2.3 می باشد.
آغاز برنامه نویسی آندروید

Android یک سیستم عامل تحت موبایل و مبتنی بر هسته ی Linux است. پروژه ی توسعه و ارتقا اندروید AOSP یا پروژه ی کد باز اندروید نام دارد که شرکت Google آن را رهبری می کند. سیستم عامل اندروید از چهار لایه تشکیل شده است، اما یک توسعه دهنده ی اندروید معمولا با دو لایه ی بالایی (Application و Application Framework) آن سروکار دارد.

Android Studio در حال حاضر محیط برنامه نویسی مورد تایید شرکت Google است. محیط Android Studio خود بر اساس محیط برنامه نویسی IntelliJ شکل گرفته و در اصل همان کد و دستورات نوشته شده برای محیط برنامه نویسی (code base) مزبور است که قابلیت های جدیدی ویژه ی برنامه سازی برای اندروید به آن اضافه شده است (fork) یا به عبارت دیگر Android Studio از IntelliJ منشعب گردیده و قابلیت های جدیدی ویژه ی توسعه ی برنامه برای سیستم عامل اندروید به آن اضافه شده است.
عناصر اصلی برنامه نویسی اندروید

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

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

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

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

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

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

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

این آموزش نحوه ی پیاده سازی و استفاده از dialog یا پنجره ی محاوره ای (که به صورت کادر شناور بر روی پنجره ی activity نمایش داده می شود) در اپلیکیشن های اندرویدی را شرح می دهد. پروژه ی این مبحث داخل محیط کاری Android Studio نوشته شده و مبتنی بر ویرایش 5.0 سیستم عامل اندروید می باشد.
کار با fragment و actionbar در اندروید

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

این مبحث تمرکز خود را بر روی آموزش نحوه ی پیاده سازی و استفاده از toolbar در اپلیکیشن های اندرویدی قرار می دهد. آموزش حاضر همچنین چگونگی استفاده از /widgetکامپوننت رابط کاربری toolbar را برای شما شرح می دهد. این آموزش مبتنی بر ویرایش 6.0 سیستم عامل اندروید می باشد (= API یا کتابخانه های اندروید ورژن 23)

اندروید همچنین یک کامپوننت UI یا widget ارائه می دهد که در واقع الگو توسعه ی swipe-to-refresh را پیاده سازی کرده و به کاربر این امکان را می دهد تا با کشیدن صفحه به پایین (swipe عمودی بر روی نمایشگر) آیتم های لیست را بروز رسانی کند (عملیات update را فراخوانی نماید)
کار با فایل، شبکه و پردازش های asynchronous

این مبحث به شرح مفهوم دیتابیس در اندروید می پردازد. سپس به ترتیب نحوه ی استفاده از دیتابیس SQLite در اپلیکیشن، استفاده از ContentProvider جاری و ایجاد نمونه های جدید از آن را برای شما تشریح می کند.

مبحث حاضر به شرح نحوه ی پردازش فایل های XML در اندروید می پردازد.

این آموزش تمرکز خود را بر شرح نحوه ی ذخیره سازی جفت های کلید-مقدار در فایل های اندروید (File based persistence) با فراخوانی preference API قرار می دهد. سپس چگونگی خواندن/نوشتن فایل در اندروید را تشریح می کند.

ین آموزش نحوه ی دسترسی به منابع و محتوا از طریق HTTP را برای شما شرح می دهد. پروژه ی آموزش حاضر در محیط برنامه نویسی Eclipse نوشته شده، مبتنی بر ویرایش 1.6 زبان Java و ورژن 5.0 سیستم عامل اندروید می باشد.

Retrofit عبارت است از یک REST Client برای Java و Android که توسط Square ارائه می شود. این کتابخانه، بازیابی و بارگذاری JSON یا هر داده ی ساخت یافته ی دیگری را از طریق یک وب سرویس مبتنی بر REST انجام می دهد. Retrofit را می توان با یک converter تنیظم نموده و برای serialize داده ها مورد استفاده قرار داد.

هر برنامه ای که دارای چهار ویژگی یا پارامتر (قابلیت مدیریت خطاها و ارائه ی بهترین سرویس) resilience، (انعطاف و مقایس پذیری) scalability، (واکنش گرا و تعاملی) responsive و (رویداد محور) Event-driven باشد را در اصطلاح reactive می نامند. در مدل برنامه نویسی reactive، سرویس گیرنده یا کاربر به محض ورود داده به آن واکنش نشان می دهند.

این آموزش به شرح مفاهیم Thread ها، Handler ها و استفاده از کلاس AsyncTask می پردازد. همچنین مفهوم پردازش ناهمگام در اپلیکیشن های اندرویدی را تشریح می نماید. سپس نحوه ی مدیریت چرخه ی حیات/lifecycle با thread ها و پردازش پس زمینه ای را تحت پوشش قرار می دهد

محیط (platform) اندروید خود یک کتابخانه ی درون ساخته به نام json.org ویژه ی پردازش و ساخت فایل های JSON دارد. در صورت تمایل شما می توانید سایر کتابخانه های کد باز نظیر GSON یا Moshi را برای پردازش و ساخت JSON مورد استفاده قرار دهید.
طراحی پیشرفته رابط کاربری در اندروید

قابلیت drag & drop (کشیدن و جایگذاری) یک view بر روی view یا view group های دیگر از ویرایش 4.0 اندروید پشتیبانی می شود.

این آموزش به شرح مفهوم Drawable ها و نحوه ی استفاده از آن ها در اندروید می پردازد.

این آموزش اصول طراحی بهینه ی اپلیکیشن را برای شما تشریح می کند. سپس شرح می دهد چگونه می توانید در اپلیکیشن های خود style و theme ایجاد کرده و بکار ببرید.

آموزش حاضر به شرح نحوه ی ساخت تصاویر زنده برای سیستم عامل اندروید می پردازد. پروژه های این مبحث در محیط برنامه نویسی Eclipse 4.2، با ویرایش 1.6 زبان Java نوشته شده و مبتنی بر ورژن 4.1 سیستم عامل اندروید می باشد.

آموزش حاضر نحوه ی ایجادwidget ها در صفحه ی اصلی دستگاه اندروید را شرح می دهد.

این آموزش به شرح ساخت view های اختصاصی و ترکیبی در اندروید می پردازد.

مبحث حاضر به شرح resource selector و کاربرد آن در اندروید پرداخته و سپس توضیح می دهد چگونه برنامه را طراحی نمایید که بر روی انواع نمایشگر با عرض و تراکم پیکسلی متفاوت قابل اجرا بوده و از زبان های مختلف پشتیبانی کند.

مبحث حاضر به شرح نحوه ی پیاده سازی انیمیشن در اندروید (استفاده از property Animation API) می پردازد. پروژه های این بخش در محیط کاری Android Studio نوشته شده و مبتنی بر ویرایش 5.1 اندروید می باشد.
سرویس، BroadcastReceiver و NotificationManager در اندروید

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

فرض کنید عملیاتی در برنامه اندرویدی خود دارید که بایستی بارها اجرا شود. در چنین شرایطی لازم است این را هم در نظر داشته باشید که سیستم اندروید ممکن است با توجه به شرایط activity ها و service ها را برای آزاد سازی منابع از حافظه حذف نماید. از این جهت نمی توانید برای زمان بندی تسک ها از کلاس های ساده ی محیط (platform) جاوا همچون TimerTask استفاده نمایید.

Broadcast receiverیک کامپوننت نرم افزاری در اندروید است که به شما این امکان را می دهد تا به event های مختلف گوش فرا دهید. به عبارت دیگر broadcast receiver یک نوع گوش فراخوان به رخدادها است. زمانی که رخداد یا event مورد نظر رخ می دهد، runtime سیستم اندروید تمامی receiver هایی که برای آن رخداد ثبت شده و به آن گوش می دهند را با خبر می کند.

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

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

دستگاه های اندروید نسبت به کامپیوترهای رومیزی یا لپ تاپ قدرت و توانایی کمتری دارند. به همین دلیل بایستی در استفاده از حافظه دقت بیشتری داشته باشید. به ویژه از ویرایش 5.0 اندروید قبل تر، توسعه دهنده باید مراقب باشد تا حد امکان garbage collector دستگاه مجازی جاوا (JVM) را درگیر نکند چرا که این امر سبب freeze و هنگ کردن runtime اندروید به مدت 200 میلی ثانیه می شود.
Dependency Injection، آزمایش و ابزارهای کمکی

آموزش حاضر به شرح unit testing (اجرای تست نرم افزاری بر روی بخش های مختلف پروژه به صورت مجزا) با استفاده از ابزار JUnit 4.x می پردازد. این آموزش نحوه ی ایجاد تست های jUnit را شرح داده و سپس استفاده از محیط برنامه نویسی Eclipse را در راستای نوشتن تست های نرم افزاری لازم جهت کسب اطمینان از عملکرد صحیح بخش های مختلف اپلیکیشن را توضیح می دهد.

مبحث حاضر به شما آموزش می دهد چگونه می توانید برای اپلیکیشن های اندرویدی خود instrumentation & unit test طراحی نموده و از عملکرد صحیح بخش های مختلف پروژه خود اطمینان حاصل نمایید. سپس برای شما شرح می دهد چگونه این تست ها را در محیط کاری Android Studio و با استفاده از سیستم کامپایل Gradle اجرا نمایید.

آموزش حاضر نحوه ی تست نویسی برای نرم افزارهای اندرویدی را با استفاده از فریم ورک Mockito شرح می دهد.

این مبحث به اجرای تست نرم افزاری بر روی اپلیکیشن به وسیله ی فریم ورک Hamcrest می پردازد.

در مبحث حاضر نحوه ی نوشتن تست های نرم افزاری مختصر، خوانا و کارامد برای اپلیکیشن های اندرویدی خود با استفاده از فریم ورک AssertJ را خواهید آموخت.

آموزش حاضر به شرح نحوه ی توسعه ی تست های نرم افزاری برای لایه ی رابط کاربری اپلیکیشن های اندرویدی با استفاده از فریم ورک تست گیری Espresso می پردازد. جهت درک کامل مفاهیم این مبحث می بایست با اصول برنامه نویسی با زبان Java و چارچوب کاری Android آشنا باشید.

آموزش حاضر به شما می آموزد چگونه حتی برای اپلیکیشن هایی که source code آن ها را در دست ندارید، تست هایی به روش black-box طراحی کنید.

آموزش حاضر نحوه ی تست لایه ی UI اپلیکیشن/اجرای تست بر روی لایه ی UI اپلیکیشن اندرویدی را شرح می دهد.

مقاله ی حاضر به شرح نحوه ی استفاده از فریم ورک Dagger 2 جهت تزریق نیازمندی های پروژه به آن در اپلیکیشن های متعارف جاوا و اندروید می پردازد.

آموزش حاضر به شرح ابزار موجود اندروید برای بررسی و سنجش کارایی اپلیکیشن های اندرویدی می پردازد.
ایجاد اپلیکیشن اندروید

آموزش حاضر نحوه ی استفاده از سیستم Gradle برای کامپایل پروژه های اندرویدی را شرح می دهد. در این مبحث با نحوه ی تنظیم نسخه های مختلف (flavor) build آشنا خواهید شد.

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

آموزش حاضر شرح می دهد چگونه با استفاده از ابزار ADB به دستگاه واقعی یا شبیه ساز محیط اندروید (AVD) متصل شده و آن را مدیریت کنید.
مکان یابی اندروید و آشنایی با Google Map

آموزش حاضر نحوه ی استفاده از ابزار fused location provider را به شما آموزش می دهد.

آموزش حاضر به شرح توابع کتابخانه ای Google Maps و نحوه ی استفاده از آن ها در پروژه های اندرویدی می پردازد. پروژه این مبحث در ویرایش 4.4 محیط کاری Eclipse، بر پایه ی ورژن 1.7 زبان جاوا و 4.4 اندروید نوشته شده اند.
صفحه لمسی و سنسورهای اندروید

این مبحث به شرح نحوه ی استفاده از امکان سخت افزاری Camera از طریق آبجکت Intent و توابع کتابخانه ای اندروید API می پردازد. پروژه ی این آموزش در ویرایش 4.2 محیط کاری Eclipse نوشته شده و مبتنی بر ورژن 1.6 جاوا و نسخه ی 4.2 سیستم عامل اندروید می باشد.

آموزش حاضر به شرح نحوه ی استفاده از کلاس SensorManager می پردازد. پروژه ی این مبحث در ویرایش 3.6 محیط کاری Eclispe نوشته شده و بر پایه ی ورژن 1.6 زبان جاوا و نسخه ی 2.3.3 اندروید (Gingerbread) می باشد.

آموزش حاضر به شرح پیاده سازی و استفاده از توابع کتابخانه ای touch API و قابلیت لمس نمایشگر در اپلیکیشن های اندرویدی می پردازد.

مبحث حاضر نحوه ی استفاده از Gestures و GestureOverylayView در اندروید را به شما می آموزد. پروژه های این آموزش در نسخه ی 3.6 محیط کاری Eclipse و با استفاده از ویرایش 1.6 زبان جاوا نوشته شده و مبتنی بر ورژن 2.3 سیستم عامل اندروید (Gingerbread) می باشد.
آموزش FireBase Socket در Android

در این بخش میخواهیم در مورد FCM صحبت کنیم. قصد داریم برای اضافه کردن پیام دهی ابری (cloud messaging) به نرم افزارهای اندرویدی از Firebase استفاده کنیم. آموزش Firebase Cloud Messaging (FCM) برای Android

به نظر می آید که Push notification ها جزء مهمی از برنامه های اندرویدی باشند. این notification ها به ما کمک می کنند تا کاربران را حفظ کرده، کاربران فعال را افزایش دهیم و... . برای اینکه به تمامی کاربران برنامه ی خودمان Push notification ارسال کنیم، می توانیم از Firebase Cloud Messaging (FCM) استفاده کنیم. FCM (promotional information) ارسال کرد.Android

همانطور که می دانید، WebSocket یک پروتکل ارتباطی کامپیوتری است، که در یک تک اتصال TCP کانال های ارتباطی کاملا دو رشته ای را فراهم میکند. WebSocket در HTML 5 پشتیبانی می شود. با توجه به اینکه ورژن کتابخانه ی OkHttp 3.5 است، می توانید در برنامه های اندرویدی خود از اتصال WebSocket ها نیز استفاده کنید. در این آموزش شما چگونگی ایجاد یک نرم افزار چت ساده را با استفاده از Echo WebSocket Server

QR code افزارهای موبایل دارند. QR code اطلاعاتی مانند : متن، sms، ایمیل، لینک url ، عکس، صدا و فرمتهای دیگر را ذخیره کنید. اندروید با استفاده از کتابخانه Google Mobile Vision اطلاعات ذخیره شده در بارکدها را با وجود اینکه کتابخانههای زیاد دیگری برای انجام این کار وجود دارند، کتابخانه از جمله خواندن بارکدها پرداخت مانند شناسایی چهره بارکد و QR code scanner Google Mobile Vision در Android