বিভিন্ন API স্তরের জন্য একাধিক APK তৈরি করুন

আপনি যদি আপনার অ্যাপটি Google Play-তে প্রকাশ করেন, তাহলে আপনার উচিত একটি Android অ্যাপ বান্ডেল তৈরি এবং আপলোড করা। আপনি যখন তা করেন, তখন Google Play স্বয়ংক্রিয়ভাবে প্রতিটি ব্যবহারকারীর ডিভাইস কনফিগারেশনের জন্য অপ্টিমাইজ করা APK তৈরি করে এবং পরিবেশন করে, তাই তারা আপনার অ্যাপ চালানোর জন্য প্রয়োজনীয় কোড এবং সংস্থানগুলি ডাউনলোড করে। আপনি যদি Google Play-এ প্রকাশ না করেন তবে একাধিক APK প্রকাশ করা কার্যকর, তবে আপনাকে অবশ্যই প্রতিটি APK নিজেই তৈরি, স্বাক্ষর এবং পরিচালনা করতে হবে।

Google Play-তে একাধিক APK-এর সুবিধা নেওয়ার জন্য আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশান ডেভেলপ করার সময়, শুরু থেকে কিছু ভাল অভ্যাস গ্রহণ করা এবং উন্নয়ন প্রক্রিয়ায় আরও অপ্রয়োজনীয় মাথাব্যথা প্রতিরোধ করা গুরুত্বপূর্ণ। এই পাঠটি আপনাকে দেখায় কিভাবে আপনার অ্যাপের একাধিক APK তৈরি করবেন, প্রতিটি API লেভেলের কিছুটা ভিন্ন পরিসর কভার করে। আপনি একটি একাধিক APK কোডবেসকে যতটা সম্ভব ব্যথাহীন করার জন্য প্রয়োজনীয় কিছু সরঞ্জামও পাবেন।

আপনার একাধিক APK প্রয়োজন তা নিশ্চিত করুন

অ্যান্ড্রয়েড প্ল্যাটফর্মের একাধিক প্রজন্ম জুড়ে কাজ করে এমন একটি অ্যাপ্লিকেশন তৈরি করার চেষ্টা করার সময়, স্বাভাবিকভাবেই আপনি চান যে আপনার অ্যাপ্লিকেশনটি পিছনের সামঞ্জস্যের ত্যাগ না করেই নতুন ডিভাইসে নতুন বৈশিষ্ট্যগুলির সুবিধা গ্রহণ করুক। এটি শুরুতে মনে হতে পারে যে একাধিক APK সমর্থন সর্বোত্তম সমাধান, তবে এটি প্রায়শই হয় না। একাধিক APK বিকাশকারী গাইডের পরিবর্তে একক APK ব্যবহার করা বিভাগে আমাদের সমর্থন লাইব্রেরির ব্যবহার সহ একটি একক APK দিয়ে কীভাবে এটি সম্পাদন করা যায় সে সম্পর্কে কিছু দরকারী তথ্য অন্তর্ভুক্ত রয়েছে। আপনি এই নিবন্ধটি থেকে প্রতিফলনের মতো গণনামূলকভাবে ব্যয়বহুল কৌশল অবলম্বন না করে কীভাবে কোড লিখতে হয় তা শিখতে পারেন যেটি শুধুমাত্র একটি একক APK-এ নির্দিষ্ট API স্তরে চলে।

আপনি যদি এটি পরিচালনা করতে পারেন তবে আপনার অ্যাপ্লিকেশনটিকে একটি একক APK-এ সীমাবদ্ধ করার অনেক সুবিধা রয়েছে, যার মধ্যে রয়েছে:

  • প্রকাশনা এবং পরীক্ষা করা সহজ
  • বজায় রাখার জন্য শুধুমাত্র একটি কোডবেস আছে
  • আপনার অ্যাপ্লিকেশন ডিভাইস কনফিগারেশন পরিবর্তনের সাথে মানিয়ে নিতে পারে
  • সমস্ত ডিভাইস জুড়ে অ্যাপ পুনরুদ্ধার কাজ করে
  • আপনাকে বাজারের পছন্দ, এক APK থেকে পরবর্তীতে "আপগ্রেড" থেকে আচরণ, বা কোন APK কোন শ্রেণীর ডিভাইসের সাথে যায় সে সম্পর্কে চিন্তা করতে হবে না

