বিভিন্ন GL টেক্সচারের জন্য একাধিক APK তৈরি করা

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

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

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

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

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

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

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

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

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

যেহেতু বেশিরভাগ অ্যান্ড্রয়েড-চালিত ডিভাইস একাধিক টেক্সচার ফর্ম্যাট সমর্থন করে, তাই আপনাকে পছন্দের একটি অর্ডার স্থাপন করতে হবে। আপনার অ্যাপ্লিকেশন সমর্থন করতে যাচ্ছে এমন সমস্ত বিন্যাস সহ একটি চার্ট তৈরি করুন। বাম-সর্বাধিক কক্ষটি সর্বনিম্ন অগ্রাধিকার হতে চলেছে (এটি সম্ভবত ETC1 হবে, কার্যক্ষমতা এবং সামঞ্জস্যের ক্ষেত্রে সত্যিই একটি কঠিন ডিফল্ট)৷ তারপর চার্টে এমন রঙ করুন যাতে প্রতিটি সেল একটি APK প্রতিনিধিত্ব করে।

ETC1 এটিআই পাওয়ারভিআর

চার্টে রঙ করা এই নির্দেশিকাটিকে কম একরঙা করে তোলার চেয়ে আরও বেশি কিছু করে - এটিতে আন্তঃ-টিম যোগাযোগ সহজ করার একটি উপায়ও রয়েছে- আপনি এখন প্রতিটি APK-কে "নীল", "সবুজ" বা "লাল" হিসাবে উল্লেখ করতে পারেন। "The one that supports ETC1 টেক্সচার ফরম্যাট", ইত্যাদি

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

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

দ্রষ্টব্য: লাইব্রেরি প্রকল্পগুলি কীভাবে তৈরি এবং অন্তর্ভুক্ত করতে হবে তার বাস্তবায়নের বিশদগুলি এই পাঠের সুযোগের বাইরে হলেও, আপনি একটি 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-এ তালিকাভুক্ত যেকোনও টেক্সচার ফরম্যাট বাজারে থাকা ডিভাইসের দ্বারা সমর্থিত হলে, সেই ডিভাইসটি যোগ্য বলে বিবেচিত হবে

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

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

উদাহরণ স্বরূপ, কয়েকটি ডিভাইস নিন এবং দেখুন আগে সংজ্ঞায়িত কতগুলি APK প্রতিটি ডিভাইসের সাথে মানানসই।

ফুফোন নেক্সাস এস ইভো
ETC1 ETC1 ETC1
পাওয়ারভিআর এটিআই টিসি

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

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

নীল: 1001, 1002, 1003, 1004...
সবুজ: 2001, 2002, 2003, 2004...
লাল: 3001, 3002, 3003, 3004...

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

নীল:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
    ...

সবুজ:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="2001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_AMD_compressed_ATC_texture" />
    ...

লাল:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="3001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_IMG_texture_compression_pvrtc" />
    ...

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

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

  • সমস্ত APK-এর একই প্যাকেজের নাম থাকতে হবে
  • সমস্ত APK একই শংসাপত্রের সাথে স্বাক্ষরিত হতে হবে৷
  • বিরোধপূর্ণ তথ্যের জন্য আপনার ম্যানিফেস্ট ফিল্টারগুলি দুবার চেক করুন (একটি 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: 'xlarge'
supports-any-density: 'true'
locales: '--_--'
densities: '120' '160' '240'

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

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

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

<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গুলি উদ্দেশ্যযুক্ত ডিভাইসগুলিকে লক্ষ্য করে। অভিনন্দন, আপনি সম্পন্ন!