রানটাইম রিসোর্স ওভারলে (RRO) হল এমন একটি প্যাকেজ যা রানটাইমে টার্গেট প্যাকেজের রিসোর্স ভ্যালু পরিবর্তন করে। যেমন, সিস্টেম ইমেজে ইনস্টল করা কোনও অ্যাপ রিসোর্সের ভ্যালুর উপর ভিত্তি করে তার আচরণ পরিবর্তন করতে পারে। বিল্ড টাইমে রিসোর্স ভ্যালু হার্ডকোড করার পরিবর্তে, অন্য পার্টিশনে ইনস্টল করা RRO রানটাইমে অ্যাপের রিসোর্সের ভ্যালু পরিবর্তন করতে পারে।
RRO চালু বা বন্ধ করা যেতে পারে। আপনি প্রোগ্রাম্যাটিক উপায়ে RRO-এর রিসোর্স ভ্যালু পরিবর্তন করার ক্ষমতা টগল করতে চালু/বন্ধ করার স্টেট সেট করতে পারবেন। RRO ডিফল্ট হিসেবে বন্ধ করা থাকে (তবে, স্ট্যাটিক RRO ডিফল্ট হিসেবে চালু করা থাকে)।
ওভারলে রিসোর্স
ওভারলে প্যাকেজে সংজ্ঞায়িত রিসোর্সকে টার্গেট প্যাকেজে সংজ্ঞায়িত রিসোর্সের সাথে ম্যাপ করার মাধ্যমে ওভারলে কাজ করে। কোনও অ্যাপ যখন টার্গেট প্যাকেজে কোনও রিসোর্সের ভ্যালু সমাধান করার চেষ্টা করে, তখন টার্গেট রিসোর্স যে ওভারলে রিসোর্সের সাথে ম্যাপ করা হয় তার ভ্যালু পরিবর্তে রিটার্ন করা হয়।
ম্যানিফেস্ট সেট-আপ করা
কোনও প্যাকেজে <manifest> ট্যাগের চাইল্ড হিসেবে <overlay> ট্যাগ থাকলে,
সেটিকে RRO প্যাকেজ হিসেবে বিবেচনা করা হয়।
প্রয়োজনীয়
android:targetPackageঅ্যাট্রিবিউটের ভ্যালু RRO যে প্যাকেজ ওভারলে করতে চায় সেটির নাম নির্দিষ্ট করে।ঐচ্ছিক
android:targetNameঅ্যাট্রিবিউটের ভ্যালু, RRO যে টার্গেট প্যাকেজের রিসোর্সের ওভারলে করার উদ্দেশ্যে ব্যবহার করে, সেটির ওভারলে করা যায় এমন সাবসেটের নাম নির্দিষ্ট করে। টার্গেট যদি ওভারলে করা যায় এমন রিসোর্সের সেটকে সংজ্ঞায়িত না করে, তাহলে এই অ্যাট্রিবিউটটি থাকা উচিত নয়।
নিচের কোডে ওভারলে AndroidManifest.xml-এর একটি উদাহরণ দেখানো হয়েছে।
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.overlay">
<application android:hasCode="false" />
<overlay android:targetPackage="com.example.target"
android:targetName="OverlayableResources"/>
</manifest>
ওভারলে কোড ওভারলে করতে পারে না, তাই তাদের DEX ফাইল থাকতে পারে না। এছাড়াও, ম্যানিফেস্টে <application> ট্যাগের
android:hasCode অ্যাট্রিবিউটকে অবশ্যই false হিসেবে সেট করতে হবে।
রিসোর্স ম্যাপের সংজ্ঞা দিন
Android 11 বা তার পরের যেকোনও ভার্সনে, ওভারলে রিসোর্স ম্যাপকে
সংজ্ঞায়িত করার জন্য সাজেস্ট করা মেকানিজম হল ওভারলে প্যাকেজের res/xml
ডিরেক্টরিতে একটি ফাইল তৈরি করা, ওভারলে করা উচিত এমন টার্গেট রিসোর্স এবং তাদের
পরিবর্ত ভ্যালু গণনা করা, তারপরে রিসোর্স ম্যাপিং ফাইলের রেফারেন্সে
<overlay> ম্যানিফেস্ট ট্যাগের android:resourcesMap অ্যাট্রিবিউটের ভ্যালু সেট করা।
নিম্নলিখিত কোডটি একটি উদাহরণ res/xml/overlays.xml ফাইল দেখায়।
<?xml version="1.0" encoding="utf-8"?>
<overlay xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Overlays string/config1 and string/config2 with the same resource. -->
<item target="string/config1" value="@string/overlay1" />
<item target="string/config2" value="@string/overlay1" />
<!-- Overlays string/config3 with the string "yes". -->
<item target="string/config3" value="@android:string/yes" />
<!-- Overlays string/config4 with the string "Hardcoded string". -->
<item target="string/config4" value="Hardcoded string" />
<!-- Overlays integer/config5 with the integer "42". -->
<item target="integer/config5" value="42" />
</overlay>
নিচের কোডে ওভারলে ম্যানিফেস্টের একটি উদাহরণ দেখানো হয়েছে।
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.overlay">
<application android:hasCode="false" />
<overlay android:targetPackage="com.example.target"
android:targetName="OverlayableResources"
android:resourcesMap="@xml/overlays"/>
</manifest>
প্যাকেজ তৈরি করা
Android 11 বা তার পরবর্তী ভার্সনে ওভারলের জন্য Soong বিল্ড রুল কাজ করে।
এটি Android Asset Packaging Tool 2 (AAPT2)-কে একই ভ্যালু (--no-resource-deduping) সহ রিসোর্সের কনফিগারেশন
ডুপ্লিকেট করা থেকে এবং ডিফল্ট কনফিগারেশন (--no-resource-removal) ছাড়া রিসোর্স সরানো থেকে
আটকায়। নিম্নলিখিত কোডটি একটি উদাহরণ
Android.bp ফাইল দেখায়।
runtime_resource_overlay {
name: "ExampleOverlay",
sdk_version: "current",
}
রিসোর্স সংক্রান্ত সমস্যার সমাধান করুন
কোয়েরি করা রিসোর্সের জন্য টার্গেট রিসোর্স বা ওভারলে রিসোর্সে একাধিক কনফিগারেশন সংজ্ঞায়িত করা থাকলে, রিসোর্স রানটাইম সেই কনফিগারেশনের ভ্যালু রিটার্ন করে যা ডিভাইস কনফিগারেশনের সাথে সবচেয়ে ভালোভাবে ম্যাচ করে। কোন কনফিগারেশন সবচেয়ে ভালোভাবে ম্যাচ করছে তা নির্ধারণ করতে, ওভারলে রিসোর্স কনফিগারেশনের সেটকে টার্গেট রিসোর্স কনফিগারেশনের সেটের সাথে মার্জ করুন এবং তারপরে সাধারণ রিসোর্স রেজোলিউশন ফ্লো অনুসরণ করুন (বিস্তারিত জানতে, Android কীভাবে সবচেয়ে ভালোভাবে ম্যাচ করা রিসোর্স খুঁজে পায় দেখুন)।
যেমন, কোনও ওভারলে যদি drawable-en কনফিগারেশনের জন্য কোনও ভ্যালু নির্ধারণ করে
এবং টার্গেট যদি drawable-en-port-এর জন্য কোনও ভ্যালু নির্ধারণ করে, তাহলে drawable-en-port
আরও ভালভাবে মিলে যায়, তাই রানটাইমে টার্গেট কনফিগারেশন drawable-en-port-এর ভ্যালু
বেছে নেওয়া হয়। সব drawable-en কনফিগারেশন ওভারলে করতে, টার্গেট যে drawable-en কনফিগারেশন
নির্ধারণ করে তার প্রত্যেকটির জন্য ওভারলেকে একটি ভ্যালু নির্ধারণ করতে হবে।
ওভারলে নিজের রিসোর্স রেফার করতে পারে, তবে Android রিলিজের মধ্যে আচরণ আলাদা হতে পারে।
Android 11 বা তার পরবর্তী যেকোনও ভার্সনে, প্রতিটি ওভারলেতে নিজস্ব রিজার্ভ করা রিসোর্স আইডি স্পেস থাকে যা টার্গেট রিসোর্স আইডি স্পেস বা অন্যান্য ওভারলে রিসোর্স আইডি স্পেসের সাথে ওভারল্যাপ করে না, তাই নিজস্ব রিসোর্স রেফারেন্স করা ওভারলে যেমন কাজ করার কথা তেমনই কাজ করে।
Android 10 বা তার আগের ভার্সনে, ওভারলে এবং টার্গেট প্যাকেজ একই রিসোর্স আইডি স্পেস শেয়ার করে, যার ফলে
@type/nameসিনট্যাক্স ব্যবহার করে নিজেদের রিসোর্স রেফার করার চেষ্টা করলে, সংঘর্ষ এবং অপ্রত্যাশিত আচরণ হতে পারে।
ওভারলে চালু/বন্ধ করুন
ওভারলে ম্যানুয়ালি এবং প্রোগ্রাম্যাটিক্যালি চালু/বন্ধ করা যেতে পারে।
ম্যানুয়ালি ওভারলে বন্ধ বা চালু করা
কোনও RRO ম্যানুয়ালি চালু ও যাচাই করতে, এগুলি রান করান:
adb shell cmd overlay enable --user current com.example.carrro
adb shell cmd overlay list --user current | grep -i com.example com.example.carrroএটি সিস্টেম ব্যবহারকারীর (userId = 0) জন্য RRO চালু করে, যার SystemUI আছে।
এই নির্দেশাবলী ফোরগ্রাউন্ড ব্যবহারকারীর (userId = 10) শুরু করা অ্যাপকে প্রভাবিত করে না। ফোরগ্রাউন্ড ব্যবহারকারীর জন্য RRO চালু করতে, -–user 10 প্যারামিটার ব্যবহার করুন:
adb shell cmd overlay enable --user 10 com.example.carrroপ্রোগ্রামাটিক উপায়ে ওভারলে চালু বা বন্ধ করা
পরিবর্তনযোগ্য ওভারলে চালু ও বন্ধ করতে OverlayManager API ব্যবহার করুন (Context#getSystemService(Context.OVERLAY_SERVICE) ব্যবহার করে API ইন্টারফেস
রিট্রিভ করুন)। কোনও
ওভারলে শুধুমাত্র সেই প্যাকেজ চালু করতে পারে যেটিকে সেটি টার্গেট করে অথবা android.permission.CHANGE_OVERLAY_PACKAGES
অনুমতি থাকা কোনও প্যাকেজ। ওভারলে চালু বা বন্ধ করা হলে, কনফিগারেশন পরিবর্তন সংক্রান্ত ইভেন্ট টার্গেট প্যাকেজে
প্রোপাগেট হয় এবং টার্গেট অ্যাক্টিভিটি আবার চালু হয়।
ওভারলে করা যায় এমন রিসোর্স সীমিত করুন
Android 10 বা এর পরবর্তী যেকোনও ভার্সনে, <overlayable> XML ট্যাগ রিসোর্সের একটি সেট প্রকাশ করে
যেগুলি RRO ওভারলে করতে পারে। নিচের উদাহরণে
res/values/overlayable.xml ফাইল, string/foo ও integer/bar হল রিসোর্স
যা ডিভাইসের চেহারা থিম করার জন্য ব্যবহার করা হয়; এইসব রিসোর্স ওভারলে করতে, ওভারলেকে
নামের মাধ্যমে ওভারলে করা যায় এমন রিসোর্সের সংগ্রহকে স্পষ্টভাবে টার্গেট করতে হবে।
<!-- The collection of resources for theming the appearance of the device -->
<overlayable name="ThemeResources">
<policy type="public">
<item type="string" name="foo/" />
<item type="integer" name="bar/" />
</policy>
...
</overlayable>
একটি APK একাধিক <overlayable> ট্যাগকে সংজ্ঞায়িত করতে পারে, তবে প্রতিটি ট্যাগের প্যাকেজের মধ্যে একটি অনন্য
নাম থাকতে হবে। যেমন, এটি হল:
দুটি আলাদা প্যাকেজ
<overlayable name="foo">হিসেবে সংজ্ঞায়িত করা যেতে পারে।একটি APK-তে দুটি
<overlayable name="foo">ব্লক থাকলে চলবে না।
নিচের কোডটি AndroidManifest.xml
ফাইলে ওভারলে করার একটি উদাহরণ দেখায়।
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my.theme.overlay">
<application android:hasCode="false" />
<!-- This overlay will override the ThemeResources resources -->
<overlay android:targetPackage="android" android:targetName="ThemeResources">
</manifest>
কোনও অ্যাপ <overlayable> ট্যাগ নির্ধারণ করলে, সেই অ্যাপকে টার্গেট করা ওভারলে:
targetNameউল্লেখ করতে হবে।শুধুমাত্র
<overlayable>ট্যাগের মধ্যে তালিকাভুক্ত রিসোর্স ওভারলে করতে পারে।শুধুমাত্র একটি
<overlayable>নাম টার্গেট করতে পারে।
আপনি এমন কোনও প্যাকেজ টার্গেট করে ওভারলে চালু করতে পারবেন না যা ওভারলে করা যায় এমন রিসোর্স
প্রকাশ করে কিন্তু নির্দিষ্ট <overlayable> ট্যাগ টার্গেট করার জন্য
android:targetName ব্যবহার করে না।
নীতি সীমাবদ্ধ করুন
ওভারলে করা যায় এমন রিসোর্সের উপর বিধিনিষেধ প্রয়োগ করতে <policy> ট্যাগ ব্যবহার করুন। অন্তর্ভুক্ত রিসোর্স
ওভাররাইড করার জন্য কোনও ওভারলেকে কোন কোন নীতি পূরণ করতে হবে তা
type অ্যাট্রিবিউট নির্দিষ্ট করে। যেসব ধরন কাজ করে সেগুলি নিচে উল্লেখ করা হল।
public. যেকোনও ওভারলে রিসোর্স ওভাররাইড করতে পারে।system. সিস্টেম পার্টিশনে থাকা যেকোনও ওভারলে রিসোর্সকে ওভাররাইড করতে পারে।vendor. ভেন্ডর পার্টিশনে থাকা যেকোনও ওভারলে রিসোর্সকে ওভাররাইড করতে পারে।product. প্রোডাক্ট পার্টিশনের উপর কোনও ওভারলে থাকলে তা রিসোর্সকে ওভাররাইড করতে পারে।oem. OEM পার্টিশনে যেকোনও ওভারলে রিসোর্স ওভাররাইড করতে পারে।odm. odm পার্টিশনে থাকা যেকোনও ওভারলে রিসোর্সকে ওভাররাইড করতে পারে।signature. টার্গেট APK-এর মতো একই স্বাক্ষরে সাইন করা যেকোনও ওভারলে রিসোর্সকে ওভাররাইড করতে পারে।actor. অ্যাক্টর APK-এর মতো একই স্বাক্ষর দিয়ে সাইন করা যেকোনও ওভারলে রিসোর্সকে ওভাররাইড করতে পারে। সিস্টেম কনফিগে named-actor ট্যাগে অভিনেতার নাম ঘোষণা করা হয়।config_signature. overlay-config apk-এর মতো একই স্বাক্ষরে স্বাক্ষরিত যেকোনও ওভারলে রিসোর্স ওভাররাইড করতে পারে। সিস্টেম কনফিগারেশনে overlay-config-signature ট্যাগে overlay-config ঘোষণা করা হয়।
নিম্নলিখিত কোডটি res/values/overlayable.xml ফাইলে একটি উদাহরণ <policy> ট্যাগ দেখায়।
<overlayable name="ThemeResources">
<policy type="vendor" >
<item type="string" name="foo" />
</policy>
<policy type="product|signature" >
<item type="string" name="bar" />
<item type="string" name="baz" />
</policy>
</overlayable>
একাধিক নীতি নির্দিষ্ট করতে, বিভাজক অক্ষর হিসেবে উল্লম্ব বার (|) ব্যবহার করুন।
একাধিক নীতি উল্লেখ করা হলে, <policy> ট্যাগের মধ্যে তালিকাভুক্ত রিসোর্স ওভাররাইড করার জন্য ওভারলেকে শুধুমাত্র একটি
নীতি পূরণ করতে হবে।
ওভারলে কনফিগার করা
Android রিলিজ ভার্সনের উপর নির্ভর করে, ওভারলেয়ের পরিবর্তনযোগ্যতা, ডিফল্ট স্টেট ও অগ্রাধিকার কনফিগার করার জন্য Android বিভিন্ন মেকানিজম ব্যবহার করে।
Android 11 বা তার পরবর্তী যেকোনও ভার্সনে চলা ডিভাইস, ম্যানিফেস্ট অ্যাট্রিবিউটের পরিবর্তে
OverlayConfigফাইল (config.xml) ব্যবহার করতে পারে। ওভারলে করার জন্য ওভারলে ফাইল ব্যবহার করার পদ্ধতি সাজেস্ট করা হয়।স্ট্যাটিক RRO কনফিগার করতে, সব ডিভাইস ম্যানিফেস্ট অ্যাট্রিবিউট (
android:isStaticএবংandroid:priority) ব্যবহার করতে পারে।
OverlayConfig ব্যবহার করা
Android 11 বা তার পরবর্তী যেকোনও ভার্সনে, আপনি OverlayConfig ব্যবহার করে
ওভারলে মিউটেবল কিনা, ডিফল্ট স্টেট ও অগ্রাধিকার কনফিগার করতে পারবেন। ওভারলে কনফিগার করতে, partition/overlay/config/config.xml-এ অবস্থিত ফাইলটি তৈরি বা পরিবর্তন করুন, যেখানে partition হল
কনফিগার করা ওভারলের পার্টিশন। কনফিগার করার জন্য, ওভারলেকে অবশ্যই
overlay/ ডিরেক্টরির পার্টিশনে থাকতে হবে যেখানে ওভারলে কনফিগার করা হয়েছে। নিচের কোডে একটি উদাহরণ product/overlay/config/config.xml দেখানো হয়েছে।
<config>
<merge path="OEM-common-rros-config.xml" />
<overlay package="com.oem.overlay.device" mutable="false" enabled="true" />
<overlay package="com.oem.green.theme" enabled="true" />
</config>"
<overlay> ট্যাগে একটি package অ্যাট্রিবিউট থাকতে হবে যা কোন ওভারলে
প্যাকেজ কনফিগার করা হচ্ছে তা নির্দেশ করে। ঐচ্ছিক enabled অ্যাট্রিবিউট নিয়ন্ত্রণ করে যে
ওভারলে ডিফল্ট হিসেবে চালু করা থাকবে কিনা (ডিফল্ট হল false)। ঐচ্ছিক
mutable অ্যাট্রিবিউট নিয়ন্ত্রণ করে যে ওভারলে পরিবর্তনযোগ্য হবে কিনা এবং রানটাইমে
প্রোগ্রাম্যাটিক উপায়ে এর চালু থাকার স্ট্যাটাস পরিবর্তন করা যাবে কিনা (ডিফল্ট হল true)।
কনফিগারেশন ফাইলের মধ্যে তালিকাভুক্ত নয় এমন ওভারলে পরিবর্তনযোগ্য এবং ডিফল্ট হিসেবে
বন্ধ করা থাকে।
ওভারলেয়ের অগ্রাধিকার
একাধিক ওভারলে একই রিসোর্সকে ওভাররাইড করলে, ওভারলেগুলির ক্রম গুরুত্বপূর্ণ। ওভারলেতে, তার নিজের কনফিগারেশনের আগে থাকা কনফিগারেশন সহ ওভারলেয়ের চেয়ে বেশি অগ্রাধিকার থাকে। বিভিন্ন পার্টিশনে ওভারলেগুলির অগ্রাধিকারের ক্রম (সবচেয়ে কম থেকে সবচেয়ে বেশি অগ্রাধিকার) নিচে দেওয়া হল।
systemvendorodmoemproductsystem_ext
ফাইল মার্জ করা
<merge> ট্যাগ ব্যবহার করলে, কনফিগারেশন ফাইলের নির্দিষ্ট জায়গায় অন্যান্য কনফিগারেশন ফাইল মার্জ করা যায়। ট্যাগের path অ্যাট্রিবিউট
ওভারলে কনফিগারেশন ফাইল সহ ডিরেক্টরির সাথে সম্পর্কিত মার্জ করার জন্য ফাইলের পাথ দেখায়।
ম্যানিফেস্ট অ্যাট্রিবিউট/স্ট্যাটিক RRO ব্যবহার করা
Android 10 বা তার আগের যেকোনও ভার্সনে, ওভারলে অপরিবর্তনীয়তা এবং অগ্রাধিকার নিম্নলিখিত ম্যানিফেস্ট অ্যাট্রিবিউট ব্যবহার করে কনফিগার করা হয়।
android:isStatic. এই বুলিয়ান অ্যাট্রিবিউটের ভ্যালুtrueহিসেবে সেট করা হলে, ওভারলে ডিফল্ট হিসেবে চালু হয়ে যায় এবং এটি অপরিবর্তনীয় হয়, যার ফলে ওভারলে বন্ধ করা যায় না।android:priority. এই সংখ্যাসূচক অ্যাট্রিবিউটের ভ্যালু (যা শুধুমাত্র স্ট্যাটিক ওভারলেকে প্রভাবিত করে) ওভারলের অগ্রাধিকার কনফিগার করে যখন একাধিক স্ট্যাটিক ওভারলে একই রিসোর্স ভ্যালুকে টার্গেট করে। বেশি সংখ্যা বেশি অগ্রাধিকার নির্দেশ করে।
নিচের কোডে একটি উদাহরণ AndroidManifest.xml দেখানো হয়েছে।
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.overlay">
<application android:hasCode="false" />
<overlay android:targetPackage="com.example.target"
android:isStatic="true"
android:priority="5"/>
</manifest>
Android 11-এ পরিবর্তন
Android 11 বা তার পরবর্তী যেকোনও ভার্সনে, কোনও কনফিগারেশন ফাইল partition/overlay/config/config.xml-এ থাকলে, ওভারলে
সেই ফাইল ব্যবহার করে কনফিগার করা হয় এবং android:isStatic ও android:priority-এর কোনও প্রভাব
পার্টিশনে থাকা ওভারলের উপর পড়ে না। যেকোনও
পার্টিশনে ওভারলে কনফিগারেশন ফাইলকে ডিফাইন করলে ওভারলে পার্টিশনের অগ্রাধিকার প্রয়োগ করা হয়।
এছাড়াও, Android 11 বা তার পরবর্তী ভার্সন, প্যাকেজ ইনস্টলেশনের সময় পড়া রিসোর্সের মানকে প্রভাবিত করার জন্য স্ট্যাটিক ওভারলে ব্যবহার করার ক্ষমতা সরিয়ে দেয়। কম্পোনেন্ট চালু করার স্টেট কনফিগার করা বুলিয়ান ভ্যালু পরিবর্তন করতে স্ট্যাটিক ওভারলে ব্যবহার করার সাধারণ ব্যবহারের ক্ষেত্রে, <component-override> SystemConfig ট্যাগ (Android
11-এ নতুন) ব্যবহার করুন।
ডিবাগ ওভারলে
ম্যানুয়ালি ওভারলে চালু, বন্ধ ও ডাম্প করতে, নিম্নলিখিত ওভারলে ম্যানেজার শেল কমান্ড ব্যবহার করুন।
adb shell cmd overlayব্যবহারকারী নির্দিষ্ট না করে enable ব্যবহার করলে বর্তমান ব্যবহারকারী প্রভাবিত হয়, অর্থাৎ,
সিস্টেম ব্যবহারকারী (userId = 0), যার মালিকানায় সিস্টেম UI থাকে। এটি ফোরগ্রাউন্ড ব্যবহারকারীকে (userId = 10) প্রভাবিত করে না,
যে অ্যাপের মালিক। ফোরগ্রাউন্ড ব্যবহারকারীর জন্য
RRO চালু করতে, –-user 10 প্যারামিটার ব্যবহার করুন:
adb shell cmd overlay enable --user 10 com.example.carrroOverlayManagerService, টার্গেট প্যাকেজে রিসোর্স আইডিকে ওভারলে প্যাকেজে রিসোর্স আইডিতে ম্যাপ করতে idmap2 ব্যবহার করে। জেনারেট করা আইডি ম্যাপিং /data/resource-cache/-এ
স্টোর করা হয়। আপনার ওভারলে সঠিকভাবে কাজ না করলে, /data/resource-cache/-এ আপনার ওভারলের জন্য
সংশ্লিষ্ট idmap ফাইলটি খুঁজুন, তারপর
নিম্নলিখিত কমান্ডটি রান করুন।
adb shell idmap2 dump --idmap-path [file]এই কমান্ড নিচে দেখানো রিসোর্সের ম্যাপিং প্রিন্ট করে।
[target res id] - > [overlay res id] [resource name]
0x01040151 -> 0x01050001 string/config_dozeComponent
0x01040152 -> 0x01050002 string/config_dozeDoubleTapSensorType
0x01040153 -> 0x01050003 string/config_dozeLongPressSensorType