এই পাঠের বাকি অংশটি অনুমান করে যে আপনি বিষয়টি নিয়ে গবেষণা করেছেন, অধ্যয়নের সাথে লিঙ্কযুক্ত সংস্থানগুলির উপাদানগুলিকে শোষণ করেছেন এবং নির্ধারণ করেছেন যে একাধিক APK আপনার অ্যাপ্লিকেশনের জন্য সঠিক পথ।

আপনার প্রয়োজনীয়তা চার্ট করুন

আপনার কতগুলি APK প্রয়োজন এবং প্রতিটি APK কভার করে এমন API পরিসর দ্রুত নির্ধারণ করতে একটি সাধারণ চার্ট তৈরি করে শুরু করুন৷ সহজ রেফারেন্সের জন্য, Android বিকাশকারী ওয়েবসাইটের প্ল্যাটফর্ম সংস্করণ পৃষ্ঠাটি Android প্ল্যাটফর্মের প্রদত্ত সংস্করণে চলমান সক্রিয় ডিভাইসগুলির আপেক্ষিক সংখ্যা সম্পর্কে ডেটা সরবরাহ করে। এছাড়াও, যদিও এটি প্রথমে সহজ শোনায়, প্রতিটি APK লক্ষ্য করা যাচ্ছে এমন API স্তরের কোন সেটের ট্র্যাক রাখা বরং দ্রুত কঠিন হয়ে যায়, বিশেষ করে যদি কিছু ওভারল্যাপ হতে চলেছে (প্রায়শই থাকে)। সৌভাগ্যবশত, আপনার প্রয়োজনীয়তাগুলি দ্রুত, সহজে, এবং পরবর্তীতে একটি সহজ রেফারেন্স পাওয়া সহজ।

আপনার একাধিক APK চার্ট তৈরি করতে, Android প্ল্যাটফর্মের বিভিন্ন API স্তরের প্রতিনিধিত্বকারী কক্ষগুলির সারি দিয়ে শুরু করুন৷ Android এর ভবিষ্যত সংস্করণগুলি উপস্থাপন করতে শেষে একটি অতিরিক্ত সেল ছুঁড়ুন৷

3 4 5 6 7 8 9 10 11 12 13 +

এখন শুধু চার্টে এমন রঙ করুন যাতে প্রতিটি রঙ একটি APK প্রতিনিধিত্ব করে। আপনি কীভাবে প্রতিটি APKকে API স্তরের একটি নির্দিষ্ট পরিসরে প্রয়োগ করতে পারেন তার একটি উদাহরণ এখানে।

3 4 5 6 7 8 9 10 11 12 13 +

একবার আপনি এই চার্টটি তৈরি করলে, এটি আপনার দলে বিতরণ করুন। আপনার প্রোজেক্টে টিম কমিউনিকেশন অবিলম্বে সহজ হয়ে গেছে, যেহেতু জিজ্ঞাসা করার পরিবর্তে "এপিআই লেভেল 3 থেকে 6 এর জন্য APK কেমন আছে, আপনি জানেন, অ্যান্ড্রয়েড 1.x এক। এটি কীভাবে আসছে?" আপনি কেবল বলতে পারেন "কেমন হচ্ছে নীল APK আসছে?"

একটি লাইব্রেরি প্রকল্পে সমস্ত সাধারণ কোড এবং সংস্থান রাখুন

আপনি একটি বিদ্যমান অ্যান্ড্রয়েড অ্যাপ্লিকেশান সংশোধন করছেন বা স্ক্র্যাচ থেকে শুরু করছেন না কেন, কোডবেসে আপনার এটিই প্রথম কাজ এবং সবচেয়ে গুরুত্বপূর্ণ। লাইব্রেরি প্রজেক্টের মধ্যে যা কিছু যায় তা শুধুমাত্র একবার আপডেট করা দরকার (ভাবুন ভাষা-স্থানীয় স্ট্রিং, রঙের থিম, ভাগ করা কোডে বাগ সংশোধন করা হয়েছে), যা আপনার বিকাশের সময়কে উন্নত করে এবং ভুল হওয়ার সম্ভাবনা কমিয়ে দেয় যা সহজেই এড়ানো যেত।

