ম্যানুয়াল প্রচেষ্টা কমাতে এবং সাধারণ স্কেলেবিলিটি বাড়াতে আমরা জেটপ্যাক ম্যাক্রোবেঞ্চমার্ক লাইব্রেরি ব্যবহার করে প্রোফাইল নিয়ম স্বয়ংক্রিয়ভাবে তৈরি করার পরামর্শ দিচ্ছি। তবে, আপনার অ্যাপে ম্যানুয়ালি প্রোফাইল নিয়ম তৈরি এবং পরিমাপ করা সম্ভব।
প্রোফাইলের নিয়মগুলি ম্যানুয়ালি সংজ্ঞায়িত করুন
 আপনি src/main ডিরেক্টরিতে অবস্থিত baseline-prof.txt নামক একটি ফাইল তৈরি করে একটি অ্যাপ বা লাইব্রেরি মডিউলে প্রোফাইল নিয়মগুলি ম্যানুয়ালি সংজ্ঞায়িত করতে পারেন। এটি একই ফোল্ডার যেখানে AndroidManifest.xml ফাইল রয়েছে।
ফাইলটি প্রতি লাইনে একটি করে নিয়ম নির্দিষ্ট করে। প্রতিটি নিয়ম অ্যাপ বা লাইব্রেরিতে মেথড বা ক্লাসের সাথে মিলের জন্য একটি প্যাটার্ন উপস্থাপন করে যা অপ্টিমাইজ করা প্রয়োজন।
 এই নিয়মগুলির সিনট্যাক্স হল adb shell profman --dump-classes-and-methods ব্যবহার করার সময় মানব-পঠনযোগ্য ART প্রোফাইল ফর্ম্যাট (HRF) এর একটি সুপারসেট। সিনট্যাক্সটি বর্ণনাকারী এবং স্বাক্ষরের সিনট্যাক্সের অনুরূপ, তবে নিয়ম লেখার প্রক্রিয়াটি সহজ করার জন্য ওয়াইল্ডকার্ড ব্যবহার করার অনুমতি দেয়।
নিম্নলিখিত উদাহরণে জেটপ্যাক কম্পোজ লাইব্রেরিতে অন্তর্ভুক্ত কয়েকটি বেসলাইন প্রোফাইল নিয়ম দেখানো হয়েছে:
HSPLandroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I
HLandroidx/compose/runtime/ComposerImpl;->validateNodeExpected()V
PLandroidx/compose/runtime/CompositionImpl;->applyChanges()V
HLandroidx/compose/runtime/ComposerKt;->findLocation(Ljava/util/List;I)I
Landroidx/compose/runtime/ComposerImpl;
আপনি এই নমুনা কম্পাইলার এক্সপ্লোরার প্রকল্পে প্রোফাইল নিয়ম পরিবর্তন করার চেষ্টা করতে পারেন। মনে রাখবেন কম্পাইলার এক্সপ্লোরার শুধুমাত্র মানব-পঠনযোগ্য ART প্রোফাইল ফর্ম্যাট (HRF) সমর্থন করে, তাই ওয়াইল্ডকার্ড সমর্থিত নয়।
নিয়ম বাক্য গঠন
এই নিয়মগুলি পদ্ধতি বা ক্লাসগুলিকে লক্ষ্য করার জন্য দুটি রূপের একটি গ্রহণ করে:
[FLAGS][CLASS_DESCRIPTOR]->[METHOD_SIGNATURE]
একটি ক্লাস নিয়ম নিম্নলিখিত প্যাটার্ন ব্যবহার করে:
[CLASS_DESCRIPTOR]
বিস্তারিত বর্ণনার জন্য নিম্নলিখিত টেবিলটি দেখুন:
| বাক্য গঠন | বিবরণ | 
|---|---|
 FLAGS |  স্টার্টআপের ধরণ অনুসারে এই পদ্ধতিটিকে Hot , Startup , নাকি Post Startup হিসেবে চিহ্নিত করতে হবে তা নির্দেশ করার জন্য H , S এবং P অক্ষরগুলির মধ্যে এক বা একাধিক প্রতিনিধিত্ব করে।H ফ্ল্যাগ সহ একটি পদ্ধতি নির্দেশ করে যে এটি একটি "হট" পদ্ধতি, অর্থাৎ অ্যাপের জীবদ্দশায় এটি বহুবার বলা হয়েছে।S পতাকা সহ একটি পদ্ধতি নির্দেশ করে যে এটি স্টার্টআপের সময় বলা একটি পদ্ধতি।P পতাকা সহ একটি পদ্ধতি নির্দেশ করে যে এটি একটি পদ্ধতি যা স্টার্টআপের পরে বলা হয়।এই ফাইলে উপস্থিত একটি ক্লাস ইঙ্গিত দেয় যে এটি স্টার্টআপের সময় ব্যবহৃত হয় এবং ক্লাস লোডিংয়ের খরচ এড়াতে হিপে আগে থেকে বরাদ্দ করা আবশ্যক। ART কম্পাইলার বিভিন্ন অপ্টিমাইজেশন কৌশল ব্যবহার করে, যেমন এই পদ্ধতিগুলির AOT সংকলন এবং জেনারেট করা AOT ফাইলে লেআউট অপ্টিমাইজেশন সম্পাদন করা।  | 
 CLASS_DESCRIPTOR |  লক্ষ্যবস্তু পদ্ধতির ক্লাসের জন্য বর্ণনাকারী। উদাহরণস্বরূপ, androidx.compose.runtime.SlotTable Landroidx/compose/runtime/SlotTable; এর একটি বর্ণনাকারী রয়েছে। Dalvik Executable (DEX) ফর্ম্যাট অনুসারে এখানে L আগে থেকে সংযুক্ত করা হয়েছে। | 
 METHOD_SIGNATURE |  পদ্ধতির স্বাক্ষর, যার মধ্যে রয়েছে নাম, প্যারামিটারের ধরণ এবং পদ্ধতির রিটার্নের ধরণ। উদাহরণস্বরূপ:// LayoutNode.ktfun isPlaced():Boolean {// ...}LayoutNode এ স্বাক্ষরটি isPlaced()Z আছে। | 
