একাধিক ব্যবহারকারী পরীক্ষা করা হচ্ছে

এই পৃষ্ঠাটি 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.javapushFile এর সোর্স কোড দেখুন)।

যখন একটি বিষয়বস্তু প্রদানকারী সেকেন্ডারি ব্যবহারকারীর মধ্যে চলছে, আপনি উপযুক্ত user , uri , এবং নির্দিষ্ট অন্যান্য পরামিতিগুলির সাথে adb shell content কমান্ড ব্যবহার করে এটি অ্যাক্সেস করতে পারেন।

অ্যাপ ডেভেলপারদের জন্য ওয়ার্কআউন্ড

push বা pull কমান্ডের পরিবর্তে adb content এবং ContentProvider এর একটি উদাহরণ ব্যবহার করে পরীক্ষা ফাইলগুলির সাথে ইন্টারঅ্যাক্ট করুন৷

  1. অ্যাপ দ্বারা হোস্ট করা ContentProvider একটি উদাহরণ তৈরি করুন যা প্রয়োজনে ফাইলগুলিকে পরিবেশন/সঞ্চয় করতে পারে৷ অ্যাপের ইন্টারনাল স্টোরেজ ব্যবহার করুন।
  2. ফাইল পুশ/টান করতে 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 ( স্ট্যাটাস চেকারে বর্ণিত) ব্যবহার করুন যা ব্যবহারকারীর অবস্থা পরিবর্তন করে কারণ এটি নিশ্চিত করে যে পরীক্ষাটি নিজের পরে সঠিকভাবে পরিষ্কার হয়।