দ্রষ্টব্য: লাইব্রেরি প্রকল্পগুলি কীভাবে তৈরি এবং অন্তর্ভুক্ত করতে হবে তার বাস্তবায়নের বিশদগুলি এই পাঠের সুযোগের বাইরে হলেও, আপনি একটি Android লাইব্রেরি তৈরি করুন পড়ার মাধ্যমে গতি পেতে পারেন৷

আপনি যদি একাধিক APK সমর্থন ব্যবহার করার জন্য একটি বিদ্যমান অ্যাপ্লিকেশন রূপান্তর করে থাকেন, তাহলে প্রতিটি স্থানীয় স্ট্রিং ফাইল, মানগুলির তালিকা, থিমের রঙ, মেনু আইকন এবং লেআউটের জন্য আপনার কোডবেসটি ঘষে নিন যা APK গুলি জুড়ে পরিবর্তিত হতে যাচ্ছে না এবং এটি সবই রাখুন লাইব্রেরি প্রকল্প। যে কোডটি খুব বেশি পরিবর্তন করতে যাচ্ছে না তাও লাইব্রেরি প্রকল্পে যেতে হবে। আপনি সম্ভবত APK থেকে APK-তে একটি বা দুটি পদ্ধতি যোগ করতে এই ক্লাসগুলিকে প্রসারিত করতে দেখতে পাবেন।

অন্যদিকে, আপনি যদি স্ক্র্যাচ থেকে অ্যাপ্লিকেশনটি তৈরি করেন, লাইব্রেরি প্রজেক্টে প্রথমে কোড লেখার জন্য যতটা সম্ভব চেষ্টা করুন, তারপর প্রয়োজন হলে শুধুমাত্র এটিকে একটি পৃথক APK-এ সরান৷ এটি একটি, তারপরে আরেকটি, তারপরে আরেকটিতে যোগ করার চেয়ে দীর্ঘমেয়াদে এটি পরিচালনা করা অনেক সহজ, তারপরে কয়েক মাস পরে এই ব্লবটিকে লাইব্রেরি বিভাগে স্থানান্তরিত করা যেতে পারে কিনা তা বোঝার চেষ্টা করা ছাড়াই।

নতুন APK প্রকল্প তৈরি করুন

আপনি যে প্রতিটি APK প্রকাশ করতে যাচ্ছেন তার জন্য একটি আলাদা অ্যান্ড্রয়েড প্রকল্প থাকা উচিত। সহজ সংগঠনের জন্য, লাইব্রেরি প্রজেক্ট এবং সমস্ত সম্পর্কিত APK প্রোজেক্ট একই প্যারেন্ট ফোল্ডারের অধীনে রাখুন। এছাড়াও মনে রাখবেন যে প্রতিটি APK-এর একই প্যাকেজ নাম থাকা দরকার, যদিও তাদের লাইব্রেরির সাথে প্যাকেজের নাম শেয়ার করার প্রয়োজন নেই। পূর্বে বর্ণিত স্কিম অনুসরণ করে আপনার কাছে 3টি APK থাকলে, আপনার রুট ডিরেক্টরিটি এইরকম দেখতে পারে:

alexlucas:~/code/multi-apks-root$ ls
foo-blue
foo-green
foo-lib
foo-red

প্রকল্পগুলি তৈরি হয়ে গেলে, প্রতিটি APK প্রকল্পের রেফারেন্স হিসাবে লাইব্রেরি প্রকল্প যোগ করুন। যদি সম্ভব হয়, লাইব্রেরি প্রকল্পে আপনার শুরুর কার্যকলাপ সংজ্ঞায়িত করুন এবং আপনার APK প্রকল্পে সেই কার্যকলাপটি প্রসারিত করুন। লাইব্রেরি প্রজেক্টে সংজ্ঞায়িত একটি প্রারম্ভিক ক্রিয়াকলাপ আপনাকে এক জায়গায় আপনার সমস্ত অ্যাপ্লিকেশন আরম্ভ করার সুযোগ দেয়, যাতে প্রতিটি পৃথক APK কে অ্যানালিটিক্স শুরু করা, লাইসেন্সিং চেক চালানো এবং যেকোনও "সর্বজনীন" কাজগুলি পুনরায় প্রয়োগ করতে না হয়। অন্যান্য প্রারম্ভিক পদ্ধতি যা APK থেকে APK-তে খুব বেশি পরিবর্তন করে না।

