Bu sayfada, Android platformunda birden fazla kullanıcıyı test etmenin önemli yönleri açıklanmaktadır. Çoklu kullanıcı desteğinin uygulanması hakkında bilgi için bkz. Birden Çok Kullanıcıyı Destekleme .
Cihaz yolları
Aşağıdaki tabloda birkaç aygıt yolu ve bunların nasıl çözümlendiği listelenmektedir. Yol sütunundaki tüm değerler, kullanıcıya özel korumalı alan depolama alanıdır. Android'in depolama öyküsü zamanla değişti; daha fazla bilgi için Depolama belgelerini okuyun.
Yol | Sistem yolu (isteğe bağlı) | Amaç |
---|---|---|
/data/user/{userId}/{app.path} | /data/data | Uygulama depolama |
/storage/emulated/{userId} | /sdcard | Paylaşılan dahili depolama |
/data/media/{userId} | hiçbiri | Kullanıcı medya verileri (örneğin müzik, videolar) |
/data/system/users/{userId} | hiçbiri | Kullanıcı başına sistem yapılandırması/durumu Yalnızca sistem uygulamaları tarafından erişilebilir |
Aşağıda kullanıcıya özel bir yol kullanmanın bir örneği verilmiştir:
# to access user 10's private application data for app com.bar.foo:
$ adb shell ls /data/user/10/com.bar.foo/
kullanıcılar arasındaki adb etkileşimleri
Birden fazla kullanıcıyla uğraşırken birkaç adb
komutu faydalıdır. Bu komutlardan bazıları yalnızca Android 9 ve sonraki sürümlerde desteklenir:
-
adb shell am instrument --user <userId>
belirli bir kullanıcıya karşı bir enstrümantasyon testi çalıştırır. Varsayılan olarak bu, geçerli kullanıcıyı kullanır. -
adb install --user <userId>
belirli bir kullanıcı için bir paket yükler. Bir paketin tüm kullanıcılar için kurulduğunu garanti etmek amacıyla bunu her kullanıcı için çağırmanız gerekir. -
adb uninstall --user <userId>
belirli bir kullanıcı için bir paketi kaldırır. Tüm kullanıcılar için kaldırma işlemini--user
bayrağı olmadan arayın. -
adb shell am get-current-user
geçerli (ön plandaki) kullanıcı kimliğini alır. -
adb shell pm list users
mevcut tüm kullanıcıların bir listesini alır. -
adb shell pm create-user
kimliği döndürerek yeni bir kullanıcı oluşturur. -
adb shell pm remove-user
belirli bir kullanıcıyı kimliğe göre kaldırır. -
adb shell pm disable --user <userId>
belirli bir kullanıcı için bir paketi devre dışı bırakır. -
adb shell pm enable --user <userId>
belirli bir kullanıcı için bir paketi etkinleştirir. -
adb shell pm list packages --user <userId>
belirli bir kullanıcı için paketleri (etkin için-e
, devre dışı için-d
) listeler. Varsayılan olarak bu her zaman sistem kullanıcısı için listelenir.
Aşağıdaki bilgiler adb
birden fazla kullanıcıyla nasıl davrandığını açıklamaya yardımcı olur:
adb
(veya daha doğrusuadbd
arka plan programı), hangi kullanıcının geçerli olduğuna bakılmaksızın her zaman sistem kullanıcısı (kullanıcı kimliği = 0) olarak çalışır. Bu nedenle kullanıcıya bağlı aygıt yolları (örneğin/sdcard/
) her zaman sistem kullanıcısı olarak çözümlenir. Daha fazla ayrıntı için Cihaz yolları konusuna bakın.Varsayılan bir kullanıcı belirtilmemişse her
adb
alt komutunun farklı bir kullanıcısı vardır. En iyi uygulama, kullanıcı kimliğiniam get-current-user
ile almak ve ardından onu destekleyen herhangi bir komut için açıkça--user <userId>
kullanmaktır. Açık kullanıcı bayrakları, Android 9'a kadar tüm komutlar için desteklenmiyordu.İkincil kullanıcıların
/sdcard
yollarına erişimi, Android 9'dan itibaren reddedilir. Test sırasında dosyaların nasıl alınacağıyla ilgili ayrıntılar için Çok kullanıcılı veriler için İçerik sağlayıcı'ya bakın.
Çok kullanıcılı veriler için içerik sağlayıcı
adb
sistem kullanıcısı olarak çalıştığından ve veriler Android 9 ve sonraki sürümlerde korumalı alana alındığından, sistem dışı bir kullanıcıdan herhangi bir test verisini göndermek veya çekmek için içerik sağlayıcıları kullanmanız gerekir. Aşağıdaki durumlarda bu gerekli değildir :
adbd
root olarak çalışıyor (adb root
aracılığıyla), bu yalnızcauserdebug
veyausereng
yapıları kullanılarak mümkün.Dosyaları itmek/çekmek için Ticaret Federasyonu'nun (Tradefed'in)
ITestDevice
kullanıyorsunuz; bu durumda test yapılandırmanızda/sdcard/
yollarını kullanın (örneğin,NativeDevice.java
pushFile
kaynak koduna bakın).
İkincil kullanıcıda bir içerik sağlayıcı çalışırken, uygun user
, uri
ve belirtilen diğer parametrelerle adb shell content
komutunu kullanarak ona erişebilirsiniz.
Uygulama geliştiricileri için geçici çözüm
push
veya pull
komutu yerine adb content
ve ContentProvider
örneğini kullanarak test dosyalarıyla etkileşim kurun.
- Gerektiğinde dosyaları sunabilecek/depolayabilecek, uygulama tarafından barındırılan bir
ContentProvider
örneği oluşturun. Uygulamanın dahili depolama alanını kullanın. - Dosyaları itmek/çekmek için
adb shell content
read
veyawrite
komutlarını kullanın.
Medya dosyaları için geçici çözüm
Medya dosyalarını SD kartın medya bölümüne göndermek için MediaStore
genel API'lerini kullanın. Örneğin:
# 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
Genel bir içerik sağlayıcı yükleme
Dosyaları kullanıcıya özel /sdcard
yoluna okuyan ve yazan mevcut bir içerik sağlayıcıyı kurun ve kullanın.
make TradefedContentProvider
kullanarak kaynaktan TradefedContentProvider.apk
dosyasını oluşturun.
```
# 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
```
Ticaret Federasyonu çoklu kullanıcı desteği
Tradefed resmi Android test donanımıdır. Bu bölüm Tradefed'in çok kullanıcılı test senaryolarına yönelik yerleşik desteğinin bir kısmını özetlemektedir.
Durum denetleyicileri
Sistem durumu denetleyicileri (SSC'ler) hedef hazırlayıcılardan önce çalıştırılır ve temizleme işlemleri bu hazırlayıcılardan sonra çalıştırılır.
UserChecker
birden fazla kullanıcıyı test ederken geliştiricilere yardımcı olmak için açıkça tanımlanmıştır. Bir testin cihazdaki kullanıcıların durumunu değiştirip değiştirmediğini (örneğin, sökme işleminde kaldırmadan kullanıcılar oluşturup oluşturmadığını) izler. Ayrıca, user-cleanup
ayarlanmışsa testten sonra otomatik olarak temizlemeye çalışır ve testin düzeltilebilmesi için yararlı hatalar sağlamaya devam eder.
<system_checker class="com.android.tradefed.suite.checker.UserChecker" >
<option name="user-cleanup" value="true" />
</system_checker>
Hedef hazırlayıcı
Hedef hazırlayıcılar genellikle belirli bir konfigürasyona sahip bir cihazı kurmak için kullanılır. Çok kullanıcılı test durumunda, hazırlayıcılar belirli bir türde kullanıcılar oluşturmak ve diğer kullanıcılara geçiş yapmak için kullanılabilir.
İkincil kullanıcısı olmayan cihaz türleri için, AndroidTest.xml
dosyasında ikincil bir kullanıcı oluşturmak ve bu kullanıcıya geçiş yapmak için CreateUserPreparer
kullanabilirsiniz. Testin sonunda hazırlayıcı geri döner ve ikincil kullanıcıyı siler.
<target_preparer
class="com.google.android.tradefed.targetprep.CreateUserPreparer" >
</target_preparer>
İstediğiniz kullanıcı türü cihazda zaten mevcutsa mevcut kullanıcıya geçmek için SwitchUserTargetPreparer
kullanın. user-type
için ortak değerler arasında system
veya secondary
bulunur.
<target_preparer
class="com.android.tradefed.targetprep.SwitchUserTargetPreparer">
<option name="user-type" value="secondary" />
</target_preparer>
Ana bilgisayar odaklı testler
Bazı durumlarda testin, test içindeki kullanıcıları değiştirmesi gerekir. UI Automator gibi cihaz tarafı test çerçevesinden geçiş yapmayın çünkü test süreci herhangi bir zamanda sonlandırılabilir. Bunun yerine, Tradefed'in Host-Driven Test Framework gibi, ITestDevice
erişim sağlayan ve ihtiyaç duyulan her türlü kullanıcı manipülasyonuna izin veren bir ana bilgisayar tarafı test çerçevesi kullanın.
Testin kendi kendine temizlenmesini sağladığı için kullanıcı durumunu değiştiren ana bilgisayar odaklı testler için UserChecker
( Durum denetleyicileri bölümünde açıklanmıştır) kullanın.