বেসলাইন প্রোফাইল প্রজন্ম কনফিগার করুন

বেসলাইন প্রোফাইল গ্রেডল প্লাগইন বেসলাইন প্রোফাইল তৈরি এবং বজায় রাখা সহজ করে তোলে। এটি আপনাকে নিম্নলিখিত কাজগুলি করতে সহায়তা করে:

এই পৃষ্ঠাটি ব্যাখ্যা করে কিভাবে আপনার বেসলাইন প্রোফাইলের প্রজন্মকে কাস্টমাইজ করতে বেসলাইন প্রোফাইল গ্রেডল প্লাগইন ব্যবহার করবেন।

প্লাগইন প্রয়োজনীয়তা

বেসলাইন প্রোফাইল তৈরি করতে একটি গ্রেডল ম্যানেজড ডিভাইস ব্যবহার করুন

আপনার বেসলাইন প্রোফাইল তৈরি করতে একটি গ্র্যাডল ম্যানেজড ডিভাইস (জিএমডি) ব্যবহার করতে, প্রোফাইল প্রযোজক মডিউলের build.gradle.kts কনফিগারেশনে একটি যোগ করুন—সম্ভবত :baselineprofile পরীক্ষা মডিউল—নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

কোটলিন

android {
   testOptions.managedDevices.devices {
       create<com.android.build.api.dsl.ManagedVirtualDevice>("pixel6Api31") {
           device = "Pixel 6"
           apiLevel = 31
           systemImageSource = "aosp"
       }
   }
}

গ্রোভি

android {
   testOptions.managedDevices.devices {
       pixel6Api31(ManagedVirtualDevice) {
           device 'Pixel 6'
           apiLevel = 31
           systemImageSource 'aosp'
       }
   }
}

বেসলাইন প্রোফাইল তৈরি করতে জিএমডি ব্যবহার করুন বেসলাইন প্রোফাইল গ্রেডল প্লাগইন কনফিগারেশনে যুক্ত করে, নিম্নরূপ :baselineprofile টেস্ট মডিউলের build.gradle.kts এ:

কোটলিন

baselineProfile {
    managedDevices += "pixel6Api31"
}

গ্রোভি

baselineProfile {
    managedDevices = ['pixel6Api31']
}

যখন আপনি বেসলাইন প্রোফাইল তৈরি করতে একটি GMD ব্যবহার করেন, আপনার :baselineprofile পরীক্ষা মডিউলে useConnectedDevices false এ সেট করুন:

কোটলিন

baselineProfile {
    ...
    useConnectedDevices = false
}

গ্রোভি

baselineProfile {
    ...
    useConnectedDevices false
}

বিভিন্ন রূপের জন্য বেসলাইন প্রোফাইল তৈরি করুন

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

কোটলিন

baselineProfile {
    mergeIntoMain = true
}

গ্রোভি

baselineProfile {
    mergeIntoMain true
}

সমস্ত ভেরিয়েন্টের জন্য জেনারেট করা প্রোফাইলগুলিকে একটি একক প্রোফাইলে মার্জ করতে, mergeIntoMain true তে সেট করুন। এই সেটিংটি true হলে প্রতি-ভেরিয়েন্ট বেসলাইন প্রোফাইল তৈরি করা সম্ভব নয়, তাই generateBaselineProfile নামে একটি একক গ্রেডল টাস্ক রয়েছে। প্রোফাইলটি src/main/generated/baselineProfiles এ আউটপুট।

মার্জিং অক্ষম করতে এবং প্রতি ভেরিয়েন্টে একটি প্রোফাইল থাকতে, mergeIntoMain false সেট করুন। এই ক্ষেত্রে, একাধিক বৈকল্পিক-নির্দিষ্ট গ্রেডল কার্য বিদ্যমান। উদাহরণস্বরূপ, যখন দুটি স্বাদ থাকে—যেমন বিনামূল্যে এবং অর্থপ্রদান—এবং একটি রিলিজ বিল্ড টাইপ, কাজগুলি নিম্নরূপ:

* `generateFreeReleaseBaselineProfile`
* `generatePaidReleaseBaselineProfile`
* `generateReleaseBaselineProfile`

প্রতি বৈকল্পিক মার্জ আচরণ নির্দিষ্ট করতে, নিম্নলিখিত কোড ব্যবহার করুন:

কোটলিন

baselineProfile {
    variants {
        freeRelease {
            mergeIntoMain = true
        }
    }
}

গ্রোভি

baselineProfile {
    variants {
        freeRelease {
            mergeIntoMain true
        }
    }
}

