এই পৃষ্ঠাটি Android প্ল্যাটফর্মে একাধিক ব্যবহারকারীর পরীক্ষা করার গুরুত্বপূর্ণ দিকগুলি বর্ণনা করে৷ বহু-ব্যবহারকারী সমর্থন বাস্তবায়ন সম্পর্কে তথ্যের জন্য, একাধিক ব্যবহারকারীকে সমর্থন করুন দেখুন।
ডিভাইস পাথ
নিম্নলিখিত সারণীতে ডিভাইসের কয়েকটি পাথ এবং কীভাবে সেগুলি সমাধান করা হয় তা তালিকাভুক্ত করা হয়েছে। পাথ কলামের সমস্ত মান একটি ব্যবহারকারী-নির্দিষ্ট স্যান্ডবক্সযুক্ত স্টোরেজ। অ্যান্ড্রয়েডের স্টোরেজ স্টোরি সময়ের সাথে সাথে পরিবর্তিত হয়েছে; আরও তথ্যের জন্য স্টোরেজ ডকুমেন্টেশন পড়ুন।
পথ | সিস্টেম পাথ (ঐচ্ছিক) | উদ্দেশ্য |
---|---|---|
/data/user/{userId}/{app.path} | /data/data | অ্যাপ স্টোরেজ |
/storage/emulated/{userId} | /sdcard | শেয়ার করা অভ্যন্তরীণ স্টোরেজ |
/data/media/{userId} | কোনটি | ব্যবহারকারীর মিডিয়া ডেটা (উদাহরণস্বরূপ, সঙ্গীত, ভিডিও) |
/data/system/users/{userId} | কোনটি | সিস্টেম কনফিগারেশন/প্রতি ব্যবহারকারীর অবস্থা শুধুমাত্র সিস্টেম অ্যাপ দ্বারা অ্যাক্সেসযোগ্য |
এখানে একটি ব্যবহারকারী-নির্দিষ্ট পথ ব্যবহার করার একটি উদাহরণ:
# to access user 10's private application data for app com.bar.foo:
$ adb shell ls /data/user/10/com.bar.foo/
ব্যবহারকারীদের মধ্যে adb মিথস্ক্রিয়া
একাধিক ব্যবহারকারীর সাথে ডিল করার সময় বেশ কয়েকটি adb
কমান্ড দরকারী। এই কমান্ডগুলির মধ্যে কিছু শুধুমাত্র Android 9 এবং উচ্চতর তে সমর্থিত:
-
adb shell am instrument --user <userId>
একটি নির্দিষ্ট ব্যবহারকারীর বিরুদ্ধে একটি ইন্সট্রুমেন্টেশন পরীক্ষা চালায়। ডিফল্টরূপে এটি বর্তমান ব্যবহারকারী ব্যবহার করে। -
adb install --user <userId>
একটি নির্দিষ্ট ব্যবহারকারীর জন্য একটি প্যাকেজ ইনস্টল করে। সমস্ত ব্যবহারকারীর জন্য একটি প্যাকেজ ইনস্টল করা আছে তা নিশ্চিত করতে, আপনাকে অবশ্যই প্রতিটি ব্যবহারকারীর জন্য এটি কল করতে হবে। -
adb uninstall --user <userId>
একটি নির্দিষ্ট ব্যবহারকারীর জন্য একটি প্যাকেজ আনইনস্টল করে। সমস্ত ব্যবহারকারীর জন্য আনইনস্টল করতে--user
পতাকা ছাড়াই কল করুন। -
adb shell am get-current-user
বর্তমান (ফোরগ্রাউন্ড) ইউজার আইডি পায়। -
adb shell pm list users
সমস্ত বিদ্যমান ব্যবহারকারীদের একটি তালিকা পায়। -
adb shell pm create-user
একটি নতুন ব্যবহারকারী তৈরি করে, ID ফেরত দেয়। -
adb shell pm remove-user
ID দ্বারা একটি নির্দিষ্ট ব্যবহারকারীকে সরিয়ে দেয়। -
adb shell pm disable --user <userId>
একটি নির্দিষ্ট ব্যবহারকারীর জন্য একটি প্যাকেজ নিষ্ক্রিয় করে। -
adb shell pm enable --user <userId>
একটি নির্দিষ্ট ব্যবহারকারীর জন্য একটি প্যাকেজ সক্ষম করে। -
adb shell pm list packages --user <userId>
একটি নির্দিষ্ট ব্যবহারকারীর জন্য প্যাকেজগুলি (-e
সক্রিয়ের জন্য,-d
নিষ্ক্রিয়দের জন্য) তালিকাভুক্ত করে। ডিফল্টরূপে এটি সর্বদা সিস্টেম ব্যবহারকারীর জন্য তালিকাভুক্ত হয়।
নিম্নলিখিত তথ্যগুলি একাধিক ব্যবহারকারীর সাথে adb
কীভাবে আচরণ করে তা ব্যাখ্যা করতে সহায়তা করে:
adb
(অথবা আরও সঠিকভাবেadbd
ডেমন) সর্বদা সিস্টেম ব্যবহারকারী (ইউজার আইডি = 0) হিসাবে চলে তা নির্বিশেষে যে ব্যবহারকারী বর্তমান । তাই ডিভাইস পাথ যা ব্যবহারকারী নির্ভর (যেমন/sdcard/
) সবসময় সিস্টেম ব্যবহারকারী হিসাবে সমাধান করে। আরো বিস্তারিত জানার জন্য ডিভাইস পাথ দেখুন.যদি একটি ডিফল্ট ব্যবহারকারী নির্দিষ্ট করা না থাকে, প্রতিটি
adb
সাবকমান্ডের একটি ভিন্ন ব্যবহারকারী থাকে। সর্বোত্তম অনুশীলন হলam get-current-user
মাধ্যমে ব্যবহারকারী আইডি পুনরুদ্ধার করা এবং তারপর এটি সমর্থন করে এমন যেকোনো কমান্ডের জন্য স্পষ্টভাবে--user <userId>
ব্যবহার করা। অ্যান্ড্রয়েড 9 পর্যন্ত সমস্ত কমান্ডের জন্য স্পষ্ট ব্যবহারকারীর পতাকা সমর্থিত ছিল না।মাধ্যমিক ব্যবহারকারীদের
/sdcard
পাথগুলিতে অ্যাক্সেস অ্যান্ড্রয়েড 9 থেকে শুরু করে অস্বীকার করা হয়েছে। পরীক্ষার সময় ফাইলগুলি কীভাবে পুনরুদ্ধার করতে হয় তার বিশদ বিবরণের জন্য বহু-ব্যবহারকারীর ডেটার জন্য সামগ্রী সরবরাহকারী দেখুন।
বহু-ব্যবহারকারী ডেটার জন্য সামগ্রী প্রদানকারী
যেহেতু adb
সিস্টেম ব্যবহারকারী হিসাবে কাজ করে এবং ডেটা Android 9 এবং উচ্চতর সংস্করণে স্যান্ডবক্স করা হয়, তাই আপনাকে অবশ্যই একটি ননসিস্টেম ব্যবহারকারীর কাছ থেকে পরীক্ষার ডেটা পুশ করতে বা টানতে সামগ্রী প্রদানকারী ব্যবহার করতে হবে। এটি প্রয়োজনীয় নয় যদি:
adbd
রুট হিসাবে চলছে (adb root
এর মাধ্যমে), যা শুধুমাত্রuserdebug
বাusereng
বিল্ড ব্যবহার করেই সম্ভব।আপনি ট্রেড ফেডারেশনের (Tradefed-এর)
ITestDevice
ব্যবহার করছেন ফাইল পুশ বা টানতে, সেক্ষেত্রে আপনার টেস্ট কনফিগারেশনে/sdcard/
পাথ ব্যবহার করুন (উদাহরণস্বরূপ,NativeDevice.java
এpushFile
এর সোর্স কোড দেখুন)।
যখন একটি বিষয়বস্তু প্রদানকারী সেকেন্ডারি ব্যবহারকারীর মধ্যে চলছে, আপনি উপযুক্ত user
, uri
, এবং নির্দিষ্ট অন্যান্য পরামিতিগুলির সাথে adb shell content
কমান্ড ব্যবহার করে এটি অ্যাক্সেস করতে পারেন।
অ্যাপ ডেভেলপারদের জন্য ওয়ার্কআউন্ড
push
বা pull
কমান্ডের পরিবর্তে adb content
এবং ContentProvider
এর একটি উদাহরণ ব্যবহার করে পরীক্ষা ফাইলগুলির সাথে ইন্টারঅ্যাক্ট করুন৷
- অ্যাপ দ্বারা হোস্ট করা
ContentProvider
একটি উদাহরণ তৈরি করুন যা প্রয়োজনে ফাইলগুলি পরিবেশন এবং সংরক্ষণ করতে পারে। অ্যাপের ইন্টারনাল স্টোরেজ ব্যবহার করুন। - ফাইলগুলিকে পুশ বা টানতে
adb shell content
read
বাwrite
কমান্ড ব্যবহার করুন।
মিডিয়া ফাইলের জন্য ওয়ার্কআউন্ড
SD কার্ডের মিডিয়া পার্টিশনে মিডিয়া ফাইলগুলি পুশ করতে, MediaStore
পাবলিক API ব্যবহার করুন৷ যেমন:
# push MVIMG_20190129_142956.jpg to /storage/emulated/10/Pictures
# step 1
$ adb shell content insert --user 10 --uri content://media/external/images/media/ --bind _display_name:s:foo.jpg
# step 2
$ adb shell content query --user 10 --projection _id --uri content://media/external/images/media/ --where "_display_name=\'foo.jpg\'"
# step 3
$ adb shell content write --user 10 --uri content://media/external/images/media/8022 < MVIMG_20190129_142956.jpg
একটি জেনেরিক সামগ্রী প্রদানকারী ইনস্টল করুন
একটি বিদ্যমান বিষয়বস্তু প্রদানকারী ইনস্টল করুন এবং ব্যবহার করুন যা ব্যবহারকারী-নির্দিষ্ট /sdcard
পাথে ফাইলগুলি পড়ে এবং লেখে।
মেক make TradefedContentProvider
TradefedContentProvider.apk
করুন:
```
# install content provider apk
$ adb install --user 10 -g TradefedContentProvider.apk
# pull some_file.txt
$ adb shell content read --user 10 --uri content://android.tradefed.contentprovider/sdcard/some_file.txt > local_file.txt
# push local_file.txt
$ adb shell content write --user 10 --uri content://android.tradefed.contentprovider/sdcard/some_file.txt < local_file.txt
```
ট্রেড ফেডারেশন মাল্টি-ইউজার সাপোর্ট
ট্রেডফেড হল অফিসিয়াল অ্যান্ড্রয়েড টেস্ট জোতা। এই বিভাগে বহু-ব্যবহারকারী পরীক্ষার পরিস্থিতির জন্য Tradefed-এর অন্তর্নির্মিত সমর্থনের কিছু সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে।
স্ট্যাটাস চেকার
সিস্টেম স্ট্যাটাস চেকার (এসএসসি) টার্গেট প্রস্তুতকারীদের আগে চালানো হয় এবং তাদের ক্লিনআপ সেই প্রস্তুতকারীদের পরে চালানো হয়।
একাধিক ব্যবহারকারী পরীক্ষা করার সময় ডেভেলপারদের সাহায্য করার জন্য UserChecker
স্পষ্টভাবে সংজ্ঞায়িত করা হয়েছে। এটি একটি পরীক্ষা ডিভাইসে ব্যবহারকারীদের অবস্থা পরিবর্তন করেছে কিনা তা ট্র্যাক করে (উদাহরণস্বরূপ, ব্যবহারকারীদের বিচ্ছিন্ন না করে তৈরি করা হয়েছে)। উপরন্তু, যদি user-cleanup
সেট করা থাকে, এটি স্বয়ংক্রিয়ভাবে পরীক্ষার পরে পরিষ্কার করার চেষ্টা করে, এখনও সহায়ক ত্রুটি প্রদান করে যাতে পরীক্ষাটি ঠিক করা যায়।
<system_checker class="com.android.tradefed.suite.checker.UserChecker" >
<option name="user-cleanup" value="true" />
</system_checker>
লক্ষ্য প্রস্তুতকারী
লক্ষ্য প্রস্তুতকারীরা সাধারণত একটি নির্দিষ্ট কনফিগারেশন সহ একটি ডিভাইস সেট আপ করতে ব্যবহৃত হয়। মাল্টি-ইউজার টেস্টিং প্রিপারারদের ক্ষেত্রে একটি নির্দিষ্ট ধরণের ব্যবহারকারী তৈরি করার পাশাপাশি অন্যান্য ব্যবহারকারীদের সাথে স্যুইচ করতে ব্যবহার করা যেতে পারে।
সেকেন্ডারি ব্যবহারকারী নেই এমন ডিভাইসের জন্য, আপনি AndroidTest.xml
এ সেকেন্ডারি ব্যবহারকারী তৈরি করতে এবং স্যুইচ করতে CreateUserPreparer
ব্যবহার করতে পারেন। পরীক্ষার শেষে, প্রস্তুতকারী ফিরে যায় এবং সেকেন্ডারি ব্যবহারকারীকে মুছে দেয়।
<target_preparer
class="com.google.android.tradefed.targetprep.CreateUserPreparer" >
</target_preparer>
আপনি যে ব্যবহারকারীর ধরণটি চান সেটি যদি ডিভাইসে ইতিমধ্যেই বিদ্যমান থাকে, তাহলে বিদ্যমান ব্যবহারকারীতে স্যুইচ করতে SwitchUserTargetPreparer
ব্যবহার করুন। user-type
জন্য সাধারণ মানগুলির মধ্যে system
বা secondary
অন্তর্ভুক্ত রয়েছে।
<target_preparer
class="com.android.tradefed.targetprep.SwitchUserTargetPreparer">
<option name="user-type" value="secondary" />
</target_preparer>
হোস্ট-চালিত পরীক্ষা
কিছু ক্ষেত্রে, একটি পরীক্ষার জন্য ব্যবহারকারীদের পরীক্ষার মধ্যে পরিবর্তন করতে হবে। কোনো ডিভাইস-সাইড টেস্ট ফ্রেমওয়ার্কের মধ্যে থেকে সুইচ করবেন না, যেমন UI Automator , কারণ পরীক্ষার প্রক্রিয়া যে কোনো সময় মেরে যেতে পারে। পরিবর্তে, ট্রেডফেড-এর হোস্ট-চালিত পরীক্ষার কাঠামোর মতো একটি হোস্ট-সাইড টেস্ট ফ্রেমওয়ার্ক ব্যবহার করুন, যা ITestDevice
এ অ্যাক্সেস দেয়, যে কোনও ব্যবহারকারীর হেরফের করার অনুমতি দেয়।
হোস্ট-চালিত পরীক্ষার জন্য UserChecker
( স্ট্যাটাস চেকারে বর্ণিত) ব্যবহার করুন যা ব্যবহারকারীর অবস্থা পরিবর্তন করে কারণ এটি নিশ্চিত করে যে পরীক্ষাটি নিজের পরে সঠিকভাবে পরিষ্কার হয়।