Kriptofolio অ্যাপ সিরিজ — ভূমিকা
এই ব্লগ পোস্ট সিরিজে স্বাগতম যেখানে আমি একটি আধুনিক অ্যান্ড্রয়েড অ্যাপ তৈরি করব। আমি ২০১৮-২০১৯ সালে উপলব্ধ সেরা টুলস এবং প্র্যাকটিস ব্যবহার করব। আমি এটি করছি কারণ আমি অ্যান্ড্রয়েড জগতের সব হট টপিক কভার করতে চাই এবং আপনাদের শিখাতে শিখতে চাই।
আপনি এই সিরিজ ফলো করলে, আপনি শিখবেন কিভাবে স্ক্র্যাচ থেকে অ্যাপটি ডেভেলপ করতে হয়। এই সিরিজের প্রতিটি ব্লগ পোস্ট কিছু নির্দিষ্ট ডেভেলপমেন্ট টপিক কভার করবে যা আমি আলোচনা করতে চাই। আমি একটি ভালো কোয়ালিটির অ্যাপ তৈরি করতে এবং ডেভেলপমেন্ট প্রক্রিয়াটি ব্যাখ্যা করতে আমার সেরা দেব। এই সিরিজের প্রথম ব্লগ পোস্ট হল প্রজেক্টের রোডম্যাপ যে আমরা কী করব।
সিরিজ কন্টেন্ট
- ভূমিকা: ২০১৮-২০১৯ সালে একটি আধুনিক অ্যান্ড্রয়েড অ্যাপ বানানোর রোডম্যাপ (আপনি এখানে আছেন)
- পর্ব ১: SOLID প্রিন্সিপলসমূহের পরিচয়
- পর্ব ২: আপনার অ্যান্ড্রয়েড অ্যাপ বানানো শুরু কিভাবে: মকআপ, UI, এবং XML লেআউট তৈরি
- পর্ব ৩: আর্কিটেকচারের সارا কথা: বিভিন্ন আর্কিটেকচার প্যাটার্ন eksplore করা এবং অ্যাপে কীভাবে ব্যবহার করবেন
- পর্ব ৪: Dagger 2 ব্যবহার করে আপনার অ্যাপে ডিপেন্ডেন্সি ইনজেকশন ইমপ্লিমেন্ট করা
- পর্ব ৫: Retrofit, OkHttp, Gson, Glide এবং Coroutines ব্যবহার করে RESTful ওয়েব সার্ভিস হ্যান্ডেল করা
অ্যাপটি: "Kriptofolio" (পূর্বে "My Crypto Coins") আইডিয়া
শুরুতে অ্যান্ড্রয়েড ডেভেলপমেন্টের সব ট্রেন্ড শো করার একটি প্ল্যান চিন্তা করা কঠিন ছিল, কিন্তু অবশেষে আমি একটি পেলাম যা আমার ভালো লাগল। এটি আমার বিশাল আগ্রহের এলাকা — ব্লকচেইন এবং ক্রিপ্টোকারেন্সি — এর সাথে সম্পর্কিত। আমি একটি অ্যাপ তৈরি করতে সিদ্ধান্ত নিলাম যেটি আপনার ক্রিপ্টোকারেন্সি পোর্টফোলিও ধারণ করবে এবং আপনাকে জানাবে সেগুলো ফিয়্যাট মুদ্রায় কতটুকু মূল্যের।
ব্যবহারকারীর জন্য গুরুত্বপূর্ণ হল এই অ্যাপটি ১০০% Траст নিশ্চিত করবে। এটি কোনো লগইন/রেজিস্ট্রেশন প্রক্রিয়া চাইবে না। এটি ব্যবহারকারীদের ডেটা সার্ভারে পাঠিয়ে কালেক্ট করবে না। আমি মনে করি কেউ আপনার~Owned~ মালিকানাধীন টাকার তথ্য অনলাইনে শেয়ার করতে কমফর্টেবল হবে।
ব্যবহারকারীর প্রদত্ত ক্রিপ্টোকারেন্সি ইনভেস্টমেন্টের ডেটা শুধু একটি লোকাল ডাটাবেসে সংরক্ষিত থাকবে যা একটি অ্যান্ড্রয়েড ডিভাইসের ভিতরে রাখা হবে। যাহোক, পোর্টফোলিওর ভ্যালু ফিয়্যাট মুদ্রায় জানার জন্য, অ্যাপটি ইন্টারনেট ব্যবহার করে সর্বশেষ কনভার্সন রেট পাবে।
তাহলে আপনি দেখছেন ট্রেনিং উদ্দেশ্যে, এই অ্যাপ আইডিয়া চমৎকার। এটি আপনাকে ডেটার সাথে কাজ করার বিভিন্ন পদ্ধতি ট্রাই করার চ্যালেঞ্জ দেয়। এটি আধুনিক অ্যাপ বানাতে জানার সবচেয়ে গুরুত্বপূর্ণ স্কিলগুলির একটি। মানুষের জন্য টাকার বিষয়টি খুব সংবেদনশীল। আরও বেশি ট্রাস্ট নিশ্চিত করতে, আমি এই অ্যাপটি খোলামেলা ডেভেলপ করব এই ব্লগ পোস্ট সিরিজ তৈরি করে এবং প্রজেক্ট কোড উপলব্ধ করিয়ে যাতে সবাই দেখতে পারে কিছু লুকানো নেই।
আমরা কী ব্যবহার করব?
প্রথমে, এই অ্যাপ বানাতে, আমাদের বর্তমান মুহূর্তে বিভিন্ন ক্রিপ্টোকারেন্সির দাম জানতে হবে। এই ডেটা ইন্টারনেট থেকে প্রদান করা হবে কারণ এটি liên tục পরিবর্তিত হচ্ছে।
ডেটা API:
CoinMarketCap — ক্রিপ্টোকারেন্সি মার্কেটের ওভারভিউ পাওয়ার সবচেয়ে জনপ্রিয় ওয়েবসাইটগুলির একটি। এই ওয়েবসাইট একটি ফ্রি API অফার করে যা কেউ ব্যবহার করতে পারে এবং এটি আমাদের জন্য একটি ডেটা সার্ভিস প্রোভাইডার হিসেবে পায়েরফেক্ট ফিট করে।
এরপর, আমি অ্যান্ড্রয়েড জগতের আমার সবচেয়ে গুরুত্বপূর্ণ ট্রেন্ডিং জিনিসগুলোর একটি তালিকা বানালাম যা এই প্রজেক্টে ফিট করে এবং যা ব্যবহার করা উচিত।
প্রোগ্রামিং ল্যাঙ্গুয়েজ:
Kotlin — অ্যান্ড্রয়েডের অফিশিয়াল ল্যাঙ্গুয়েজ। এটি এক্সপ্রেসিভ, সংক্ষিপ্ত, এবং শক্তিশালী। 무엇보다 ভালো, এটি এক্সিস্টিং অ্যান্ড্রয়েড ল্যাঙ্গুয়েজ এবং রানটাইমের সাথে ইন্টারঅপারেবল।
এই নতুন ল্যাঙ্গুয়েজের পরিচয় ২০১৭ সালে অ্যান্ড্রয়েডের জন্য সবচেয়ে হট টপিকগুলির একটি ছিল। আমাদের অ্যাপটি এতে লেখা থাকবে। আমি Kotlin এবং এর ফিচারসমূহ আমার অতীতে একটি ব্লগ পোস্টে "Let's learn Kotlin by building Android calculator app"-এ আলোচনা করেছিলাম।
ইন্টিগ্রেটেড ডেভেলপমেন্ট এনভায়রনমেন্ট (IDE):
Android Studio — অ্যান্ড্রয়েডের অফিশিয়াল IDE। এটি প্রতিটি ধরণের অ্যান্ড্রয়েড ডিভাইসে অ্যাপ বানাতে সবচেয়ে দ্রুত টুলস প্রদান করে। নেটিভ অ্যাপ ডেভেলপমেন্টের জন্য এর কোনো বিকল্প নেই। এটি আমাদের প্রধান IDE চয়েস কোনো প্রশ্ন ছাড়াই।
প্রজেক্ট বিল্ড ম্যানেজমেন্ট সিস্টেম:
Gradle — Groovy এবং Kotlin-ভিত্তিক একটি উন্নত জেনারেল পারপাস বিল্ড ম্যানেজমেন্ট সিস্টেম। এটি ডিপেন্ডেন্সি বা অন্যান্য লাইব্রেরির অটোমেটিক ডাউনলোড এবং কনফিগারেশন সাপোর্ট করে। এটি গুগল দ্বারা সুপারিশ করা বিল্ড সিস্টেম। এটি Android Studio-এ ভালোভাবে ইন্টিগ্রেটেড তাই আমরা এটি ব্যবহার করব।
আর্কিটেকচার:
Android Architecture Components — লাইব্রেরির একটি সংকলন যা আপনাকে রবাস্ট, টেস্টেবল, এবং মেইনটেইনেবল অ্যাপ ডিজাইন করতে সাহায্য করে।
Model–View–ViewModel (MVVM) — একটি আর্কিটেকচারাল প্যাটার্ন। কনসেপ্ট হল ডেটা প্রেজেন্টেশন লজিককে বিজনেস লজিক থেকে পৃথক করে একটি নির্দিষ্ট ক্লাসে সরিয়ে আনুন স্পষ্ট পার্থক্যের জন্য। অ্যান্ড্রয়েড টিম এই প্যাটার্নটিকে ডিফল্ট চয়েস হিসেবে পুশ করছে। এছাড়াও, এটি MVC এবং জনপ্রিয় MVP প্যাটার্নের একটি বিকল্প।
আমি এই সিরিজে আলাদাভাবে এই প্যাটার্ন চয়েস, অন্যান্য আর্কিটেকচার অপশন এবং কীভাবে আমাদের কোড ভালোভাবে সংগঠিত করবেন সেটি আলোচনা করব। এটি অত্যন্ত গুরুত্বপূর্ণ যদি আমরা একটি সহজে মেইনটেইনযোগ্য স olid প্রজেক্ট বানাতে চাই।
Coroutines — একটি কনকারেন্সি ডিজাইন প্যাটার্ন যা আপনি অ্যাসিনক্রোনাসলি এক্সিকিউট হওয়া কোড সিম্পলিফাই করার জন্য অ্যান্ড্রয়েডে ব্যবহার করতে পারেন।
ডেটা পারসিস্টেন্স:
SQLite Database — এটি একটি ওপেন সোর্স SQL ডাটাবেস যা ডেটা একটি ডিভাইসে টেক্সট ফাইলে পারসিস্টেন্টলি সংরক্ষণ করে। অ্যান্ড্রয়েড বিল্ট-ইন SQLite ডাটাবেস ইমপ্লিমেন্টেশন নিয়ে আসে। SQLite সকল রিলেশনাল ডাটাবেস ফিচার সাপোর্ট করে।
Shared Preferences — অ্যান্ড্রয়েড SDK থেকে একটি API অ্যাপ্লিকেশন প্রিফারেন্স সংরক্ষণ এবং রিট্রিভ করার জন্য। SharedPreferences মাত্র ডেটা ভ্যালু সেট যা পারসিস্টেন্টলি সংরক্ষিত থাকে। এটি আপনাকে কি-ভ্যালু পেয়ারের রূপে ডেটা সংরক্ষণ এবং রিট্রিভ করতে দেয়।
লাইব্রেরিগুলো:
Android Jetpack কম্পোনেন্টস:
AppCompat — এটি সাপোর্ট লাইব্রেরির একটি সেট যা nieu ভার্সনে ডেভেলপ করা অ্যাপগুলো পুরনো ভার্সনেও কাজ করার জন্য ব্যবহার করা যেতে পারে।
Android KTX — অ্যান্ড্রয়েড অ্যাপ ডেভেলপমেন্টের জন্য Kotlin এক্সটেনশনের একটি সেট। Android KTX-এর লক্ষ্য হল Kotlin-এ অ্যান্ড্রয়েড ডেভেলপমেন্টকে আরও সংক্ষিপ্ত, সुखদ, এবং ইডিওম্যাটিক করা ভাষার ফিচারগুলো যেমন এক্সটেনশন ফাংশন/প্রোপার্টি, ল্যাম্বডা, নেমড প্যারামিটার, এবং প্যারামিটার ডিফল্টস ব্যবহার করে।
Data Binding — একটি সাপোর্ট লাইব্রেরি যা আপনাকে আপনার লেআউটের UI কম্পোনেন্টগুলিকে আপনার অ্যাপের ডেটা সোর্সের সাথে বাঁধতে দেয় একটি ডিক্লেরেটিভ ফরম্যাটে প্রোগ্রাম্যাটিক্যালি না করে।
Lifecycles — আপনার অ্যাক্টিভিটি এবং ফ্র্যাগমেন্ট লাইফসাইকেল ম্যানেজ করার জন্য।
LiveData — একটি অবজার্বেবল ডেটা হোল্ডার ক্লাস যা সাধারণ অ্যান্ড্রয়েড লাইফসাইকেল চ্যালেঞ্জ সমাধান করতে এবং অ্যাপগুলিকে আরও মেইনটেইনেবল এবং টেস্টেবল बनाने জন্য ডিজাইন করা হয়েছে।
Room — এটি SQLite-এর ওপর একটি অ্যাবস্ট্রাকশন লেয়ার প্রদান করে সহজ ডাটাবেস অ্যাক্সেসের জন্য SQLite-এর সম্পূর্ণ শক্তি ব্যবহার করে।
ViewModel — লাইফসাইকেল-কনসcious উপায়ে UI-সম্পর্কিত ডেটা সংরক্ষণ এবং ম্যানেজ করার জন্য ডিজাইন করা হয়েছে। ViewModel ক্লাস ডেটাকে কনফিগারেশন পরিবর্তন যেমন স্ক্রিন রোটেশনoweit বিষয় হয়ে থাকতে দেয়।
অন্যান্য:
ConstraintLayout — লচীলা এবং দক্ষ লেআউট বানাতে। Layout Editor কনস্ট্রেইন্টস ব্যবহার করে একটি UI এলিমেন্টের পজিশন লেআউটে নির্ধারণ করে। একটি কনস্ট্রেইন্ট অন্য একটি ভিউ, পেরেন্ট লেআউট, বা একটি অনদৃশ্য গাইডলাইনের সাথে একটি সংযোগ বা অ্যালাইনমেন্ট উপস্থাপন করে।
CardView — এলিমেন্ট যা ইনফরমেশনকে কার্ড маннারে উপস্থাপন করে ড্রপ শ্যাডো (elevation) এবং কর্ণার রেডিয়াস সহ যা প্ল্যাটফর্ম জুড়ে কনসিস্টেন্ট লুক দেয়।
RecyclerView — ListView-এর একটি লচীলা এবং দক্ষ সংস্করণ। এটি একটি কন্টেইনার যা বড় ডেটা সেটের ভিউ রেন্ডার করতে পারে যেগুলো রিসাইকেল এবং খুব দক্ষতার সাথে স্ক্রোল করা যায়।
থার্ড-পার্টি:
Dagger 2 — এটি একটি সম্পূর্ণরূপে স্ট্যাটিক, কম্পাইল-টাইম ডিপেন্ডেন্সি ইনজেকশন ফ্রেমওয়ার্ক জাভা এবং অ্যান্ড্রয়েড দুটির জন্য।
Retrofit 2 — অ্যান্ড্রয়েড এবং জাভার জন্য একটি ওপেন সোর্স টাইপ-সেফ HTTP ক্লায়েন্ট। Retrofit-এর সাথে, আমরা একটি সিম্পল, এক্সপ্রেসিভ ইন্টারফেসের মাধ্যমে HTTP কানেকশন সহজে কম্পোজ করতে পারি ঠিক একটি API ডকুমেন্টের মতো।
OkHttp — একটি ওপেন সোর্স মডার্ন, ফাস্ট এবং দক্ষ HTTP ক্লায়েন্ট যা HTTP/2 এবং SPDY সাপোর্ট করে।
Gson — জাভা অবজেক্টকে JSON-এ এবং JSON থেকে সিরিয়ালাইজ ও ডিসিরিয়ালাইজ করার জন্য একটি ওপেন সোর্স জাভা লাইব্রেরি।
Glide — অ্যান্ড্রয়েডের জন্য একটি ফাস্ট এবং দক্ষ ইমেজ লোডিং লাইব্রেরি যা سمूद স্ক্রোলিং-এ ফোকাস করে। Glide একটি ইزی-টু-ইউজ API, একটি পারফরম্যান্ট এবং এক্সটেনসিবল রিসোর্স ডিকোডিং পাইপলাইন এবং অটোমেটিক রিসোর্স পুলিং অফার করে।
একটি নতুন প্রজেক্ট কনফিগার করা
আমরা এই প্রজেক্টটি স্ক্র্যাচ থেকে তৈরি করব। তাই আমি Android Studio লঞ্চ করব, একটি নতুন প্রজেক্ট তৈরি করব, নাম দেব "My Crypto Coins" এবং "Basic Activity" সিলেক্ট করব। এই পয়েন্টে, আলোচনা করার কিছু স্পেশাল নেই। আমাদের লক্ষ্য হল একটি ফ্রেশ, ক্লিন স্টার্ট করা এবং আমাদের মाइন্ডে অতিরিক্ত ফিচার যোগ করে (যেমন, ইনস্ট্যান্ট অ্যাপ সাপোর্ট) কোনো জটিলতা এড়ানো। আমরা ডেভেলপমেন্ট প্রক্রিয়ার সময় পরে যদি চাই তাহলে কিছু যোগ করতে পারি।
শুরুতে Kotlin ল্যাঙ্গুয়েজ সাপোর্ট যোগ করব এবং টার্গেট API 23: Android 6.0 (Marshmallow)।
আমি কেন নিম্ন বা উচ্চ API টার্গেট করছি না? আসুন মুখোমুখি হই। কিছু পুরনো ডিভাইসের সাপোর্ট কাটে দেয়া ভালো এবং ডেভেলপমেন্টের সময় যেকোনো কম্প্যাটিবিলিটি ইস্যু নিয়ে চিন্তা না করা। এছাড়া, আমি একটি পুরনো Nexus 7 (2013) ট্যাবলেটের গর্বিত মালিক, যা Android 6.0.1 চলে। আমি আশা করি সেটিতে লাইভে আমার অ্যাপ টেস্ট করতে পারব। ? তাই এই אינডিভিজুয়াল প্রজেক্টের জন্য এটি আমার মিনিমাম SDK চয়েসকে প্রভাবিত করল।
এছাড়া আপনি লক্ষ্য করেছেন, আমি IDE-কে অটোমেটিক্যালি জেনারেটেড বেসিক অ্যাক্টিভিটি ফ্র্যাগমেন্ট সাপোর্ট এবং ফ্লোটিং অ্যাকশন বাটন সহ যোগ করতে বললাম। আমি মনে করি এগুলো আমাদের প্রজেক্টের জন্য উপকারী হতে পারে।
GitHub — ভার্সন কন্ট্রোলের জন্য সবচেয়ে জনপ্রিয় ওয়েব-ভিত্তিক হোস্টিং সার্ভিস। এটি একটি ওপেন সোর্স প্রজেক্ট, এবং অবশ্যই আমি এটি ব্যবহার করব।
এই সিরিজের সব ব্লগ পোস্টের কমিটগুলো আলাদা ব্রাঞ্চ হিসেবে এবং লেটেস্ট সোর্স কোড ভার্সন মাস্টার ব্রাঞ্চে থাকবে। এখানে আপনার জন্য রিপোজিটরির লিংক।
GitHub-এ সোর্স কোড দেখুন
শুরুর জন্য এতটুকুই। আপনার কোনো প্রশ্ন, সাজেশন, রিমার্কস থাকলে কমেন্টে জানাতে পারেন। এবং এখন আমরা একসাথে শিখি! পর্ব ২ আসছে… ?
Ačiū! পড়ার জন্য ধন্যবাদ! আমি মূলত এই পোস্টটি আমার ব্লগ www.baruckis.com-এ ফেব্রুয়ারি ১২, ২০১৮-এ প্রকাশ করেছিলাম।