ম্যানিফেস্টগুলি সামঞ্জস্য করুন

যখন একজন ব্যবহারকারী Google Play এর মাধ্যমে একাধিক APK ব্যবহার করে এমন একটি অ্যাপ্লিকেশন ডাউনলোড করেন, তখন দুটি সহজ নিয়ম ব্যবহার করে ব্যবহার করার জন্য সঠিক APK বেছে নেওয়া হয়:

  • ম্যানিফেস্টকে দেখাতে হবে যে নির্দিষ্ট APK যোগ্য
  • যোগ্য APKগুলির মধ্যে, সর্বোচ্চ সংস্করণ নম্বর জিতেছে

উদাহরণ হিসেবে, আগে বর্ণিত একাধিক APK-এর সেট নেওয়া যাক, এবং ধরে নিই যে আমরা কোনো APK-এর জন্য সর্বোচ্চ API লেভেল সেট করিনি। পৃথকভাবে নেওয়া হলে, প্রতিটি APK-এর সম্ভাব্য পরিসর দেখতে এইরকম হবে:

3 4 5 6 7 8 9 10 11 12 13 +
3 4 5 6 7 8 9 10 11 12 13 +
3 4 5 6 7 8 9 10 11 12 13 +

যেহেতু একটি উচ্চতর minSdkVersion সহ একটি APK এর উচ্চতর সংস্করণ কোড থাকা প্রয়োজন, আমরা জানি যে সংস্করণকোডের মানগুলির ক্ষেত্রে, লাল ≥ সবুজ ≥ নীল৷ তাই আমরা কার্যকরীভাবে চার্টটিকে এভাবে দেখতে পারি:

3 4 5 6 7 8 9 10 11 12 13 +

এখন, আরও অনুমান করা যাক যে রেড APK এর কিছু প্রয়োজনীয়তা রয়েছে যা অন্য দুটিতে নেই। অ্যান্ড্রয়েড বিকাশকারী গাইডের গুগল প্লে পৃষ্ঠার ফিল্টারগুলিতে সম্ভাব্য অপরাধীদের একটি সম্পূর্ণ তালিকা রয়েছে। উদাহরণের জন্য, ধরে নেওয়া যাক যে লাল রঙের জন্য সামনের দিকের ক্যামেরা প্রয়োজন। প্রকৃতপক্ষে, লাল APK-এর সম্পূর্ণ পয়েন্ট হল সামনের দিকের ক্যামেরাকে মিষ্টি নতুন কার্যকারিতার সাথে একত্রিত করা যা API 11-এ যোগ করা হয়েছে। কিন্তু, দেখা যাচ্ছে, API 11 সমর্থন করে এমন সব ডিভাইসের সামনের দিকের ক্যামেরাও নেই! ভয়!

সৌভাগ্যবশত, যদি একজন ব্যবহারকারী এই ধরনের একটি ডিভাইস থেকে Google Play ব্রাউজ করেন, Google Play ম্যানিফেস্টটি দেখবে, দেখবে যে Red একটি প্রয়োজন হিসাবে সামনের দিকের ক্যামেরাটিকে তালিকাভুক্ত করেছে এবং শান্তভাবে এটিকে উপেক্ষা করে, নির্ধারণ করে যে Red এবং সেই ডিভাইসটি একটি নয় ডিজিটাল স্বর্গে তৈরি ম্যাচ। তারপরে এটি দেখতে পাবে যে সবুজ কেবল API 11-এর সাথে ডিভাইসগুলির সাথেই ফরওয়ার্ড-সামঞ্জস্যপূর্ণ নয় (যেহেতু কোনও maxSdkVersion সংজ্ঞায়িত করা হয়নি), তবে সামনের দিকের ক্যামেরা আছে কিনা তাও চিন্তা করে না! অ্যাপটি এখনও ব্যবহারকারীরা Google Play থেকে ডাউনলোড করতে পারেন, কারণ পুরো ফ্রন্ট-ক্যামেরা দুর্ঘটনা সত্ত্বেও, এখনও একটি APK ছিল যা সেই নির্দিষ্ট API স্তরকে সমর্থন করে।