এই প্যাটার্নগুলিতে ওয়াইল্ডকার্ড থাকতে পারে যাতে একটি একক নিয়ম একাধিক পদ্ধতি বা ক্লাসকে অন্তর্ভুক্ত করে। অ্যান্ড্রয়েড স্টুডিওতে নিয়ম সিনট্যাক্স দিয়ে লেখার সময় নির্দেশিত সহায়তার জন্য, অ্যান্ড্রয়েড বেসলাইন প্রোফাইল প্লাগইনটি দেখুন।
একটি ওয়াইল্ডকার্ড নিয়মের উদাহরণ এরকম কিছু দেখতে পারে:
HSPLandroidx/compose/ui/layout/**->**(**)**
বেসলাইন প্রোফাইল নিয়মে সমর্থিত প্রকারগুলি
বেসলাইন প্রোফাইল নিয়মগুলি নিম্নলিখিত প্রকারগুলিকে সমর্থন করে। এই প্রকারগুলির বিশদ বিবরণের জন্য, ডালভিক এক্সিকিউটেবল (DEX) ফর্ম্যাটটি দেখুন।
| চরিত্র | আদর্শ | বিবরণ | 
|---|---|---|
 B | বাইট | স্বাক্ষরিত বাইট | 
 C | অক্ষর | UTF-16 এ এনকোড করা ইউনিকোড অক্ষর কোড পয়েন্ট | 
 D | দ্বিগুণ | দ্বিগুণ-নির্ভুল ভাসমান বিন্দু মান | 
 F | ভাসমান | একক-নির্ভুল ভাসমান বিন্দু মান | 
 I | int-এর মাধ্যমে | পূর্ণসংখ্যা | 
 J | দীর্ঘ | দীর্ঘ পূর্ণসংখ্যা | 
 S | ছোট | স্বাক্ষরিত সংক্ষিপ্ত | 
 V | শূন্য | শূন্যতা | 
 Z | বুলিয়ান | সত্য অথবা মিথ্যা | 
 L (শ্রেণীর নাম) | রেফারেন্স | একটি ক্লাস নামের একটি উদাহরণ | 
অতিরিক্তভাবে, লাইব্রেরিগুলি AAR আর্টিফ্যাক্টগুলিতে প্যাকেজ করা নিয়মগুলি সংজ্ঞায়িত করতে পারে। যখন আপনি এই আর্টিফ্যাক্টগুলি অন্তর্ভুক্ত করার জন্য একটি APK তৈরি করেন, তখন নিয়মগুলি একত্রিত করা হয়—যেমন ম্যানিফেস্ট মার্জিং করা হয়—এবং APK-এর জন্য নির্দিষ্ট একটি কম্প্যাক্ট বাইনারি ART প্রোফাইলে কম্পাইল করা হয়।
 যখন Android 9 (API লেভেল 28) অথবা ProfileInstaller ব্যবহার করার সময় Android 7 (API লেভেল 24) এ ইনস্টলের সময় AOT অ্যাপের একটি নির্দিষ্ট সাবসেট কম্পাইল করার জন্য ডিভাইসে APK ব্যবহার করা হয়, তখন ART এই প্রোফাইলটি ব্যবহার করে।
বেসলাইন প্রোফাইল ম্যানুয়ালি সংগ্রহ করুন
আপনি ম্যাক্রোবেঞ্চমার্ক লাইব্রেরি সেট আপ না করেই ম্যানুয়ালি একটি বেসলাইন প্রোফাইল তৈরি করতে পারেন এবং আপনার গুরুত্বপূর্ণ ব্যবহারকারীর ভ্রমণের UI অটোমেশন তৈরি করতে পারেন। যদিও আমরা ম্যাক্রোবেঞ্চমার্ক ব্যবহার করার পরামর্শ দিচ্ছি, এটি সবসময় সম্ভব নাও হতে পারে। উদাহরণস্বরূপ, যদি আপনি একটি নন-গ্রেডল বিল্ড সিস্টেম ব্যবহার করেন, তাহলে আপনি বেসলাইন প্রোফাইল গ্রেডল প্লাগইন ব্যবহার করতে পারবেন না। এই ধরনের ক্ষেত্রে, আপনি ম্যানুয়ালি বেসলাইন প্রোফাইল নিয়ম সংগ্রহ করতে পারেন। আপনি যদি API 34 এবং উচ্চতর সংস্করণ চালিত একটি ডিভাইস বা এমুলেটর ব্যবহার করেন তবে এটি অনেক সহজ। যদিও এটি এখনও নিম্ন API স্তরের সাথে সম্ভব, এর জন্য রুট অ্যাক্সেস প্রয়োজন এবং আপনাকে AOSP চিত্র চালিত একটি এমুলেটর ব্যবহার করতে হবে। আপনি নিম্নলিখিতগুলি করে সরাসরি নিয়ম সংগ্রহ করতে পারেন:
- একটি পরীক্ষামূলক ডিভাইসে আপনার অ্যাপের একটি রিলিজ ভার্সন ইনস্টল করুন। অ্যাপ বিল্ডের ধরণটি R8-অপ্টিমাইজ করা যাবে না এবং বিল্ড সিস্টেম দ্বারা ব্যবহার করা যেতে পারে এমন কোনও প্রোফাইল ক্যাপচার করার জন্য ডিবাগযোগ্য হওয়া উচিত নয় ।
 -  প্রোফাইল ইনস্টলেশন অক্ষম করুন এবং অ্যাপটি বন্ধ করুন। যদি আপনার APK Jetpack প্রোফাইল ইনস্টলার লাইব্রেরির উপর নির্ভরশীল থাকে, তাহলে লাইব্রেরি আপনার APK প্রথম লঞ্চের সাথে সাথে একটি প্রোফাইল বুটস্ট্র্যাপ করে। এটি প্রোফাইল তৈরির প্রক্রিয়ায় হস্তক্ষেপ করতে পারে, তাই নিম্নলিখিত কমান্ড দিয়ে এটি অক্ষম করুন:
adb shell am broadcast -a androidx.profileinstaller.action.SKIP_FILE WRITE_SKIP_FILE $PACKAGE_NAME/androidx.profileinstaller.ProfileInstallReceiver
 অ্যাপ সংকলন রিসেট করুন এবং যেকোনো প্রোফাইল সাফ করুন।
API 34 এবং উচ্চতর
adb shell cmd package compile -f -m verify $PACKAGE_NAME adb shell pm art clear-app-profiles $PACKAGE_NAME
API 33 এবং তার নিচের সংস্করণ
adb root adb shell cmd package compile --reset $PACKAGE_NAME
অ্যাপটি চালান এবং আপনার গুরুত্বপূর্ণ ব্যবহারকারীর ভ্রমণের মাধ্যমে ম্যানুয়ালি নেভিগেট করুন যার জন্য আপনি একটি প্রোফাইল সংগ্রহ করতে চান।
প্রোফাইলগুলি স্থিতিশীল হতে কমপক্ষে পাঁচ সেকেন্ড অপেক্ষা করুন।
সংরক্ষণের কাজটি সম্পাদন করুন এবং সংরক্ষণ সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন। যদি আপনার APK Jetpack প্রোফাইল ইনস্টলার লাইব্রেরির উপর নির্ভরশীল থাকে, তাহলে প্রোফাইলগুলি ডাম্প করার জন্য এটি ব্যবহার করুন:
 যদি আপনি প্রোফাইল ইনস্টলার ব্যবহার না করেন, তাহলে নিম্নলিখিত কমান্ড ব্যবহার করে প্রোফাইলগুলি ম্যানুয়ালি একটি এমুলেটরে ডাম্প করুন:adb shell am broadcast -a androidx.profileinstaller.action.SAVE_PROFILE $PACKAGE_NAME/androidx.profileinstaller.ProfileInstallReceiver sleep 1 # wait 1 second adb shell am force-stop $PACKAGE_NAME
adb root adb shell killall -s SIGUSR1 $PACKAGE_NAME sleep 1 # wait 1 second adb shell am force-stop $PACKAGE_NAME
তৈরি হওয়া বাইনারি প্রোফাইলগুলিকে টেক্সটে রূপান্তর করুন:
API 34 এবং উচ্চতর
adb shell pm dump-profiles --dump-classes-and-methods $PACKAGE_NAME
API 33 এবং তার নিচের সংস্করণ
একটি রেফারেন্স প্রোফাইল নাকি বর্তমান প্রোফাইল তৈরি করা হয়েছে তা নির্ধারণ করুন। একটি রেফারেন্স প্রোফাইল নিম্নলিখিত স্থানে অবস্থিত: একটি বর্তমান প্রোফাইল নিম্নলিখিত স্থানে অবস্থিত:/data/misc/profiles/ref/$$PACKAGE_NAME/primary.prof
 APK এর অবস্থান নির্ধারণ করুন:/data/misc/profiles/cur/0/$PACKAGE_NAME/primary.prof
 রূপান্তরটি সম্পাদন করুন:adb root adb shell pm path $PACKAGE_NAME
adb root adb shell profman --dump-classes-and-methods --profile-file=$PROFILE_PATH --apk=$APK_PATH > /data/misc/profman/$PACKAGE_NAME-primary.prof.txt
ডিভাইস থেকে ডাম্প করা প্রোফাইল পুনরুদ্ধার করতে
adbব্যবহার করুন:adb pull /data/misc/profman/$PACKAGE_NAME-primary.prof.txt PATH_TO_APP_MODULE/src/main/
এটি জেনারেট করা প্রোফাইল নিয়মগুলি টেনে আনে এবং আপনার অ্যাপ মডিউলে ইনস্টল করে। পরের বার যখন আপনি অ্যাপটি তৈরি করবেন, তখন বেসলাইন প্রোফাইল অন্তর্ভুক্ত করা হবে। ইনস্টলেশন সমস্যাগুলির ধাপগুলি অনুসরণ করে এটি যাচাই করুন।
অ্যাপের উন্নতি ম্যানুয়ালি পরিমাপ করুন
আমরা আপনাকে বেঞ্চমার্কিংয়ের মাধ্যমে অ্যাপের উন্নতি পরিমাপ করার জন্য দৃঢ়ভাবে সুপারিশ করছি। তবে, যদি আপনি ম্যানুয়ালি উন্নতি পরিমাপ করতে চান, তাহলে রেফারেন্সের জন্য অপ্টিমাইজ করা অ্যাপ স্টার্টআপ পরিমাপ করে শুরু করতে পারেন।
PACKAGE_NAME=com.example.app# Force Stop App adb shell am force-stop $PACKAGE_NAME # Reset compiled state adb shell cmd package compile --reset $PACKAGE_NAME# Measure App startup # This corresponds to `Time to initial display` metric. adb shell am start-activity -W -n $PACKAGE_NAME/.ExampleActivity \ | grep "TotalTime"
এরপর, বেসলাইন প্রোফাইলটি সাইডলোড করুন।
# Unzip the Release APK first. unzip release.apk# Create a ZIP archive. # The name should match the name of the APK. # Copy `baseline.prof{m}` and rename it `primary.prof{m}`. cp assets/dexopt/baseline.prof primary.prof cp assets/dexopt/baseline.profm primary.profm# Create an archive. zip -r release.dm primary.prof primary.profm# Confirm that release.dm only contains the two profile files: unzip -l release.dm # Archive: release.dm # Length Date Time Name # --------- ---------- ----- ---- # 3885 1980-12-31 17:01 primary.prof # 1024 1980-12-31 17:01 primary.profm # --------- ------- # 2 files# Install APK + Profile together. adb install-multiple release.apk release.dm
ইনস্টলেশনের সময় প্যাকেজটি অপ্টিমাইজ করা হয়েছে কিনা তা যাচাই করতে, নিম্নলিখিত কমান্ডটি চালান:
# Check dexopt state.
adb shell dumpsys package dexopt | grep -A 1 $PACKAGE_NAMEআউটপুটে অবশ্যই উল্লেখ করতে হবে যে প্যাকেজটি কম্পাইল করা হয়েছে:
[com.example.app]
  path: /data/app/~~YvNxUxuP2e5xA6EGtM5i9A==/com.example.app-zQ0tkJN8tDrEZXTlrDUSBg==/base.apk
  arm64: [status=speed-profile] [reason=install-dm]
এখন, আপনি আগের মতোই অ্যাপ স্টার্টআপের কর্মক্ষমতা পরিমাপ করতে পারবেন কিন্তু কম্পাইল করা অবস্থা রিসেট না করেই। নিশ্চিত করুন যে আপনি প্যাকেজের জন্য কম্পাইল করা অবস্থা রিসেট করবেন না।
# Force stop app adb shell am force-stop $PACKAGE_NAME# Measure app startup adb shell am start-activity -W -n $PACKAGE_NAME/.ExampleActivity \ | grep "TotalTime"
বেসলাইন প্রোফাইল এবং প্রোফাইল
এই বিভাগে বর্ণনা করা হয়েছে যে বেসলাইন প্রোফাইলের একটি কমপ্যাক্ট বাইনারি সংস্করণ তৈরি করার সময় প্রোজেন টুল কী করে।
Profgen-cli প্রোফাইল সংকলন, আত্মদর্শন এবং ART প্রোফাইল স্থানান্তরে সাহায্য করে, তাই লক্ষ্য SDK সংস্করণ নির্বিশেষে এগুলি অ্যান্ড্রয়েড-চালিত ডিভাইসগুলিতে ইনস্টল করা যেতে পারে।
 Profgen-cli হল একটি CLI যা একটি বেসলাইন প্রোফাইলের HRF কে তার কম্পাইল করা ফর্ম্যাটে কম্পাইল করে। CLI অ্যান্ড্রয়েড SDK এর অংশ হিসেবে cmdline-tools রিপোজিটরিতেও পাঠানো হয়।
 এই বৈশিষ্ট্যগুলি studio-main শাখায় উপলব্ধ: 
➜ ../cmdline-tools/latest/bin
apkanalyzer
avdmanager
lint
profgen
retrace
screenshot2
sdkmanager
Profgen-cli দিয়ে কমপ্যাক্ট বাইনারি প্রোফাইল তৈরি করুন
 Profgen-cli এর সাথে উপলব্ধ কমান্ডগুলি হল bin , validate , এবং dumpProfile । উপলব্ধ কমান্ডগুলি দেখতে, profgen --help ব্যবহার করুন : 
➜  profgen --help
Usage: profgen options_list
Subcommands:
    bin - Generate Binary Profile
    validate - Validate Profile
    dumpProfile - Dump a binary profile to a HRF
Options:
    --help, -h -> Usage info
কমপ্যাক্ট বাইনারি প্রোফাইল তৈরি করতে bin কমান্ড ব্যবহার করুন। নিম্নলিখিতটি একটি উদাহরণ ইনভোকেশন: 
profgen bin ./baseline-prof.txt \
  --apk ./release.apk \
  --map ./obfuscation-map.txt \
  --profile-format v0_1_0_p \
  --output ./baseline.prof \
উপলব্ধ বিকল্পগুলি দেখতে, profgen bin options_list ব্যবহার করুন: 
Usage: profgen bin options_list
Arguments:
    profile -> File path to Human Readable profile { String }
Options:
    --apk, -a -> File path to apk (always required) { String }
    --output, -o -> File path to generated binary profile (always required)
    --map, -m -> File path to name obfuscation map { String }
    --output-meta, -om -> File path to generated metadata output { String }
    --profile-format, -pf [V0_1_0_P] -> The ART profile format version
      { Value should be one of [
         v0_1_5_s, v0_1_0_p, v0_0_9_omr1, v0_0_5_o, v0_0_1_n
        ]
      }
    --help, -h -> Usage info
প্রথম আর্গুমেন্টটি baseline-prof.txt HRF-এর পথকে প্রতিনিধিত্ব করে।
 Profgen-cli-এর APK-এর রিলিজ বিল্ডের পথ এবং R8 বা Proguard ব্যবহার করার সময় APK-কে অস্পষ্ট করার জন্য ব্যবহৃত একটি অস্পষ্ট মানচিত্রেরও প্রয়োজন। এইভাবে, কম্পাইল করা প্রোফাইল তৈরি করার সময় profgen HRF-এর সোর্স প্রতীকগুলিকে তাদের সংশ্লিষ্ট অস্পষ্ট নামে অনুবাদ করতে পারে।
 যেহেতু ART প্রোফাইল ফরম্যাটগুলি ফরোয়ার্ড বা ব্যাকওয়ার্ড সামঞ্জস্যপূর্ণ নয়, তাই একটি প্রোফাইল ফরম্যাট প্রদান করুন যাতে profgen প্যাকেজ প্রোফাইল মেটাডেটা ( profm ) তৈরি হয় যা আপনি প্রয়োজনে একটি ART প্রোফাইল ফরম্যাটকে অন্যটিতে ট্রান্সকোড করতে ব্যবহার করতে পারেন।
প্রোফাইল ফর্ম্যাট এবং প্ল্যাটফর্ম সংস্করণ
প্রোফাইল ফর্ম্যাট নির্বাচন করার সময় নিম্নলিখিত বিকল্পগুলি উপলব্ধ:
| প্রোফাইল ফর্ম্যাট | প্ল্যাটফর্ম সংস্করণ | API স্তর | 
|---|---|---|
| v0_1_5_সেকেন্ড | অ্যান্ড্রয়েড এস+ | ৩১+ | 
| v0_1_0_p সম্পর্কে | অ্যান্ড্রয়েড পি, কিউ এবং আর | ২৮-৩০ | 
| v0_0_9_omr1 সম্পর্কে | অ্যান্ড্রয়েড ও এমআর১ | ২৭ | 
| v0_0_5_o সম্পর্কে | অ্যান্ড্রয়েড ও | ২৬ | 
| v0_0_1_n সম্পর্কে | অ্যান্ড্রয়েড এন | ২৪-২৫ | 
 APK-এর assets বা dexopt ফোল্ডারে baseline.prof এবং baseline.profm আউটপুট ফাইলগুলি অনুলিপি করুন।
অস্পষ্ট মানচিত্র
 যদি HRF সোর্স প্রতীক ব্যবহার করে তবেই আপনাকে অস্পষ্ট মানচিত্র প্রদান করতে হবে। যদি HRF এমন একটি রিলিজ বিল্ড থেকে তৈরি হয় যা ইতিমধ্যেই অস্পষ্ট এবং কোনও ম্যাপিংয়ের প্রয়োজন হয় না, তাহলে আপনি সেই বিকল্পটি উপেক্ষা করতে পারেন এবং আউটপুটগুলি assets বা dexopt ফোল্ডারে অনুলিপি করতে পারেন।
বেসলাইন প্রোফাইলের ঐতিহ্যবাহী ইনস্টলেশন
বেসলাইন প্রোফাইলগুলি ঐতিহ্যগতভাবে দুটি উপায়ের একটিতে একটি ডিভাইসে সরবরাহ করা হয়।
 DexMetadata দিয়ে install-multiple ব্যবহার করুন
API 28 এবং তার পরবর্তী সংস্করণে চলমান ডিভাইসগুলিতে, Play ক্লায়েন্ট ইনস্টল করা APK সংস্করণের জন্য APK এবং DexMetadata (DM) পেলোড ডাউনলোড করে। DM-তে প্রোফাইল তথ্য থাকে যা ডিভাইসের প্যাকেজ ম্যানেজারকে পাঠানো হয়।
APK এবং DM একটি একক ইনস্টল সেশনের অংশ হিসেবে ইনস্টল করা হয় যেমন:
 adb install-multiple base.apk base.dm
জেটপ্যাক প্রোফাইল ইনস্টলার
 API লেভেল ২৯ এবং তার পরবর্তী সংস্করণে চলমান ডিভাইসগুলিতে, Jetpack ProfileInstaller লাইব্রেরি assets প্যাকেজ করা প্রোফাইল ইনস্টল করার জন্য একটি বিকল্প ব্যবস্থা প্রদান করে অথবা ডিভাইসে APK ইনস্টল করার পরে dexopt । ProfileInstaller ProfileInstallReceiver অথবা সরাসরি অ্যাপ দ্বারা আহ্বান করা হয়।
 প্রোফাইলইনস্টলার লাইব্রেরি টার্গেট ডিভাইস SDK সংস্করণের উপর ভিত্তি করে প্রোফাইলটি ট্রান্সকোড করে এবং প্রোফাইলটি ডিভাইসের cur ডিরেক্টরিতে (ডিভাইসের ART প্রোফাইলের জন্য একটি প্যাকেজ-নির্দিষ্ট স্টেজিং ডিরেক্টরি) অনুলিপি করে।
 ডিভাইসটি নিষ্ক্রিয় হয়ে গেলে, প্রোফাইলটি ডিভাইসে bg-dexopt নামক একটি প্রক্রিয়ার মাধ্যমে সংগ্রহ করা হয়।
একটি বেসলাইন প্রোফাইল সাইডলোড করুন
এই বিভাগে বর্ণনা করা হয়েছে কিভাবে একটি APK দিয়ে বেসলাইন প্রোফাইল ইনস্টল করতে হয়।
 androidx.profileinstaller দিয়ে সম্প্রচার করুন
API 24 এবং তার পরবর্তী সংস্করণে চলমান ডিভাইসগুলিতে, আপনি প্রোফাইল ইনস্টল করার জন্য একটি কমান্ড সম্প্রচার করতে পারেন:
# Broadcast the install profile command - moves binary profile from assets
#     to a location where ART uses it for the next compile.
#     When successful, the following command prints "1":
adb shell am broadcast \
    -a androidx.profileinstaller.action.INSTALL_PROFILE \
    <pkg>/androidx.profileinstaller.ProfileInstallReceiver
# Kill the process
am force-stop <pkg>
# Compile the package based on profile
adb shell cmd package compile -f -m speed-profile <pkg>
বেসলাইন প্রোফাইল সহ বেশিরভাগ APK-তে ProfileInstaller উপস্থিত থাকে না—যা Play-তে 450K অ্যাপের প্রায় 77K-তে থাকে—যদিও এটি কার্যকরভাবে Compose ব্যবহার করে প্রতিটি APK-তে উপস্থিত থাকে। এর কারণ হল লাইব্রেরিগুলি ProfileInstaller-এর উপর নির্ভরতা ঘোষণা না করেই প্রোফাইল সরবরাহ করতে পারে। Jetpack থেকে শুরু করে প্রতিটি লাইব্রেরিতে একটি প্রোফাইল সহ একটি নির্ভরতা যোগ করা প্রযোজ্য।
 profgen অথবা DexMetaData দিয়ে install-multiple ব্যবহার করুন
API 28 এবং তার পরবর্তী সংস্করণে চলমান ডিভাইসগুলিতে, আপনি অ্যাপে ProfileInstaller লাইব্রেরি না রেখেই একটি Baseline Profile সাইডলোড করতে পারেন।
এটি করার জন্য, Profgen-cli ব্যবহার করুন:
profgen extractProfile \
        --apk app-release.apk \
        --output-dex-metadata app-release.dm \
        --profile-format V0_1_5_S # Select based on device and the preceding table.
# Install APK and the profile together
adb install-multiple appname-release.apk appname-release.dm
APK স্প্লিট সমর্থন করার জন্য, প্রতি APK-তে একবার পূর্ববর্তী এক্সট্র্যাক্ট প্রোফাইল ধাপগুলি চালান। ইনস্টল করার সময়, প্রতিটি APK এবং সংশ্লিষ্ট .dm ফাইলটি পাস করুন, নিশ্চিত করুন যে APK এবং .dm নামগুলি মিলছে: 
adb install-multiple appname-base.apk appname-base.dm \
appname-split1.apk appname-split1.dm
যাচাইকরণ
প্রোফাইলটি সঠিকভাবে ইনস্টল করা আছে কিনা তা যাচাই করতে, আপনি "ম্যানুয়ালি মেজার অ্যাপ উন্নতি" থেকে ধাপগুলি ব্যবহার করতে পারেন।
একটি বাইনারি প্রোফাইলের বিষয়বস্তু ডাম্প করুন
 একটি বেসলাইন প্রোফাইলের একটি কমপ্যাক্ট বাইনারি সংস্করণের বিষয়বস্তু আত্মসমীক্ষণ করতে, Profgen-cli dumpProfile বিকল্পটি ব্যবহার করুন: 
Usage: profgen dumpProfile options_list
Options:
    --profile, -p -> File path to the binary profile (always required)
    --apk, -a -> File path to apk (always required) { String }
    --map, -m -> File path to name obfuscation map { String }
    --strict, -s [true] -> Strict mode
    --output, -o -> File path for the HRF (always required) { String }
    --help, -h -> Usage info
dumpProfile APK প্রয়োজন কারণ কমপ্যাক্ট বাইনারি উপস্থাপনা শুধুমাত্র DEX অফসেট সংরক্ষণ করে এবং তাই, ক্লাস এবং পদ্ধতির নাম পুনর্গঠনের জন্য তাদের প্রয়োজন।
 ডিফল্টরূপে স্ট্রিক মোড সক্রিয় থাকে এবং এটি APK-তে থাকা DEX ফাইলগুলির সাথে প্রোফাইলের সামঞ্জস্যতা পরীক্ষা করে। যদি আপনি অন্য কোনও টুল দ্বারা তৈরি প্রোফাইলগুলি ডিবাগ করার চেষ্টা করেন, তাহলে আপনার সামঞ্জস্যতা ব্যর্থতা হতে পারে যা আপনাকে তদন্তের জন্য ডাম্প করতে বাধা দেয়। এই ধরনের ক্ষেত্রে, আপনি --strict false দিয়ে স্ট্রিক মোড অক্ষম করতে পারেন। তবে, বেশিরভাগ ক্ষেত্রে আপনার স্ট্রিক মোড সক্রিয় রাখা উচিত।
একটি অস্পষ্ট মানচিত্র ঐচ্ছিক; যখন সরবরাহ করা হয়, তখন এটি ব্যবহারের সুবিধার জন্য অস্পষ্ট প্রতীকগুলিকে তাদের মানুষের পাঠযোগ্য সংস্করণে পুনঃম্যাপ করতে সাহায্য করে।
{% অক্ষরে অক্ষরে %}আপনার জন্য প্রস্তাবিত
- দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলে লিঙ্ক টেক্সট প্রদর্শিত হয়।
 - SQLite কর্মক্ষমতার জন্য সেরা অনুশীলন
 - বেসলাইন প্রোফাইল {:#baseline-profiles}
 - আটকে থাকা আংশিক জাগরণ তালা