ম্যানুয়াল প্রচেষ্টা কমাতে এবং সাধারণ স্কেলেবিলিটি বাড়ানোর জন্য 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 চিত্র চালানোর একটি এমুলেটর ব্যবহার করতে হবে। আপনি নিম্নলিখিত কাজ করে সরাসরি নিয়ম সংগ্রহ করতে পারেন:
- একটি পরীক্ষা ডিভাইসে আপনার অ্যাপের একটি রিলিজ সংস্করণ ইনস্টল করুন। একটি সঠিক প্রোফাইলের জন্য অ্যাপ তৈরির ধরন অবশ্যই R8-অপ্টিমাইজ করা এবং অ-ডিবাগযোগ্য হতে হবে।
- প্রোফাইলগুলি ইতিমধ্যে কম্পাইল করা হয়নি তা নিশ্চিত করুন। আপনার APK-এর জেটপ্যাক প্রোফাইল ইনস্টলার লাইব্রেরির উপর নির্ভরশীলতা থাকলে, লাইব্রেরি আপনার APK-এর প্রথম লঞ্চের সময় একটি প্রোফাইল বুটস্ট্র্যাপ করে। এটি প্রোফাইল জেনারেশন প্রক্রিয়াতে হস্তক্ষেপ করতে পারে, তাই নিম্নলিখিত কমান্ড দিয়ে এটি অক্ষম করুন:
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
adb shell am broadcast -a androidx.profileinstaller.action.SKIP_FILE $PACKAGE_NAME/androidx.profileinstaller.ProfileInstallReceiver
- অ্যাপটি চালান এবং ম্যানুয়ালি আপনার গুরুত্বপূর্ণ ব্যবহারকারীর যাত্রার মাধ্যমে নেভিগেট করুন যার জন্য আপনি একটি প্রোফাইল সংগ্রহ করতে চান।
- প্রোফাইলগুলি ডাম্প করার জন্য 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
- প্রোফাইল তৈরি সম্পূর্ণ হতে অন্তত পাঁচ সেকেন্ড অপেক্ষা করুন।
- বাইনারি প্রোফাইলগুলিকে টেক্সটে তৈরি করুন:
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
- ডিভাইস থেকে ডাম্প করা প্রোফাইল পুনরুদ্ধার করতে
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
দিয়ে কঠোর মোড নিষ্ক্রিয় করতে পারেন। যাইহোক, বেশিরভাগ ক্ষেত্রে আপনার কঠোর মোড সক্রিয় রাখা উচিত।
একটি অস্পষ্ট মানচিত্র ঐচ্ছিক; প্রদান করা হলে, এটি অস্পষ্ট প্রতীকগুলিকে তাদের মানুষের পাঠযোগ্য সংস্করণে ব্যবহার করার সুবিধার জন্য রিম্যাপ করতে সাহায্য করে।
{% শব্দার্থে %}আপনার জন্য প্রস্তাবিত
- দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলে লিঙ্ক টেক্সট প্রদর্শিত হয়
- SQLite কর্মক্ষমতা জন্য সেরা অনুশীলন
- বেসলাইন প্রোফাইল {:#baseline-profiles}
- আংশিক জাগরণ লক আটকে আছে