আপনার সমস্ত APK আলাদা "ট্র্যাকে" রাখার জন্য, একটি ভাল সংস্করণ কোড স্কিম থাকা গুরুত্বপূর্ণ৷ প্রস্তাবিত একটি আমাদের বিকাশকারী গাইডের সংস্করণ কোড এলাকায় পাওয়া যাবে। যেহেতু APK-এর উদাহরণ সেটটি শুধুমাত্র 3টি সম্ভাব্য মাত্রার মধ্যে একটি নিয়ে কাজ করছে, তাই প্রতিটি APK 1000 দ্বারা আলাদা করা, সেই নির্দিষ্ট APK-এর জন্য minSdkVersion-এ প্রথম কয়েকটি সংখ্যা সেট করা এবং সেখান থেকে বৃদ্ধি করা যথেষ্ট। এটি দেখতে এরকম হতে পারে:

নীল: 03001, 03002, 03003, 03004...
সবুজ: 07001, 07002, 07003, 07004...
লাল: 11001, 11002, 11003, 11004...

এই সব একসাথে রাখলে, আপনার Android ম্যানিফেস্টগুলি সম্ভবত নিম্নলিখিতগুলির মতো দেখতে পাবে:

নীল:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="03001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="3" />
    ...

সবুজ:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="07001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="7" />
    ...

লাল:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="11001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="11" />
    ...

আপনার প্রাক-লঞ্চ চেকলিস্ট পর্যালোচনা করুন

Google Play-এ আপলোড করার আগে, নিম্নলিখিত আইটেমগুলি দুবার চেক করুন৷ মনে রাখবেন যে এগুলি একাধিক APK-এর জন্য বিশেষভাবে প্রাসঙ্গিক, এবং Google Play-তে আপলোড করা সমস্ত অ্যাপ্লিকেশনের জন্য একটি সম্পূর্ণ চেকলিস্ট উপস্থাপন করে না৷

  • সমস্ত APK-এর একই প্যাকেজের নাম থাকতে হবে
  • সমস্ত APK একই শংসাপত্রের সাথে স্বাক্ষরিত হতে হবে৷
  • যদি প্ল্যাটফর্ম সংস্করণে APKগুলি ওভারল্যাপ হয়, তাহলে উচ্চতর minSdkVersion এর একটি উচ্চতর সংস্করণ কোড থাকতে হবে
  • বিরোধপূর্ণ তথ্যের জন্য আপনার ম্যানিফেস্ট ফিল্টারগুলি দুবার চেক করুন (একটি APK যা শুধুমাত্র XLARGE স্ক্রিনে কাপকেক সমর্থন করে তা কেউ দেখতে পাবে না)
  • প্রতিটি APK এর ম্যানিফেস্ট অবশ্যই স্বতন্ত্র হতে হবে অন্তত একটি সমর্থিত স্ক্রীন, openGL টেক্সচার বা প্ল্যাটফর্ম সংস্করণ জুড়ে
  • অন্তত একটি ডিভাইসে প্রতিটি APK পরীক্ষা করার চেষ্টা করুন। এটি বাদ দিয়ে, আপনার ডেভেলপমেন্ট মেশিনে বসে থাকা ব্যবসার সবচেয়ে কাস্টমাইজযোগ্য ডিভাইস এমুলেটরগুলির মধ্যে একটি রয়েছে৷ বাদাম যান!