পূর্ববর্তী উদাহরণে, ফ্ল্যাগটি true সেট করা ভেরিয়েন্টগুলিকে src/main/generated/baselineProfiles এ একত্রিত করা হয়েছে, যেখানে পতাকাটি false সেট করা ভেরিয়েন্টগুলির প্রোফাইলগুলি src/<variant>/generated/baselineProfiles ফোল্ডারে রাখা হয়েছে। src/<variant>/generated/baselineProfiles

ডিফল্টরূপে, mergeIntoMain লাইব্রেরির জন্য true এবং অ্যাপের জন্য false সেট করা আছে।

একটি নতুন রিলিজ একত্রিত করার সময় স্বয়ংক্রিয়ভাবে বেসলাইন প্রোফাইল তৈরি করুন

আপনি ম্যানুয়ালি টাস্ক generateBaselineProfile ব্যবহার করার পরিবর্তে প্রতিটি রিলিজ বিল্ডের সাথে স্বয়ংক্রিয়ভাবে তৈরি করার জন্য বেসলাইন প্রোফাইলগুলি কনফিগার করতে পারেন। স্বয়ংক্রিয় প্রজন্মের সাথে, সর্বাধিক আপডেট হওয়া প্রোফাইলটি রিলিজ বিল্ডে অন্তর্ভুক্ত করা হয়েছে।

রিলিজ বিল্ডের জন্য স্বয়ংক্রিয় প্রজন্ম সক্ষম করতে, automaticGenerationDuringBuild পতাকা ব্যবহার করুন:

কোটলিন

baselineProfile {
    automaticGenerationDuringBuild = true
}

গ্রোভি

baselineProfile {
    automaticGenerationDuringBuild true
}

automaticGenerationDuringBuild পতাকাকে true সেট করা প্রতিটি রিলিজ সমাবেশের জন্য একটি নতুন বেসলাইন প্রোফাইলের প্রজন্মকে ট্রিগার করে। এর মানে হল একটি অ্যাসেম্বল রিলিজ বিল্ড টাস্ক চালানো, যেমন ./gradlew:app:assembleRelease , এছাড়াও :app:generateReleaseBaselineProfile ট্রিগার করে, বেসলাইন প্রোফাইল ইন্সট্রুমেন্টেশন পরীক্ষা শুরু করে এবং বেসলাইন প্রোফাইল বিল্ড তৈরি করে যার উপর তারা চলে। যদিও স্বয়ংক্রিয় জেনারেশন ব্যবহারকারীদের সর্বোত্তম কর্মক্ষমতা সুবিধা পেতে সাহায্য করে, এটি দ্বিগুণ বিল্ড এবং ইন্সট্রুমেন্টেশন পরীক্ষার কারণে বিল্ড টাইমও বাড়ায়।

আপনি নিম্নলিখিত উদাহরণে দেখানো হিসাবে, প্রতি বৈকল্পিক এই আচরণ নির্দিষ্ট করতে পারেন:

কোটলিন

baselineProfile {
    variants {
        freeRelease {
            automaticGenerationDuringBuild = true
        }
    }
}

গ্রোভি

baselineProfile {
    variants {
        freeRelease {
            automaticGenerationDuringBuild true
        }
    }
}

পূর্ববর্তী উদাহরণে, assembleFreeRelease শুরু করার সময় টাস্ক generateFreeReleaseBaselineProfile চলে। এটি সাহায্য করে যখন ব্যবহারকারী চায়, উদাহরণস্বরূপ, ডিস্ট্রিবিউশন বিল্ডের জন্য একটি release যা নির্মাণ করার সময় সর্বদা প্রোফাইল তৈরি করে এবং অভ্যন্তরীণ পরীক্ষার জন্য একটি releaseWithoutProfile বিল্ড।

উৎসে বেসলাইন প্রোফাইল সংরক্ষণ করুন

আপনি অ্যাপ্লিকেশন বা লাইব্রেরি মডিউলের build.gradle.ktssaveInSrc পতাকার মাধ্যমে উৎস ডিরেক্টরিতে বেসলাইন প্রোফাইল সংরক্ষণ করতে পারেন:

  • true : বেসলাইন প্রোফাইল src/<variant>/generated/baselineProfiles এ সংরক্ষিত আছে। এটি আপনাকে আপনার উত্সগুলির সাথে সর্বশেষ উত্পন্ন প্রোফাইল প্রতিশ্রুতিবদ্ধ করতে দেয়৷
  • false : বেসলাইন প্রোফাইল বিল্ড ডিরেক্টরির অন্তর্বর্তী ফাইলগুলিতে সংরক্ষণ করা হয়। এইভাবে, আপনার কোড কমিট করার সময়, আপনি সর্বশেষ জেনারেট করা প্রোফাইল সংরক্ষণ করবেন না।

কোটলিন

baselineProfile {
    saveInSrc = true
}

