چگونه اولین برنامه Full-Stack اندروید خود را بسازیم
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 8 دقیقه

چگونه اولین برنامه Full-Stack اندروید خود را بسازیم

در مدت زمان 4 ماه، من یک ایده برنامه تلفن همراه را برنامه ریزی کرده و خودم را ملزم به یادگیری فریمورک اندروید کردم. اولین REST API خود را نوشتم و برنامه اندروید تمام شده را در فروشگاه Google Play منتشر کردم. من در این راه چیزهای زیادی آموختم، بنابراین تصمیم دارم آنچه را که یاد گرفتم به اشتراک بگذارم.

برنامه‌ای که من ساختم یک اپلیکیشن یادداشت برداری بود. کاربران می‌توانند به دلخواه خود وظایفشان را فیلتر کرده و حتی آنها را به یادداشت تبدیل کنند و برعکس.

این پروژه 5 بخش اصلی داشت: آماده سازی، فرانت-اند، بک-اند، تست واحد و انتشار در مارکت‌های معتبر مثل گوگل پلی. در زیر لیست همه مواردی که به من کمک کرده تا برنامه خود را ایجاد کنم، آورده شده است.

آماده سازی

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

من از TutorialsPoint برای یادگیری XML و Java در فریمورک اندروید استفاده کردم. علاوه بر یادداشت برداری، همراه با آن برنامه نویسی کردم تا یک برنامه بزرگ بسازم که زیاد هم موفق نبود، اما چیزهایی زیادی در این زمینه یاد گرفتم.

در همین حال، به دنبال یک برنامه دسکتاپ wireframing خوب بودم. وایرفریم مجموعه‌ای از طرح‌های یک برنامه است که ساختار و الگوی اولیه آن را نشان می‌دهد. من در پروژه‌های خود بیشتر روی رابط کاربری تمرکز می‌کردم و مهارت‌های بیشتری در زمینه توسعه نرم‌افزار به کار برده بودم. همچنین در مورد چگونگی عملکرد یک برنامه تلفن همراه مطالعه کردم، و بعد از طراحی چند صفحه در دفتر کاغذی خود با Pencil آشنا شدم. رایگان بودن آن مرا جذب کرد و مزیتی که داشت خیلی سبک بود. برخی از توسعه دهندگان می‌گفتند که نرم‌افزار سبک را برای وایرفریم ترجیح می‌دهند، بنابراین من با آن پیش رفتم.

وایرفریم بی کیفیتی که روی کاغذ می‌نوشتم

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

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

سپس به سراغ mockup خود رفتم. می‌دانستم که این یک پروژه شخصی است و بسیاری از افراد به آن نگاه می‌کنند، بنابراین همان نرم‌افزاری را انتخاب کردم که برای نمونه اولیه آن در نظر داشتم، یعنی Adobe XD. Adobe XD یک برنامه قدرتمند رایگان ویندوزی برای ساخت ماکت و نمونه‌های اولیه است.

برای نمونه اولیه، آرت بوردها را با هم در Adobe XD طراحی کردم. مستطیل‌ها کاملا تراز شده و رنگ‌ها دقیقا همان شکلی بود که من برای طراحی آن برنامه ریزی کردم. نمونه اولیه تا حدی که یک نرم‌افزار غیرتعاملی می‌توانست کار کند، قابل قبول بود.

پس از دو ماه برنامه‌ریزی و یادگیری، آماده شروع پروژه خود بودم.

فرانت-اند

ابتدا با XML شروع کردم. فایلهای XML به صورت markup (نشانه گذاری) بودند، بدین معنی که از منطق برنامه نویسی استفاده نمی‌کردند، دقیقا مانند HTML. به مدت دو هفته روزانه روی آن کار می‌کردم و تقریبا از مدل ساختگی خود پیروی کرده بودم (به غیر از بعضی جزئیات، به عنوان مثالtask screen).

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

بک-اند

این اولین بار بود که بک-اند و فرانت-اند را به صورت جداگانه خودم طراحی می‌کردم. همیشه برایم سوال بود که توسعه دهندگان حرفه‌ای چه استفاده‌هایی از REST API و APIهای خارجی دیگر می‌کنند و من هم دوست داشتم یکی از آنها را یاد بگیرم.

REST API مجموعه‌ای از صفحات نوشته شده به زبان سمت سرور است که بهXML ، HTML یا JSON خروجی می‌دهد و کدهای استاندارد HTTP را برمی‌گرداند. اگر کسی نحوه استفاده از PHP برای جستجو در پایگاه داده را بلد باشد، می‌تواند REST API ایجاد کند.