Google Play-তে আপনার অ্যাপ্লিকেশন লুকিয়ে রাখতে পারে এমন কোনো চমক নেই তা নিশ্চিত করতে বাজারে পাঠানোর আগে সংকলিত APK পরিদর্শন করাও মূল্যবান। এটি আসলে "aapt" টুল ব্যবহার করে বেশ সহজ। Aapt (অ্যান্ড্রয়েড অ্যাসেট প্যাকেজিং টুল) আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলি তৈরি এবং প্যাকেজ করার জন্য বিল্ড প্রক্রিয়ার অংশ এবং সেগুলি পরিদর্শনের জন্য একটি খুব সহজ টুলও৷

>aapt dump badging
package: name='com.example.hello' versionCode='1' versionName='1.0'
sdkVersion:'11'
uses-permission:'android.permission.SEND_SMS'
application-label:'Hello'
application-icon-120:'res/drawable-ldpi/icon.png'
application-icon-160:'res/drawable-mdpi/icon.png'
application-icon-240:'res/drawable-hdpi/icon.png'
application: label='Hello' icon='res/drawable-mdpi/icon.png'
launchable-activity: name='com.example.hello.HelloActivity'  label='Hello' icon=''
uses-feature:'android.hardware.telephony'
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'small' 'normal' 'large' 'xlarge'
supports-any-density: 'true'
locales: '--_--'
densities: '120' '160' '240'

আপনি যখন aapt আউটপুট পরীক্ষা করেন, তখন নিশ্চিত হয়ে নিন যে আপনার কাছে সমর্থন-স্ক্রিন এবং সামঞ্জস্যপূর্ণ-স্ক্রিনগুলির জন্য বিরোধপূর্ণ মান নেই এবং আপনার কাছে অনাকাঙ্ক্ষিত "ব্যবহার-বৈশিষ্ট্য" মান নেই যা আপনার অনুমতির ফলে যোগ করা হয়েছে ম্যানিফেস্টে সেট করুন। উপরের উদাহরণে, APKটি অনেকগুলি ডিভাইসে দৃশ্যমান হবে না৷

কেন? প্রয়োজনীয় অনুমতি SEND_SMS যোগ করে, android.hardware.telephony-এর বৈশিষ্ট্যের প্রয়োজনীয়তা নিহিতভাবে যোগ করা হয়েছে। যেহেতু API 11 হল Honeycomb (অ্যান্ড্রয়েডের সংস্করণটি ট্যাবলেটের জন্য বিশেষভাবে অপ্টিমাইজ করা হয়েছে), এবং কোনও Honeycomb ডিভাইসে টেলিফোনি হার্ডওয়্যার নেই, তাই Google Play সব ক্ষেত্রেই এই APK ফিল্টার করবে, যতক্ষণ না ভবিষ্যতে এমন ডিভাইসগুলি আসে যেগুলি API স্তরের উচ্চতর এবং অধিকারী হয়। টেলিফোনি হার্ডওয়্যার।

সৌভাগ্যবশত আপনার ম্যানিফেস্টে নিম্নলিখিতগুলি যোগ করে এটি সহজেই ঠিক করা হয়েছে:

<uses-feature android:name="android.hardware.telephony" android:required="false" />

android.hardware.touchscreen প্রয়োজনীয়তাও অন্তর্নিহিতভাবে যোগ করা হয়েছে। আপনি যদি চান যে আপনার APK টিভিতে দৃশ্যমান হোক যা নন-টাচস্ক্রিন ডিভাইস আপনার ম্যানিফেস্টে নিম্নলিখিতগুলি যোগ করা উচিত:

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />

একবার আপনি প্রি-লঞ্চ চেকলিস্ট সম্পূর্ণ করলে, Google Play-তে আপনার APK আপলোড করুন। Google Play ব্রাউজ করার সময় অ্যাপ্লিকেশনটি প্রদর্শিত হতে কিছুটা সময় লাগতে পারে, কিন্তু যখন এটি হয়, একটি শেষ পরীক্ষা করুন৷ আপনার কাছে থাকা যেকোনো পরীক্ষামূলক ডিভাইসে অ্যাপ্লিকেশনটি ডাউনলোড করুন, নিশ্চিত করুন যে APKগুলি উদ্দেশ্যযুক্ত ডিভাইসগুলিকে লক্ষ্য করে। অভিনন্দন, আপনি সম্পন্ন!