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

ম্যানুয়াল প্রচেষ্টা কমাতে এবং সাধারণ স্কেলেবিলিটি বাড়ানোর জন্য Jetpack Macrobenchmark লাইব্রেরি ব্যবহার করে আমরা প্রোফাইল নিয়মগুলি স্বয়ংক্রিয়ভাবে তৈরি করার সুপারিশ করি। যাইহোক, আপনার অ্যাপে ম্যানুয়ালি প্রোফাইল নিয়ম তৈরি এবং পরিমাপ করা সম্ভব।

প্রোফাইল নিয়ম ম্যানুয়ালি সংজ্ঞায়িত করুন

আপনি 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 পতাকা সহ একটি পদ্ধতি নির্দেশ করে যে এটি একটি পদ্ধতি যা স্টার্টআপের পরে বলা হয়।

এই ফাইলে উপস্থিত একটি ক্লাস নির্দেশ করে যে এটি স্টার্টআপের সময় ব্যবহার করা হয় এবং ক্লাস লোডিং এর খরচ এড়াতে হিপে আগে থেকে বরাদ্দ করা আবশ্যক। এআরটি কম্পাইলার বিভিন্ন অপ্টিমাইজেশান কৌশল নিযুক্ত করে, যেমন এই পদ্ধতিগুলির AOT সংকলন এবং জেনারেট করা AOT ফাইলে লেআউট অপ্টিমাইজেশান সম্পাদন করা।
CLASS_DESCRIPTOR লক্ষ্যযুক্ত পদ্ধতির ক্লাসের জন্য বর্ণনাকারী। উদাহরণস্বরূপ, androidx.compose.runtime.SlotTable Landroidx/compose/runtime/SlotTable; . L এখানে ডালভিক এক্সিকিউটেবল (DEX) বিন্যাস অনুসারে প্রিপেন্ড করা হয়েছে।
METHOD_SIGNATURE নাম, প্যারামিটারের ধরন এবং পদ্ধতির রিটার্ন প্রকার সহ পদ্ধতির স্বাক্ষর। যেমন:

// LayoutNode.kt

fun isPlaced():Boolean {
// ...
}

LayoutNode এ স্বাক্ষর isPlaced()Z আছে।

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

ওয়াইল্ডকার্ড নিয়মের একটি উদাহরণ এইরকম দেখতে পারে:

HSPLandroidx/compose/ui/layout/**->**(**)**

বেসলাইন প্রোফাইল নিয়মে সমর্থিত প্রকার

বেসলাইন প্রোফাইল নিয়ম নিম্নলিখিত ধরনের সমর্থন করে. এই ধরনের বিশদ বিবরণের জন্য, Dalvik Executable (DEX) বিন্যাস দেখুন।

চরিত্র টাইপ বর্ণনা
B বাইট স্বাক্ষরিত বাইট
C চর ইউনিকোড অক্ষর কোড পয়েন্ট UTF-16 এ এনকোড করা হয়েছে
D দ্বিগুণ ডাবল-নির্ভুল ফ্লোটিং পয়েন্ট মান
F ভাসা একক-নির্ভুল ফ্লোটিং পয়েন্ট মান
I int পূর্ণসংখ্যা
J দীর্ঘ দীর্ঘ পূর্ণসংখ্যা
S সংক্ষিপ্ত সংক্ষিপ্ত স্বাক্ষর করেছেন
V অকার্যকর অকার্যকর
Z বুলিয়ান সত্য বা মিথ্যা
L (শ্রেণীর নাম) রেফারেন্স একটি ক্লাস নামের একটি উদাহরণ

উপরন্তু, লাইব্রেরিগুলি AAR আর্টিফ্যাক্টগুলিতে প্যাকেজ করা নিয়মগুলি সংজ্ঞায়িত করতে পারে। আপনি যখন এই আর্টিফ্যাক্টগুলিকে অন্তর্ভুক্ত করার জন্য একটি APK তৈরি করেন, তখন নিয়মগুলিকে একত্রে একত্রিত করা হয়—যেভাবে ম্যানিফেস্ট মার্জিং করা হয়—এবং APK-এর জন্য নির্দিষ্ট একটি কমপ্যাক্ট বাইনারি এআরটি প্রোফাইলে কম্পাইল করা হয়।

ProfileInstaller ব্যবহার করার সময় Android 9 (API লেভেল 28) বা Android 7 (API লেভেল 24) এ ইনস্টল-টাইমে অ্যাপের একটি নির্দিষ্ট উপসেট AOT কম্পাইল করার জন্য ডিভাইসগুলিতে APK ব্যবহার করা হলে ART এই প্রোফাইলটি ব্যবহার করে।

ম্যানুয়ালি বেসলাইন প্রোফাইল সংগ্রহ করুন

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

  1. একটি পরীক্ষা ডিভাইসে আপনার অ্যাপের একটি রিলিজ সংস্করণ ইনস্টল করুন। একটি সঠিক প্রোফাইলের জন্য অ্যাপ তৈরির ধরন অবশ্যই R8-অপ্টিমাইজ করা এবং অ-ডিবাগযোগ্য হতে হবে।
  2. প্রোফাইলগুলি ইতিমধ্যে কম্পাইল করা হয়নি তা নিশ্চিত করুন।

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

    adb shell am broadcast -a androidx.profileinstaller.action.SKIP_FILE $PACKAGE_NAME/androidx.profileinstaller.ProfileInstallReceiver
    
  3. অ্যাপটি চালান এবং ম্যানুয়ালি আপনার গুরুত্বপূর্ণ ব্যবহারকারীর যাত্রার মাধ্যমে নেভিগেট করুন যার জন্য আপনি একটি প্রোফাইল সংগ্রহ করতে চান।
  4. প্রোফাইলগুলি ডাম্প করার জন্য ART কে প্রম্পট করুন৷ আপনার এপিকে জেটপ্যাক প্রোফাইল ইনস্টলার লাইব্রেরির উপর নির্ভরশীলতা থাকলে, প্রোফাইলগুলি ডাম্প করতে এটি ব্যবহার করুন:

    adb shell am broadcast -a androidx.profileinstaller.action.SAVE_FILE $PACKAGE_NAME/androidx.profileinstaller.ProfileInstallReceiver
    adb shell am force-stop $PACKAGE_NAME
    
    আপনি যদি প্রোফাইল ইন্সটলার ব্যবহার না করেন, তাহলে নিম্নোক্ত কমান্ড ব্যবহার করে প্রোফাইলগুলিকে একটি এমুলেটরে ম্যানুয়ালি ডাম্প করুন:

    adb root
    adb shell killall -s SIGUSR1 $PACKAGE_NAME
    adb shell am force-stop $PACKAGE_NAME
    
  5. প্রোফাইল তৈরি সম্পূর্ণ হতে অন্তত পাঁচ সেকেন্ড অপেক্ষা করুন।
  6. বাইনারি প্রোফাইলগুলিকে টেক্সটে তৈরি করুন:

    API 34 এবং উচ্চতর

    adb shell pm dump-profiles --dump-classes-and-methods $PACKAGE_NAME
    

    API 33 এবং নিম্ন

    একটি রেফারেন্স প্রোফাইল বা একটি বর্তমান প্রোফাইল তৈরি করা হয়েছে কিনা তা নির্ধারণ করুন। একটি রেফারেন্স প্রোফাইল নিম্নলিখিত অবস্থানে অবস্থিত:

    /data/misc/profiles/ref/$$PACKAGE_NAME/primary.prof
    

    একটি বর্তমান প্রোফাইল নিম্নলিখিত অবস্থানে অবস্থিত:

    /data/misc/profiles/cur/0/$PACKAGE_NAME/primary.prof
    

    APK এর অবস্থান নির্ধারণ করুন:

    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
    

  7. ডিভাইস থেকে ডাম্প করা প্রোফাইল পুনরুদ্ধার করতে 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

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

Profgen-cli প্রোফাইল সংকলন, আত্মদর্শন, এবং ART প্রোফাইলগুলিকে ট্রান্সপিলিং করতে সহায়তা করে, যাতে লক্ষ্য SDK সংস্করণ নির্বিশেষে এগুলি Android-চালিত ডিভাইসগুলিতে ইনস্টল করা যেতে পারে।

Profgen-cli হল একটি CLI যা একটি বেসলাইন প্রোফাইলের HRF কে তার সংকলিত বিন্যাসে কম্পাইল করে। Android SDK-এর অংশ হিসেবে CLI-কে 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_s অ্যান্ড্রয়েড এস+ 31+
v0_1_0_p অ্যান্ড্রয়েড পি, কিউ এবং আর 28-30
v0_0_9_omr1 Android O MR1 27
v0_0_5_o অ্যান্ড্রয়েড ও 26
v0_0_1_n অ্যান্ড্রয়েড এন 24-25

APK-এর assets বা dexopt ফোল্ডারে baseline.prof এবং baseline.profm আউটপুট ফাইল কপি করুন।

অস্পষ্ট মানচিত্র

যদি HRF উত্স চিহ্ন ব্যবহার করে তবেই আপনাকে অস্পষ্টতা মানচিত্র প্রদান করতে হবে। যদি HRF একটি রিলিজ বিল্ড থেকে জেনারেট করা হয় যা ইতিমধ্যেই অস্পষ্ট এবং কোন ম্যাপিংয়ের প্রয়োজন নেই, আপনি সেই বিকল্পটিকে উপেক্ষা করতে পারেন এবং আউটপুটগুলিকে assets বা dexopt ফোল্ডারে অনুলিপি করতে পারেন।

বেসলাইন প্রোফাইলের ঐতিহ্যগত ইনস্টলেশন

বেসলাইন প্রোফাইলগুলি ঐতিহ্যগতভাবে দুটি উপায়ে একটি ডিভাইসে বিতরণ করা হয়।

DexMetadata-এর সাথে install-multiple ব্যবহার করুন

API 28 এবং পরবর্তীতে চলমান ডিভাইসগুলিতে, Play ক্লায়েন্ট একটি APK সংস্করণ ইনস্টল করার জন্য APK এবং DexMetadata (DM) পেলোড ডাউনলোড করে। ডিএম-এ প্রোফাইলের তথ্য থাকে যা ডিভাইসে প্যাকেজ ম্যানেজারকে দেওয়া হয়।

APK এবং DM একটি একক ইনস্টল সেশনের অংশ হিসাবে ইনস্টল করা হয়েছে এরকম কিছু ব্যবহার করে:

adb install-multiple base.apk base.dm

জেটপ্যাক প্রোফাইল ইনস্টলার

API স্তর 29 এবং পরবর্তীতে চলমান ডিভাইসগুলিতে, Jetpack ProfileInstaller লাইব্রেরি ডিভাইসে APK ইনস্টল করার পরে assets বা dexopt এ প্যাকেজ করা প্রোফাইল ইনস্টল করার জন্য একটি বিকল্প ব্যবস্থা প্রদান করে। ProfileInstaller ProfileInstallReceiver দ্বারা বা সরাসরি অ্যাপ দ্বারা আহ্বান করা হয়।

ProfileInstaller লাইব্রেরি টার্গেট ডিভাইস 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>

ProfileInstaller বেসলাইন প্রোফাইল সহ বেশিরভাগ APK-এ উপস্থিত নেই—যা প্লে-তে 450K অ্যাপের মধ্যে প্রায় 77K-তে রয়েছে—যদিও এটি রচনা ব্যবহার করে কার্যকরভাবে প্রতিটি APK-এ উপস্থিত থাকে। এর কারণ হল লাইব্রেরি প্রোফাইল ইন্সটলারের উপর নির্ভরতা ঘোষণা না করেই প্রোফাইল প্রদান করতে পারে। একটি প্রোফাইল সহ প্রতিটি লাইব্রেরিতে নির্ভরতা যোগ করা জেটপ্যাক থেকে শুরু করে প্রযোজ্য।

profgen বা DexMetaData সহ install-multiple ব্যবহার করুন

API 28 এবং পরবর্তীতে চলমান ডিভাইসগুলিতে, আপনি অ্যাপে প্রোফাইলইনস্টলার লাইব্রেরি না রেখে একটি বেসলাইন প্রোফাইল সাইডলোড করতে পারেন।

এটি করতে, 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 দিয়ে কঠোর মোড নিষ্ক্রিয় করতে পারেন। যাইহোক, বেশিরভাগ ক্ষেত্রে আপনার কঠোর মোড সক্রিয় রাখা উচিত।

একটি অস্পষ্ট মানচিত্র ঐচ্ছিক; প্রদান করা হলে, এটি অস্পষ্ট প্রতীকগুলিকে তাদের মানুষের পাঠযোগ্য সংস্করণে ব্যবহার করার সুবিধার জন্য রিম্যাপ করতে সাহায্য করে।

{% শব্দার্থে %} {% endverbatim %} {% শব্দার্থে %} {% endverbatim %}