قسمت کلیدی در اینجا REST است که دیگر به کلاس‌های اضافی نیاز نیست، مگر کلاس‌هایی که به توسعه دهنده کمک می‌کند تا خروجی بگیرد و هدرهای HTTP را تنظیم کند. من یک کلاس به نام RestService ایجاد کردم که یک متد ثابت برای تنظیم هدر با کد وضعیت و تنظیم Content-Type روی برنامه json داشت. همچنین با کلاس‌هایی که در پایگاه داده پرس و جو می‌کردند، کلاسهایی که به اعتبار سنجی و ارسال هدر کمک می‌کردند و صفحات PHP که همه متدهای خود را نمونه سازی و فراخوانی می‌کرد، به طور موثر یک REST API ایجاد کردم.

استقرار API

من از Vercel - یک بستر میزبانی رایگان - برای میزبانی API و GoDaddy خود برای دامنه استفاده کردم. Vercel از وب سرویس‌های آمازون برای استقرار سایت استفاده می‌کند و وب سرویس‌های آمازون هم از آدرس‌های IP پویا که به طور مداوم در حال تغییراند استفاده می‌کنند. برای واکشی اطلاعات از پایگاه داده‌ای که در حساب میزبانی GoDaddy خود ایجاد کردم، باید آدرس آی پی API را که درست کرده بودم را در لیست سفید قرار می‌دادم. این مسئله مشکلی را ایجاد کرد، چون هیچ آی پی مشخصی برای سرورهای Vercel وجود نداشت. پس از تماس با پشتیبانی و درخواست کمک، در نهایت در لیست سفید آدرس‌های ٪.٪.٪.٪ قرار گرفتم تا اینکه مشکل حل شد.

تست واحد

همانطور که قبلا اشاره شد، می‌خواستم از تکنیک‌های مورد استفاده توسعه دهندگان حرفه‌ای نرم‌افزار استفاده کنم. یکی از این موارد تست توسعه نرم‌افزار بود. من دوره‌ای را در مورد EdX گذرانده بودم که نحوه نوشتن تست‌های واحد را در بر می‌گرفت، بنابراین می‌خواستم این را برای پروژه‌های برنامه نویسی خود به کار بگیرم.

Android Studio، IDE بود که برای ساخت فرانت-اند پروژه استفاده کردم که در هر پروژه‌ی اندروید بخشی برای تست دارد. فریمورک اندروید با Mockito و JUnit برای تست واحد شروع می‌شود. چند تست واحد برای ماژول‌های ساده‌تر خود نوشتم و با آنهایی که مبتنی بر رابط کاربری و Context بودند مشکلی نداشتم. در اینجا مثالی آورده شده است که LoginValidation رشته صحیح را بر اساس مکانی که ایمیل و رمز عبور به درستی تطبیق داده شده‌اند، تست می‌کند.

class BorumJotHomeOptionsMenu {
      /**
     * Starts the corresponding activity based on which menu item was selected;
     * overrides pending transition
     * @param item The menu item object
     * @return true if a valid option was selected, false (the super method) otherwise
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.options_btn:
                startActivity(new Intent(this, OptionsActivity.class));
                break;
            case R.id.helpandfdbck_btn:
                startActivity(new Intent(this, HelpAndFeedbackActivity.class));
                break;
            case R.id.privacypolicy_btn:
                startActivity(new Intent(this, PrivacyPolicyActivity.class));
                break;
            default:
                return super.onOptionsItemSelected(item);
        }

        // Animate the activity switch so that it slides the home activity out to the left and slides in the new OptionsItemActivity
        overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
        return true;
    }

اگرچه من همه چیز را تست نکردم و این مطمئنا با اصول کار همخوانی ندارد، اما به خوبی مهارت‌های خود را به چالش کشیدم. به همین دلیل اگر در فرایند تست واحد تازه‌کار هستید، پیشنهاد می‌کنم تست نوشتن را به تاخیر بیاندازید و اول زبان و فریمورک را به خوبی یاد بگیرید. به این دلیل که فرایند تست برای یک فریمورک جدید (Android) و یک هدف جدید (تست نرم‌افزار) بسیار طاقت فرسا است.

انتشار در Google Play

داشتن یک حساب توسعه دهنده در گوگل پلی (25 دلار هزینه دارد) به من امکان دسترسی به کنسول گوگل پلی را داده و اجازه می‌دهد برنامه اندروید خود را در قالب فایل aab. بارگذاری کنم.

جمع‌بندی

امیدوارم این مقاله برای هر کسی که می‌خواهد برنامه تلفن همراه خود را بسازد مفید واقع شود. حتی اگر به جای جاوا از کاتلین یا به جای XML از JSON استفاده کنید، بیشتر موارد ذکر شده ثابت می‌مانند. آیا قبلا برنامه موبایل ساخته‌اید؟ تجربیات خود را با ما در میان بگذارید.

منبع

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
در انتظار ثبت رای

/@erfanheshmati
عرفان حشمتی
Full-Stack Web Developer

کارشناس معماری سیستم های کامپیوتری، طراح و توسعه دهنده وب سایت، تولیدکننده محتوا

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید