একাধিক APK তৈরি করুন

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

যদিও যখনই সম্ভব আপনার সমস্ত লক্ষ্য ডিভাইসগুলিকে সমর্থন করার জন্য একটি একক APK তৈরি করা ভাল, তবে একাধিক স্ক্রীন ঘনত্ব বা অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (ABIs) সমর্থনকারী ফাইলগুলির কারণে এটি একটি খুব বড় APK হতে পারে। আপনার APK এর আকার কমানোর একটি উপায় হল একাধিক APK তৈরি করা যাতে নির্দিষ্ট স্ক্রীনের ঘনত্ব বা ABI-এর জন্য ফাইল থাকে।

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

একাধিক APK-এর জন্য আপনার বিল্ড কনফিগার করুন

একাধিক APK-এর জন্য আপনার বিল্ড কনফিগার করতে, আপনার মডিউল-স্তরের build.gradle ফাইলে একটি splits ব্লক যোগ করুন। splits ব্লকের মধ্যে, একটি density ব্লক প্রদান করুন যা নির্দিষ্ট করে যে আপনি কীভাবে Gradle-কে প্রতি-ঘনত্বের APK তৈরি করতে চান বা একটি abi ব্লক যেটি নির্দিষ্ট করে যে আপনি কীভাবে Gradle-এর প্রতি-ABI APK তৈরি করতে চান। আপনি ঘনত্ব এবং ABI ব্লক উভয়ই প্রদান করতে পারেন এবং বিল্ড সিস্টেম প্রতিটি ঘনত্ব এবং ABI সমন্বয়ের জন্য একটি APK তৈরি করে।

স্ক্রীনের ঘনত্বের জন্য একাধিক APK কনফিগার করুন

বিভিন্ন স্ক্রিনের ঘনত্বের জন্য আলাদা APK তৈরি করতে, আপনার splits ব্লকের ভিতরে একটি density ব্লক যোগ করুন। আপনার density ব্লকে, পছন্দসই পর্দার ঘনত্ব এবং সামঞ্জস্যপূর্ণ স্ক্রীন আকারের একটি তালিকা প্রদান করুন। প্রতিটি APK-এর ম্যানিফেস্টে আপনার নির্দিষ্ট <compatible-screens> স্ক্রিন> উপাদানের প্রয়োজন হলেই শুধুমাত্র সামঞ্জস্যপূর্ণ স্ক্রীন মাপের তালিকা ব্যবহার করুন।

স্ক্রীনের ঘনত্বের জন্য একাধিক APK কনফিগার করতে নিম্নলিখিত Gradle DSL বিকল্পগুলি ব্যবহার করা হয়:

গ্রুভির জন্য enable , কোটলিন স্ক্রিপ্টের জন্য isEnable
আপনি যদি এই উপাদানটিকে true সেট করেন, তাহলে আপনার সংজ্ঞায়িত পর্দার ঘনত্বের উপর ভিত্তি করে Gradle একাধিক APK তৈরি করে৷ ডিফল্ট মান false
exclude
ঘনত্বের একটি কমা-বিভক্ত তালিকা নির্দিষ্ট করে যেগুলির জন্য আপনি Gradle আলাদা APK তৈরি করতে চান না৷ আপনি যদি বেশিরভাগ ঘনত্বের জন্য APK তৈরি করতে চান তবে আপনার অ্যাপ সমর্থন করে না এমন কয়েকটি ঘনত্ব বাদ দিতে চাইলে exclude দিন।
reset()

পর্দার ঘনত্বের ডিফল্ট তালিকা সাফ করে। আপনি যে ঘনত্বগুলি যোগ করতে চান তা নির্দিষ্ট করতে include উপাদানটির সাথে মিলিত হলেই ব্যবহার করুন।

নিম্নোক্ত স্নিপেট তালিকাটি পরিষ্কার করতে reset() কল করে এবং তারপর include ব্যবহার করে শুধুমাত্র ldpi এবং xxhdpi তে ঘনত্বের তালিকা সেট করে:

reset()                  // Clears the default list from all densities
                         // to no densities.
include "ldpi", "xxhdpi" // Specifies the two densities to generate APKs
                         // for.
include
ঘনত্বের একটি কমা-বিভক্ত তালিকা নির্দিষ্ট করে যেগুলির জন্য আপনি Gradle-এর APK তৈরি করতে চান৷ ঘনত্বের একটি সঠিক তালিকা নির্দিষ্ট করতে শুধুমাত্র reset() সংমিশ্রণে ব্যবহার করুন।
compatibleScreens

সামঞ্জস্যপূর্ণ স্ক্রীন আকারের একটি কমা দ্বারা পৃথক করা তালিকা নির্দিষ্ট করে৷ এটি প্রতিটি APK-এর জন্য ম্যানিফেস্টে একটি ম্যাচিং <compatible-screens> নোড ইনজেক্ট করে।

এই সেটিং একই build.gradle বিভাগে পর্দার ঘনত্ব এবং পর্দার আকার উভয় পরিচালনা করার জন্য একটি সুবিধাজনক উপায় প্রদান করে। যাইহোক, <compatible-screens> ব্যবহার করে আপনার অ্যাপ যে ধরনের ডিভাইসে কাজ করে তা সীমিত করতে পারে। বিভিন্ন স্ক্রীন মাপ সমর্থন করার বিকল্প উপায়ের জন্য, পর্দা সামঞ্জস্য ওভারভিউ দেখুন।

কারণ স্ক্রীনের ঘনত্বের উপর ভিত্তি করে প্রতিটি APK-এ একটি <compatible-screens> স্ক্রিন> ট্যাগ অন্তর্ভুক্ত থাকে নির্দিষ্ট বিধিনিষেধের সাথে APK কোন ধরনের স্ক্রীন সমর্থন করে-এমনকি আপনি বেশ কয়েকটি APK প্রকাশ করলেও-কিছু নতুন ডিভাইস আপনার একাধিক APK ফিল্টারের সাথে মেলে না। যেমন, Gradle সর্বদা একটি অতিরিক্ত সার্বজনীন APK তৈরি করে যাতে সমস্ত স্ক্রীনের ঘনত্বের জন্য সম্পদ থাকে এবং একটি <compatible-screens> ট্যাগ অন্তর্ভুক্ত করে না। <compatible-screens> ট্যাগের সাথে APK-এর সাথে মেলে না এমন ডিভাইসগুলির জন্য একটি ফলব্যাক প্রদান করতে আপনার প্রতি-ঘনত্বের APKগুলির সাথে এই সর্বজনীন APK প্রকাশ করুন৷

নিম্নলিখিত উদাহরণটি ldpi , xxhdpi , এবং xxxhdpi ব্যতীত প্রতিটি পর্দার ঘনত্বের জন্য একটি পৃথক APK তৈরি করে৷ এটি সমস্ত ঘনত্বের ডিফল্ট তালিকা থেকে ঐ তিনটি ঘনত্ব মুছে ফেলার জন্য exclude ব্যবহার করে করা হয়।

গ্রোভি

android {
  ...
  splits {

    // Configures multiple APKs based on screen density.
    density {

      // Configures multiple APKs based on screen density.
      enable true

      // Specifies a list of screen densities you don't want Gradle to create multiple APKs for.
      exclude "ldpi", "xxhdpi", "xxxhdpi"

      // Specifies a list of compatible screen size settings for the manifest.
      compatibleScreens 'small', 'normal', 'large', 'xlarge'
    }
  }
}

কোটলিন

android {
    ...
    splits {

        // Configures multiple APKs based on screen density.
        density {

            // Configures multiple APKs based on screen density.
            isEnable = true

            // Specifies a list of screen densities you don't want Gradle to create multiple APKs for.
            exclude("ldpi", "xxhdpi", "xxxhdpi")

            // Specifies a list of compatible screen size settings for the manifest.
            compatibleScreens("small", "normal", "large", "xlarge")
        }
    }
}

নির্দিষ্ট স্ক্রীনের ধরন এবং ডিভাইসগুলিতে আপনার অ্যাপের বিভিন্ন বিল্ড ভেরিয়েন্ট কাস্টমাইজ করার বিষয়ে আরও বিশদ বিবরণের জন্য, সীমাবদ্ধ স্ক্রিন সমর্থন ঘোষণা করুন দেখুন।

ABI-এর জন্য একাধিক APK কনফিগার করুন

বিভিন্ন ABI-এর জন্য আলাদা APK তৈরি করতে, আপনার splits ব্লকের মধ্যে একটি abi ব্লক যোগ করুন। আপনার abi ব্লকে, পছন্দসই ABI-এর একটি তালিকা প্রদান করুন।

নিম্নলিখিত Gradle DSL বিকল্পগুলি ABI প্রতি একাধিক APK কনফিগার করতে ব্যবহৃত হয়:

Groovy-এর জন্য enable বা কোটলিন স্ক্রিপ্টের জন্য isEnable
আপনি যদি এই উপাদানটিকে true সেট করেন, Gradle আপনার সংজ্ঞায়িত ABI গুলির উপর ভিত্তি করে একাধিক APK তৈরি করে৷ ডিফল্ট মান false
exclude
ABI-এর একটি কমা-বিভক্ত তালিকা নির্দিষ্ট করে যার জন্য আপনি Gradle আলাদা APK তৈরি করতে চান না। আপনি বেশিরভাগ ABI-এর জন্য APK তৈরি করতে চাইলে exclude ব্যবহার করুন কিন্তু আপনার অ্যাপ সমর্থন করে না এমন কয়েকটি ABI বাদ দিতে হবে।
reset()

ABI-এর ডিফল্ট তালিকা সাফ করে। আপনি যে ABI গুলি যোগ করতে চান তা নির্দিষ্ট করতে include উপাদানটির সাথে মিলিত হলেই ব্যবহার করুন৷

নিম্নলিখিত স্নিপেটটি তালিকাটি সাফ করার জন্য reset() কল করে এবং তারপর include ব্যবহার করে ABI-এর তালিকাকে x86 এবং x86_64 সেট করে:

reset()                 // Clears the default list from all ABIs to no ABIs.
include "x86", "x86_64" // Specifies the two ABIs we want to generate APKs for.
include
ABI-এর একটি কমা-বিচ্ছিন্ন তালিকা নির্দিষ্ট করে যেগুলির জন্য আপনি Gradle-এর APK তৈরি করতে চান৷ ABI-এর একটি সঠিক তালিকা নির্দিষ্ট করতে শুধুমাত্র reset() সংমিশ্রণে ব্যবহার করুন।
Groovy-এর জন্য universalApk , অথবা Kotlin স্ক্রিপ্টের জন্য isUniversalApk

true হলে, Gradle প্রতি-ABI APK-এর পাশাপাশি একটি সর্বজনীন APK তৈরি করে। একটি সার্বজনীন APK একটি একক APK-এ সমস্ত ABI-এর জন্য কোড এবং সংস্থান ধারণ করে। ডিফল্ট মান false

মনে রাখবেন যে এই বিকল্পটি শুধুমাত্র splits.abi ব্লকে উপলব্ধ। স্ক্রীনের ঘনত্বের উপর ভিত্তি করে একাধিক APK তৈরি করার সময়, Gradle সর্বদা একটি সার্বজনীন APK তৈরি করে যাতে সমস্ত স্ক্রীনের ঘনত্বের জন্য কোড এবং সংস্থান থাকে।

নিম্নলিখিত উদাহরণটি প্রতিটি ABI-এর জন্য একটি পৃথক APK তৈরি করে: x86 এবং x86_64 । এটি reset() ব্যবহার করে ABI-এর একটি খালি তালিকা দিয়ে শুরু করার মাধ্যমে করা হয়, এর পরে ABI-এর একটি তালিকা include যা প্রত্যেকে একটি APK পায়।

গ্রোভি

android {
  ...
  splits {

    // Configures multiple APKs based on ABI.
    abi {

      // Enables building multiple APKs per ABI.
      enable true

      // By default all ABIs are included, so use reset() and include to specify that you only
      // want APKs for x86 and x86_64.

      // Resets the list of ABIs for Gradle to create APKs for to none.
      reset()

      // Specifies a list of ABIs for Gradle to create APKs for.
      include "x86", "x86_64"

      // Specifies that you don't want to also generate a universal APK that includes all ABIs.
      universalApk false
    }
  }
}

কোটলিন

android {
  ...
  splits {

    // Configures multiple APKs based on ABI.
    abi {

      // Enables building multiple APKs per ABI.
      isEnable = true

      // By default all ABIs are included, so use reset() and include to specify that you only
      // want APKs for x86 and x86_64.

      // Resets the list of ABIs for Gradle to create APKs for to none.
      reset()

      // Specifies a list of ABIs for Gradle to create APKs for.
      include("x86", "x86_64")

      // Specifies that you don't want to also generate a universal APK that includes all ABIs.
      isUniversalApk = false
    }
  }
}

সমর্থিত ABI-এর তালিকার জন্য, সমর্থিত ABI দেখুন।

নেটিভ/সি++ কোড ছাড়া প্রকল্প

নেটিভ/C++ কোড ছাড়া প্রকল্পগুলির জন্য, বিল্ড ভেরিয়েন্ট প্যানেলে দুটি কলাম রয়েছে: মডিউল এবং অ্যাক্টিভ বিল্ড ভেরিয়েন্ট , যেমনটি চিত্র 1-এ দেখানো হয়েছে।

বিল্ড ভেরিয়েন্ট প্যানেল
চিত্র 1. বিল্ড ভেরিয়েন্ট প্যানেলে নেটিভ/C++ কোড ছাড়া প্রকল্পের জন্য দুটি কলাম রয়েছে।

মডিউলটির সক্রিয় বিল্ড বৈকল্পিক মান নির্ধারণ করে বিল্ড বৈকল্পিক যা স্থাপন করা হয়েছে এবং সম্পাদকে দৃশ্যমান। বৈকল্পিকগুলির মধ্যে স্যুইচ করতে, একটি মডিউলের জন্য সক্রিয় বিল্ড ভেরিয়েন্ট ঘরে ক্লিক করুন এবং তালিকার ক্ষেত্র থেকে পছন্দসই বৈকল্পিকটি চয়ন করুন।

নেটিভ/C++ কোড সহ প্রকল্প

নেটিভ/C++ কোড সহ প্রকল্পগুলির জন্য, বিল্ড ভেরিয়েন্ট প্যানেলে তিনটি কলাম রয়েছে: মডিউল , অ্যাক্টিভ বিল্ড ভেরিয়েন্ট , এবং অ্যাক্টিভ ABI , যেমন চিত্র 2-এ দেখানো হয়েছে৷

চিত্র 2. বিল্ড ভেরিয়েন্ট প্যানেল নেটিভ/C++ কোড সহ প্রকল্পগুলির জন্য সক্রিয় ABI কলাম যুক্ত করে।

মডিউলের জন্য সক্রিয় বিল্ড বৈকল্পিক মান নির্ধারণ করে বিল্ড বৈকল্পিক যা স্থাপন করা হয়েছে এবং সম্পাদকে দৃশ্যমান। নেটিভ মডিউলগুলির জন্য, অ্যাক্টিভ ABI মান ABI নির্ধারণ করে যা সম্পাদক ব্যবহার করে, কিন্তু যা স্থাপন করা হয়েছে তা প্রভাবিত করে না।

বিল্ড টাইপ বা ABI পরিবর্তন করতে:

  1. অ্যাক্টিভ বিল্ড ভেরিয়েন্ট বা অ্যাক্টিভ এবিআই কলামের জন্য ঘরে ক্লিক করুন।
  2. তালিকার ক্ষেত্র থেকে পছন্দসই বৈকল্পিক বা ABI চয়ন করুন। একটি নতুন সিঙ্ক স্বয়ংক্রিয়ভাবে চলে।

একটি অ্যাপ বা লাইব্রেরি মডিউলের জন্য কলাম পরিবর্তন করা সমস্ত নির্ভরশীল সারিতে পরিবর্তন প্রযোজ্য।

সংস্করণ কনফিগার করুন

ডিফল্টরূপে, যখন Gradle একাধিক APK তৈরি করে, তখন প্রতিটি APK-এর একই সংস্করণের তথ্য থাকে, যেমনটি মডিউল-স্তরের build.gradle বা build.gradle.kts ফাইলে উল্লেখ করা হয়েছে। যেহেতু Google Play Store একই অ্যাপের জন্য একাধিক APK মঞ্জুরি দেয় না যার সকলের কাছে একই সংস্করণের তথ্য রয়েছে, তাই আপনি Play Store এ আপলোড করার আগে প্রতিটি APK-এর একটি অনন্য versionCode রয়েছে তা নিশ্চিত করতে হবে।

আপনি আপনার মডিউল-স্তরের build.gradle ফাইল কনফিগার করতে পারেন প্রতিটি APK-এর জন্য versionCode ওভাররাইড করতে। একটি ম্যাপিং তৈরি করে যা প্রতিটি ABI এবং ঘনত্বের জন্য একটি অনন্য সাংখ্যিক মান নির্ধারণ করে যার জন্য আপনি একাধিক APK কনফিগার করেন, আপনি আউটপুট সংস্করণ কোডটিকে এমন একটি মান দিয়ে ওভাররাইড করতে পারেন যা defaultConfig বা productFlavors ব্লকের মধ্যে সংজ্ঞায়িত সংস্করণ কোডকে অ্যাসাইন করা সাংখ্যিক মানের সাথে একত্রিত করে ঘনত্ব বা ABI।

নিম্নলিখিত উদাহরণে, x86 ABI-এর জন্য APK 2004-এর একটি versionCode পায় এবং x86_64 ABI 3004-এর একটি versionCode পায়।

1000-এর মতো বড় বৃদ্ধিতে সংস্করণ কোডগুলি বরাদ্দ করা আপনাকে পরে অনন্য সংস্করণ কোডগুলি বরাদ্দ করতে দেয় যদি আপনার অ্যাপ আপডেট করার প্রয়োজন হয়৷ উদাহরণস্বরূপ, যদি পরবর্তী আপডেটে defaultConfig.versionCode 5-এ পুনরাবৃত্তি হয়, Gradle x86 APK-এ 2005-এর একটি versionCode এবং x86_64 APK-কে 3005-এর একটি সংস্করণ বরাদ্দ করে৷

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

গ্রোভি

android {
  ...
  defaultConfig {
    ...
    versionCode 4
  }
  splits {
    ...
  }
}

// Map for the version code that gives each ABI a value.
ext.abiCodes = ['armeabi-v7a':1, x86:2, x86_64:3]

// For per-density APKs, create a similar map:
// ext.densityCodes = ['mdpi': 1, 'hdpi': 2, 'xhdpi': 3]

import com.android.build.OutputFile

// For each APK output variant, override versionCode with a combination of
// ext.abiCodes * 1000 + variant.versionCode. In this example, variant.versionCode
// is equal to defaultConfig.versionCode. If you configure product flavors that
// define their own versionCode, variant.versionCode uses that value instead.
android.applicationVariants.all { variant ->

  // Assigns a different version code for each output APK
  // other than the universal APK.
  variant.outputs.each { output ->

    // Stores the value of ext.abiCodes that is associated with the ABI for this variant.
    def baseAbiVersionCode =
            // Determines the ABI for this variant and returns the mapped value.
            project.ext.abiCodes.get(output.getFilter(OutputFile.ABI))

    // Because abiCodes.get() returns null for ABIs that are not mapped by ext.abiCodes,
    // the following code doesn't override the version code for universal APKs.
    // However, because you want universal APKs to have the lowest version code,
    // this outcome is desirable.
    if (baseAbiVersionCode != null) {

      // Assigns the new version code to versionCodeOverride, which changes the
      // version code for only the output APK, not for the variant itself. Skipping
      // this step causes Gradle to use the value of variant.versionCode for the APK.
      output.versionCodeOverride =
              baseAbiVersionCode * 1000 + variant.versionCode
    }
  }
}

কোটলিন

android {
  ...
  defaultConfig {
    ...
    versionCode = 4
  }
  splits {
    ...
  }
}

// Map for the version code that gives each ABI a value.
val abiCodes = mapOf("armeabi-v7a" to 1, "x86" to 2, "x86_64" to 3)

// For per-density APKs, create a similar map:
// val densityCodes = mapOf("mdpi" to 1, "hdpi" to 2, "xhdpi" to 3)

import com.android.build.api.variant.FilterConfiguration.FilterType.*

// For each APK output variant, override versionCode with a combination of
// abiCodes * 1000 + variant.versionCode. In this example, variant.versionCode
// is equal to defaultConfig.versionCode. If you configure product flavors that
// define their own versionCode, variant.versionCode uses that value instead.
androidComponents {
    onVariants { variant ->

        // Assigns a different version code for each output APK
        // other than the universal APK.
        variant.outputs.forEach { output ->
            val name = output.filters.find { it.filterType == ABI }?.identifier

            // Stores the value of abiCodes that is associated with the ABI for this variant.
            val baseAbiCode = abiCodes[name]
            // Because abiCodes.get() returns null for ABIs that are not mapped by ext.abiCodes,
            // the following code doesn't override the version code for universal APKs.
            // However, because you want universal APKs to have the lowest version code,
            // this outcome is desirable.
            if (baseAbiCode != null) {
                // Assigns the new version code to output.versionCode, which changes the version code
                // for only the output APK, not for the variant itself.
                output.versionCode.set(baseAbiCode * 1000 + (output.versionCode.get() ?: 0))
            }
        }
    }
}

বিকল্প সংস্করণ কোড স্কিমের আরও উদাহরণের জন্য, সংস্করণ কোড বরাদ্দ করা দেখুন।

একাধিক APK তৈরি করুন

একবার আপনি একাধিক APK তৈরি করতে আপনার মডিউল-স্তরের build.gradle বা build.gradle.kts ফাইল কনফিগার করলে, প্রকল্প ফলকে বর্তমানে নির্বাচিত মডিউলের জন্য সমস্ত APK তৈরি করতে Build > Build APK-এ ক্লিক করুন। Gradle প্রকল্পের build/outputs/apk/ ডিরেক্টরিতে প্রতিটি ঘনত্ব বা ABI-এর জন্য APK তৈরি করে।

Gradle প্রতিটি ঘনত্ব বা ABI এর জন্য একটি APK তৈরি করে যার জন্য আপনি একাধিক APK কনফিগার করেন। আপনি যদি ঘনত্ব এবং ABI উভয়ের জন্য একাধিক APK সক্ষম করেন, Gradle প্রতিটি ঘনত্ব এবং ABI সমন্বয়ের জন্য একটি APK তৈরি করে।

উদাহরণস্বরূপ, নিম্নলিখিত build.gradle স্নিপেট mdpi এবং hdpi ঘনত্বের জন্য একাধিক APK তৈরি করতে সক্ষম করে, এবং এছাড়াও x86 এবং x86_64 ABIs:

গ্রোভি

...
  splits {
    density {
      enable true
      reset()
      include "mdpi", "hdpi"
    }
    abi {
      enable true
      reset()
      include "x86", "x86_64"
    }
  }

কোটলিন

...
  splits {
    density {
      isEnable = true
      reset()
      include("mdpi", "hdpi")
    }
    abi {
      isEnable = true
      reset()
      include("x86", "x86_64")
    }
  }

উদাহরণ কনফিগারেশন থেকে আউটপুট নিম্নলিখিত 4 APK অন্তর্ভুক্ত:

  • app-hdpiX86-release.apk : hdpi ঘনত্ব এবং x86 ABI-এর জন্য কোড এবং সংস্থান রয়েছে।
  • app-hdpiX86_64-release.apk : hdpi ঘনত্ব এবং x86_64 ABI-এর জন্য কোড এবং সংস্থান রয়েছে।
  • app-mdpiX86-release.apk : mdpi ঘনত্ব এবং x86 ABI-এর জন্য কোড এবং সংস্থান রয়েছে।
  • app-mdpiX86_64-release.apk : mdpi ঘনত্ব এবং x86_64 ABI-এর জন্য কোড এবং সংস্থান রয়েছে।

স্ক্রীনের ঘনত্বের উপর ভিত্তি করে একাধিক APK তৈরি করার সময়, Gradle সর্বদা একটি সার্বজনীন APK তৈরি করে যাতে প্রতি-ঘনত্বের APKগুলি ছাড়াও সমস্ত ঘনত্বের জন্য কোড এবং সংস্থান অন্তর্ভুক্ত থাকে।

ABI-এর উপর ভিত্তি করে একাধিক APK তৈরি করার সময়, Gradle শুধুমাত্র একটি APK তৈরি করে যেটিতে সমস্ত ABI-এর জন্য কোড এবং সংস্থান অন্তর্ভুক্ত থাকে যদি আপনি আপনার build.gradle ফাইলে (Groovy-এর জন্য) splits.abi ব্লকে universalApk true উল্লেখ করেন অথবা বিভাজনে isUniversalApk = true উল্লেখ করেন splits.abi আপনার build.gradle.kts ফাইলে splits.abi ব্লক (কোটলিন স্ক্রিপ্টের জন্য)।

APK ফাইলের নামের বিন্যাস

একাধিক APK তৈরি করার সময়, Gradle নিম্নলিখিত স্কিম ব্যবহার করে APK ফাইলের নাম তৈরি করে:

modulename - screendensity ABI - buildvariant .apk

স্কিমের উপাদানগুলি হল:

modulename
নির্মিত হচ্ছে মডিউল নাম নির্দিষ্ট করে।
screendensity
যদি পর্দার ঘনত্বের জন্য একাধিক APK সক্ষম করা থাকে, তাহলে APK-এর জন্য স্ক্রীনের ঘনত্ব নির্দিষ্ট করে, যেমন mdpi
ABI

ABI-এর জন্য একাধিক APK সক্রিয় থাকলে, APK-এর জন্য ABI নির্দিষ্ট করে, যেমন x86

যদি স্ক্রীনের ঘনত্ব এবং ABI উভয়ের জন্য একাধিক APK সক্ষম করা থাকে, Gradle ঘনত্বের নামকে ABI নামের সাথে সংযুক্ত করে, উদাহরণস্বরূপ mdpiX86 । যদি universalApk প্রতি-ABI APK-এর জন্য সক্ষম করা থাকে, তাহলে Gradle সার্বজনীন APK ফাইলের নামের ABI অংশ হিসেবে universal ব্যবহার করে।

buildvariant
বিল্ড বৈকল্পিক তৈরি করা হচ্ছে উল্লেখ করে, যেমন debug

উদাহরণস্বরূপ, myApp-এর ডিবাগ সংস্করণের জন্য mdpi স্ক্রীনের ঘনত্বের APK তৈরি করার সময়, APK ফাইলের নাম myApp-mdpi-debug.apk । myApp-এর রিলিজ সংস্করণ যা mdpi স্ক্রীনের ঘনত্ব এবং x86 ABI উভয়ের জন্য একাধিক APK তৈরি করতে কনফিগার করা হয়েছে myApp-mdpiX86-release.apk এর একটি APK ফাইলের নাম রয়েছে।