সতর্কীকরণ: গুগল প্লে ইনস্ট্যান্ট আর উপলব্ধ থাকবে না। ডিসেম্বর ২০২৫ থেকে, গুগল প্লে-এর মাধ্যমে ইনস্ট্যান্ট অ্যাপ প্রকাশ করা যাবে না এবং গুগল প্লে পরিষেবার সমস্ত ইনস্ট্যান্ট এপিআই আর কাজ করবে না। প্লে আর কোনো পদ্ধতির মাধ্যমে ব্যবহারকারীদের ইনস্ট্যান্ট অ্যাপ সরবরাহ করবে না।
ডেভেলপারদের মতামত এবং গুগল প্লে ইনস্ট্যান্ট চালু হওয়ার পর থেকে ইকোসিস্টেম উন্নত করার জন্য আমাদের ধারাবাহিক বিনিয়োগের ভিত্তিতে আমরা এই পরিবর্তনটি আনছি।
ব্যবহারকারীর সংখ্যা বৃদ্ধির প্রক্রিয়াকে আরও উন্নত করতে, আমরা ডেভেলপারদের উৎসাহিত করি যেন তারা ব্যবহারকারীদের তাদের নিয়মিত অ্যাপ বা গেমে রেফার করেন এবং প্রাসঙ্গিক ক্ষেত্রে ডীপলিঙ্ক ব্যবহার করে তাদেরকে নির্দিষ্ট জার্নি বা ফিচারে পুনঃনির্দেশিত করেন।
গুগল প্লে ইনস্ট্যান্ট একটি ওয়েব লিঙ্কে ট্যাপ করার মাধ্যমেই সমৃদ্ধ ও নেটিভ অভিজ্ঞতা প্রদান করে। ব্যবহারকারীরা কোনো পূর্ব-ইনস্টলেশন ছাড়াই আপনার অ্যাপটি ব্যবহার করতে পারেন, যা উচ্চতর স্তরের এবং উন্নত মানের সম্পৃক্ততা নিশ্চিত করে। তবে, একটি ইনস্ট্যান্ট অ্যাপকে সাধারণ মোবাইল ওয়েবপেজের মতো দ্রুত লোড করতে হলে, আপনাকে একটি সুগঠিত ও কার্যকর ইনস্ট্যান্ট অ্যাপ তৈরি করতে হবে। আপনার ইনস্ট্যান্ট অ্যাপের বাইনারি যত ছোট হবে, এটি তত দ্রুত লোড হবে এবং ব্যবহারকারীর অভিজ্ঞতাও তত মসৃণ হবে।
এই ডকুমেন্টটি আপনার অ্যাপের কাঠামো এবং বাইনারি সাইজ ব্যবস্থাপনার সেরা পদ্ধতিগুলো তুলে ধরে, যা একটি মসৃণ ও তাৎক্ষণিক অ্যাপ অভিজ্ঞতা নিশ্চিত করে। আপনি এই একই পদ্ধতিগুলো আপনার ইনস্টলযোগ্য অ্যাপের জন্যও প্রয়োগ করতে পারেন।
একাধিক ফিচার মডিউলে রিফ্যাক্টর করুন
আপনার অ্যাপের বাইনারি সাইজের সবচেয়ে বড় উন্নতি ঘটে যখন আপনি অ্যাপটিকে একাধিক ফিচার মডিউলে রিফ্যাক্টর করেন। একটি বেস ফিচার মডিউল দিয়ে শুরু করুন, তারপর বিষয়ভিত্তিক ওয়ার্কফ্লোগুলোকে তাদের নিজস্ব ফিচার মডিউলে আলাদা করুন। প্রতিটি ফিচার মডিউলের জন্য একটি স্টার্টিং অ্যাক্টিভিটি এবং একটি অনন্য URL নির্ধারণ করুন, যাতে ব্যবহারকারীরা মডিউলের ওয়ার্কফ্লো সফলভাবে সম্পন্ন করতে পারে।
ফিচার মডিউল তৈরি করার সময়, মূল ফিচার মডিউলটিকে যথাসম্ভব ছোট রাখুন। বিশেষ করে, আপনার অ্যাপের যে অংশগুলোর নির্ভরশীল লাইব্রেরিগুলোতে অ্যাক্সেসের প্রয়োজন হয়, সেগুলোর প্রতি বিশেষভাবে মনোযোগ দিন। যদি কোনো একটি নির্দিষ্ট লাইব্রেরি কেবলমাত্র একটি ফিচার মডিউল ব্যবহার করে, তবে সেই লাইব্রেরিটি মূল ফিচার মডিউলে নয়, বরং সরাসরি সেই ফিচার মডিউলটিতেই ইম্পোর্ট করুন। মনে রাখবেন যে, কোনো একটি নির্দিষ্ট ফিচার মডিউলের জন্য ইনস্ট্যান্ট অ্যাপ রিলিজ করতে হলে, সেই ফিচার মডিউল এবং মূল ফিচার মডিউলের মোট সাইজ অবশ্যই ১৫ মেগাবাইটের কম হতে হবে।
সর্বোত্তম অনুশীলন
আপনার অ্যাপ রিফ্যাক্টরিং করার সময় নিম্নলিখিত সেরা অনুশীলনগুলি মনে রাখবেন:
- উভয় ধরণের অ্যাপের জন্য একই কোডবেস ব্যবহার করুন।
- আপনার ইনস্টলড অ্যাপ এবং ইনস্ট্যান্ট অ্যাপ উভয়ই তৈরি করতে একই মডিউলার কোডবেস ব্যবহার করে আপনি আপনার অ্যাপের প্রজেক্ট ম্যানেজমেন্ট প্রক্রিয়াকে সহজ করতে পারেন।
- একাধিক ফিচার মডিউলের জন্য ডিজাইন
- আপনার অ্যাপে যদি আপাতত একটিমাত্র ওয়ার্কফ্লো থাকে এবং একটিমাত্র ফিচার মডিউলের প্রয়োজন হয়, তবুও একাধিক ফিচার মডিউলের কথা মাথায় রেখে ডিজাইন করা একটি ভালো ধারণা। এর ফলে, আপনি মূল ফিচার মডিউলের আকারকে প্রভাবিত না করেই আপনার অ্যাপে বিদ্যমান মডিউলগুলো যুক্ত করতে পারবেন।
- শুরুতে ফিচার মডিউলের আকারের সীমাবদ্ধতার উপর মনোযোগ দেবেন না।
- স্থানীয়ভাবে বিল্ড করা বাইনারিগুলোর ক্ষেত্রে ফিচার মডিউলের আকারের সীমাবদ্ধতা প্রযোজ্য নয়। আপনি ইন্টারনাল টেস্ট ট্র্যাকের মাধ্যমেও একটি ইনস্ট্যান্ট অ্যাপ রিলিজ করতে পারেন, যেখানে ফিচার মডিউলের আকারের উপর ১৫ মেগাবাইটের একটি সীমাবদ্ধতা আরোপ করা হয়। শুধুমাত্র আলফা এবং প্রোডাকশন ট্র্যাকেই এই ১৫ মেগাবাইটের সীমাবদ্ধতাটি প্রয়োগ করা হয়।
অ্যাপের রিসোর্স আপডেট করুন
কিছু অ্যাপ, বিশেষ করে যেগুলোর কোডবেসের ইতিহাস দীর্ঘ, সেগুলোতে এমন রিসোর্স থাকে যা আপনার অ্যাপের বাইনারিগুলো আর ব্যবহার করে না। আপনার অ্যাপের মডিউলগুলোকে ছোট করার উপায় খোঁজার সময়, অপ্রয়োজনীয় কোডের নিম্নলিখিত সাধারণ উৎসগুলো বিবেচনা করুন।
ইমেজের ফাইলের আকার কমান
PNG-এর পরিবর্তে WebP ফাইল ফরম্যাট ব্যবহার করে আপনি আপনার অ্যাপের ড্রয়েবলগুলোর মোট আকার উল্লেখযোগ্যভাবে কমাতে পারেন। Google Play Instant, স্বচ্ছতা এবং লসলেস কম্প্রেশন সহ WebP-কে সম্পূর্ণ সমর্থন করে, ফলে ছবির গুণমান একই থাকে।
সম্ভব হলে, অন্যান্য PNG ছবি ব্যবহারের জন্য ব্যাকওয়ার্ড কম্প্যাটিবিলিটির সমস্ত আবশ্যকতা দূর করুন। যদি আপনাকে PNG ছবি ব্যবহার করতেই হয়, তবে সেগুলোকে আপনার অ্যাপ বিল্ড ও ইনস্টল করার জন্য ব্যবহৃত মডিউলে রাখুন।
অব্যবহৃত ভাষাগুলি সরান
আপনার অ্যাপ যদি একাধিক ভাষা সমর্থন করে, তাহলে যতটা সম্ভব স্থানীয় ভাষার রিসোর্স কমিয়ে দিন। আপনি যদি android.support.v7.appcompat এর মতো কোনো 'অ্যাপ কম্প্যাট' লাইব্রেরি ব্যবহার করেন, তাহলে এই ধাপটি সম্পন্ন করা বিশেষভাবে দরকারি। এই লাইব্রেরিতে অনেক ভাষার বার্তা অন্তর্ভুক্ত থাকে, যার মধ্যে কয়েকটি আপনার অ্যাপ সমর্থন নাও করতে পারে।
আরও জানতে, অব্যবহৃত বিকল্প রিসোর্স, বিশেষ করে অব্যবহৃত ভাষাগুলো কীভাবে অপসারণ করতে হয় তা দেখে নিন।
অতিরিক্ত ফাইলগুলি সরান
আপনার প্রজেক্টে ইম্পোর্ট করা কিছু রিসোর্স আপনার অ্যাপ এখন আর ব্যবহার নাও করতে পারে। এই রিসোর্সগুলো অপসারণে সাহায্য করার জন্য, অ্যান্ড্রয়েড স্টুডিওতে এই নির্দিষ্ট পরিস্থিতির জন্য একটি লিন্ট চেক (Lint check) রয়েছে। টুলটি ব্যবহার করতে, নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:
- Control+Alt+Shift+I চাপুন (Mac OS-এ Command+Alt+Shift+I )।
- প্রদর্শিত ডায়ালগ বক্সে
"unused resources"টাইপ করুন। - সম্পদ ব্যবহারের নিরীক্ষা প্রক্রিয়া শুরু করতে অব্যবহৃত সম্পদ বিকল্পটি নির্বাচন করুন।
আপনার অ্যাপে যদি কোনো বড় রিসোর্স থেকে যায়, তবে ভেবে দেখুন ব্যবহারকারী অ্যাপটি ব্যবহার শুরু করার পর সেগুলোকে অ্যাপ থেকে আনপ্যাকেজ করে স্বতন্ত্র ফাইল হিসেবে ডাউনলোড করা সম্ভব কি না। এই ধরনের ইমেজ-লোডিং স্থগিত করার জন্য সাধারণত কোডে পরিবর্তন আনতে হয়, কিন্তু এটি ব্যবহারকারীর সুস্পষ্টভাবে অনুরোধ করা রিসোর্সগুলোই শুধু ডাউনলোড করার মাধ্যমে আপনার ইনস্ট্যান্ট অ্যাপের ফাইলের আকার উল্লেখযোগ্যভাবে কমাতে পারে।
অব্যবহৃত লাইব্রেরিগুলি সরান
একটি অ্যাপের পরিধি বাড়ার সাথে সাথে, এটি আশ্চর্যজনক সংখ্যক নির্ভরতা গ্রহণ করতে পারে, বিশেষ করে নিম্নলিখিত ধরণের কোনো একটির ক্ষেত্রে:
- নেটিভ লাইব্রেরি: যে লাইব্রেরিগুলোতে নেটিভ কোড থাকে, যা আপনার ইনস্ট্যান্ট অ্যাপ কখনো রান করে না।
- ট্রানজিটিভ ডিপেন্ডেন্সি: যেসব লাইব্রেরির ওপর আপনার অ্যাপের ইম্পোর্ট করা লাইব্রেরিগুলো নির্ভর করে।
আপনার অ্যাপের প্রজেক্টে কোনো অপ্রয়োজনীয় ডিপেন্ডেন্সি আছে কিনা তা শনাক্ত করার জন্য অ্যান্ড্রয়েড স্টুডিওতে বেশ কিছু দরকারি টুল রয়েছে:
- বাহ্যিক গ্রন্থাগারগুলি
অ্যান্ড্রয়েড স্টুডিওর প্রজেক্ট ভিউতে একটি এক্সটার্নাল লাইব্রেরি সেকশন রয়েছে।
এই বিভাগে আপনার অ্যাপ দ্বারা ব্যবহৃত প্রতিটি লাইব্রেরি রয়েছে, যার মধ্যে নেটিভ কোড এবং সমস্ত ট্রানজিটিভ ডিপেন্ডেন্সি অন্তর্ভুক্ত। এই ভিউতে, অব্যবহৃত বা ডুপ্লিকেট লাইব্রেরিগুলি সন্ধান করুন যা আপনার অ্যাপের প্রয়োজন নেই।
- এপিকে অ্যানালাইজার
আপনি APK Analyzer টুলটি ব্যবহার করে ইনস্ট্যান্ট অ্যাপ বিল্ড সহ বিভিন্ন বিল্ডের তুলনা করতে পারেন।
আপনার অ্যাপের জন্য কোন লাইব্রেরিগুলোর প্রয়োজন নেই তা নির্ধারণ করার পর, আপনার Gradle বিল্ড ফাইলে নিম্নলিখিত লাইনগুলোর মতো লাইন যোগ করে সেগুলোকে বাদ দিন:
<feature_module>/build.gradle
গ্রুভি
dependencies { implementation('some-important-but-large-library') { exclude group: 'com.example.imgtools', module: 'native' } }
কোটলিন
dependencies { implementation('some-important-but-large-library') { exclude(group = "com.example.imgtools", module = "native") } }
আপনার অ্যাপের ডিপেন্ডেন্সিগুলোর মোট ইম্পোর্ট সাইজ কমানোর বিষয়ে আরও তথ্যের জন্য, গ্রেডলের ডিপেন্ডেন্সি ম্যানেজমেন্ট গাইডটি দেখুন।
অ্যাসেটের ক্লাউড ডেলিভারি বাস্তবায়ন করুন
যদি আপনাকে আকার আরও কমাতে হয়, তাহলে আপনাকে অ্যাসেটগুলোর ক্লাউড ডেলিভারির ওপর নির্ভর করতে হতে পারে।