গ্রোভি

baselineProfile {
    saveInSrc true
}

আপনি ভেরিয়েন্ট প্রতি এই আচরণ নির্দিষ্ট করতে পারেন:

কোটলিন

baselineProfile {
    variants {
        freeRelease {
            saveInSrc = true
        }
    }
}

গ্রোভি

baselineProfile {
    variants {
        freeRelease {
            saveInSrc true
        }
    }
}

ফিল্টার প্রোফাইল নিয়ম

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

ফিল্টার স্পেসিফিকেশন নিম্নলিখিত যে কোনো হতে পারে:

  • নির্দিষ্ট প্যাকেজ এবং সমস্ত সাবপ্যাকেজের সাথে মেলে প্যাকেজের নাম ডবল ওয়াইল্ডকার্ড দিয়ে শেষ। উদাহরণস্বরূপ, com.example.** com.example.method এবং com.example.method.bar সাথে মিলে যায়।
  • প্যাকেজের নাম ওয়াইল্ডকার্ড দিয়ে শেষ হওয়া শুধুমাত্র নির্দিষ্ট প্যাকেজের সাথে মেলে। উদাহরণস্বরূপ, com.example.* com.example.method সাথে মেলে কিন্তু com.example.method.bar সাথে মেলে না।
  • একটি নির্দিষ্ট শ্রেণীর সাথে মেলে ক্লাসের নাম—উদাহরণস্বরূপ, com.example.MyClass

নিম্নলিখিত উদাহরণগুলি কীভাবে নির্দিষ্ট প্যাকেজগুলি অন্তর্ভুক্ত এবং বাদ দিতে হয় তা দেখায়:

কোটলিন

baselineProfile {
    filter {
        include("com.somelibrary.widget.grid.**")
        exclude("com.somelibrary.widget.grid.debug.**")
        include("com.somelibrary.widget.list.**")
        exclude("com.somelibrary.widget.list.debug.**")
        include("com.somelibrary.widget.text.**")
        exclude("com.somelibrary.widget.text.debug.**")
    }
}

গ্রোভি

baselineProfile {
    filter {
        include 'com.somelibrary.widget.grid.**'
        exclude 'com.somelibrary.widget.grid.debug.**'
        include 'com.somelibrary.widget.list.**'
        exclude 'com.somelibrary.widget.list.debug.**'
        include 'com.somelibrary.widget.text.**'
        exclude 'com.somelibrary.widget.text.debug.**'
    }
}

নিম্নরূপ বিভিন্ন ভেরিয়েন্টের জন্য ফিল্টার নিয়ম কাস্টমাইজ করুন:

কোটলিন

// Non-specific filters applied to all the variants.
baselineProfile {
    filter { include("com.myapp.**") }
}

// Flavor-specific filters.
baselineProfile {
    variants {
        free {
            filter {
                include("com.myapp.free.**")
            }
        }
        paid {
            filter {
                include("com.myapp.paid.**")
            }
        }
    }
}

// Build-type-specific filters.
baselineProfile {
    variants {
        release {
            filter {
                include("com.myapp.**")
            }
        }
    }
}

// Variant-specific filters.
baselineProfile {
    variants {
        freeRelease {
            filter {
                include("com.myapp.**")
            }
        }
    }
}

গ্রোভি

// Non-specific filters applied to all the variants.
baselineProfile {
    filter { include 'com.myapp.**' }
}

// Flavor-specific filters.
baselineProfile {
    variants {
        free {
            filter {
                include 'com.myapp.free.**'
            }
        }
        paid {
            filter {
                include 'com.myapp.paid.**'
            }
        }
    }
}

// Build-type specific filters.
baselineProfile {
    variants {
        release {
            filter {
                include 'com.myapp.**'
            }
        }
    }
}

// Variant-specific filters.
baselineProfile {
    variants {
        freeRelease {
            filter {
                include 'com.myapp.**'
            }
        }
    }
}

এছাড়াও আপনি BaselineProfileRule.collect()filterPredicate আর্গুমেন্ট ব্যবহার করে নিয়মগুলি ফিল্টার করতে পারেন, তবে আমরা ফিল্টার করার জন্য Gradle প্লাগইন ব্যবহার করার পরামর্শ দিই কারণ এটি সাবপ্যাকেজগুলি ফিল্টার করার একটি সহজ উপায় এবং সম্পূর্ণ মডিউল কনফিগার করার জন্য একটি একক স্থান প্রদান করে৷

বেঞ্চমার্ক এবং বেসলাইন প্রোফাইল বিল্ড প্রকার কাস্টমাইজ করুন

বেসলাইন প্রোফাইল গ্রেডল প্লাগইন প্রোফাইল তৈরি করতে এবং বেঞ্চমার্ক চালানোর জন্য অতিরিক্ত বিল্ড প্রকার তৈরি করে। এই বিল্ড প্রকারগুলি benchmark এবং nonMinified সাথে উপসর্গযুক্ত। উদাহরণস্বরূপ, release বিল্ড টাইপের জন্য, প্লাগইনটি benchmarkRelease এবং nonMinifiedRelease বিল্ড প্রকার তৈরি করে। এই বিল্ড প্রকারগুলি নির্দিষ্ট ব্যবহারের ক্ষেত্রে স্বয়ংক্রিয়ভাবে কনফিগার করা হয় এবং সাধারণত কোন কাস্টমাইজেশনের প্রয়োজন হয় না। কিন্তু এমন কিছু ক্ষেত্রে রয়েছে যেখানে কিছু কাস্টম বিকল্প প্রয়োগ করা এখনও কার্যকর হতে পারে, উদাহরণস্বরূপ একটি ভিন্ন সাইনিং কনফিগারেশন প্রয়োগ করা।

আপনি বিল্ড টাইপ বৈশিষ্ট্যগুলির একটি উপসেট ব্যবহার করে স্বয়ংক্রিয়ভাবে তৈরি বিল্ড প্রকারগুলি কাস্টমাইজ করতে পারেন; ব্যবহারযোগ্য নয় এমন বৈশিষ্ট্য ওভাররাইড করা হয়। নিম্নলিখিত উদাহরণ দেখায় কিভাবে অতিরিক্ত বিল্ড প্রকার কাস্টমাইজ করা যায় এবং কোন বৈশিষ্ট্যগুলি ওভাররাইড করা হয়:

কোটলিন

android {
    buildTypes {
        release {
            ...
        }
        create("benchmarkRelease") {
            // Customize properties for the `benchmarkRelease` build type here.
            // For example, you can change the signing config (by default
            // it's the same as for the `release` build type).
            signingConfig = signingConfigs.getByName("benchmarkRelease")
        }
        create("nonMinifiedRelease") {
            // Customize properties for the `nonMinifiedRelease` build type here.
            signingConfig = signingConfigs.getByName("nonMinifiedRelease")

            // From Baseline Profile Gradle plugin 1.2.4 and higher, you can't
            // customize the following properties, which are always overridden to
            // avoid breaking Baseline Profile generation:
            //
            // isJniDebuggable = false
            // isDebuggable = false
            // isMinifyEnabled = false
            // isShrinkResources = false
            // isProfileable = true
            // enableAndroidTestCoverage = false
            // enableUnitTestCoverage = false
        }
    }
}

গ্রোভি

android {
    buildTypes {
        release {
            ...
        }
        benchmarkRelease {
            // Customize properties for the `benchmarkRelease` build type here.
            // For example, you can change the signing config (by default it's the
            // same as for the `release` build type.)
            signingConfig = signingConfigs.benchmarkRelease
        }
        nonMinifiedRelease {
            // Customize properties for the `nonMinifiedRelease` build type here.
            signingConfig = signingConfigs.nonMinifiedRelease

            // From Baseline Profile Gradle plugin 1.2.4 and higher, you can't use
            // the following properties, which are always overridden to avoid breaking
            // Baseline Profile generation:
            //
            // isJniDebuggable = false
            // isDebuggable = false
            // isMinifyEnabled = false
            // isShrinkResources = false
            // isProfileable = true
            // enableAndroidTestCoverage = false
            // enableUnitTestCoverage = false       
        }
    }
}

অতিরিক্ত নোট

বেসলাইন প্রোফাইল তৈরি করার সময়, এখানে কিছু অতিরিক্ত জিনিস সম্পর্কে সচেতন হতে হবে:

  • কম্পাইল করা বেসলাইন প্রোফাইল অবশ্যই 1.5 MB এর থেকে ছোট হতে হবে। এটি আপনার উত্স ফাইলের পাঠ্য বিন্যাসে প্রযোজ্য নয়, যা সাধারণত সংকলনের আগে অনেক বড় হয়। APK-এর জন্য assets/dexopt/baseline.prof বা AAB-এর জন্য BUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof এর অধীনে আউটপুট আর্টিফ্যাক্টে এটিকে সনাক্ত করে আপনার বাইনারি বেসলাইন প্রোফাইলের আকার যাচাই করুন।

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

কোডল্যাব

কর্মক্ষমতা পরিমাপ করতে ম্যাক্রোবেঞ্চমার্কিং এ ডুব দিন।
একটি অ্যান্ড্রয়েড অ্যাপের জন্য তৈরি একটি কাস্টম বেসলাইন প্রোফাইল তৈরি করুন এবং এর কার্যকারিতা যাচাই করুন।