Bu sayfada, Android platformunda birden fazla kullanıcıyı test etmenin önemli yönleri açıklanmaktadır. Çok kullanıcılı desteği uygulama hakkında bilgi edinmek için Birden çok kullanıcıyı destekleme başlıklı makaleyi inceleyin.
Cihaz yolları
Aşağıdaki tabloda, cihaz yollarından birkaçı ve bunların nasıl çözümlendiği listelenmektedir. Yol sütunundaki tüm değerler, kullanıcıya özel, korumalı alana alınmış bir depolama alanıdır. Android'in depolama alanı hikayesi zamanla değişti. şunu okuyun: Storage belgelerine göz atın.
Yol | Sistem yolu (isteğe bağlı) | Amaç |
---|---|---|
/data/user/{userId}/{app.path}
|
/data/data
|
Uygulama depolama alanı |
/storage/emulated/{userId}
|
/sdcard
|
Paylaşılan dahili depolama |
/data/media/{userId}
|
yok | Kullanıcı medya verileri (ör. müzik, videolar) |
/data/system/users/{userId}
|
yok | Kullanıcı başına sistem yapılandırması/durumu
Yalnızca sistem uygulamaları tarafından erişilebilir |
Kullanıcıya özel bir yol kullanma örneğini aşağıda bulabilirsiniz:
# 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 çalışırken çeşitli adb
komutları 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 araç testi çalıştırır. Varsayılan olarak, geçerli kullanıcı kullanılır.adb install --user <userId>
, belirli bir kullanıcı için bir paket yükler. Bir paketin tüm kullanıcılar için yüklenmesini sağlamak istiyorsanız bu işlevi her kullanıcı için çağırmanız gerekir.adb uninstall --user <userId>
, belirli bir kullanıcı için paketi kaldırır. Tüm kullanıcılar için yüklemeyi kaldırmak üzere--user
işareti olmadan çağrı yapın.adb shell am get-current-user
, mevcut (ön plan) kullanıcı kimliğini alır.adb shell pm list users
, mevcut tüm kullanıcıların listesini alır.adb shell pm create-user
, yeni bir kullanıcı oluşturup kimliği döndürür.adb shell pm remove-user
, kimliğe göre belirli bir kullanıcıyı 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>
, bir paketi belirli bir kullanıcı için etkinleştirir.adb shell pm list packages --user <userId>
, belirli bir kullanıcının paketlerini (etkin için-e
, devre dışı için-d
) listeler. Bu, varsayılan olarak her zaman sistem kullanıcısını listeler.
Aşağıdaki bilgiler, adb
'ün birden fazla kullanıcıyla nasıl davrandığını açıklamaya yardımcı olur:
adb
(veya daha doğrusuadbd
daemon'ı) mevcut kullanıcıdan bağımsız olarak her zaman sistem kullanıcısı (kullanıcı kimliği = 0) olarak çalışır. Bu nedenle, kullanıcıya bağlı cihaz yolları (/sdcard/
gibi) her zaman sistem kullanıcısı olarak çözülür. Daha fazla ayrıntı için Cihaz yolları bölümüne bakın.Varsayılan bir kullanıcı belirtilmezse her
adb
alt komutunun farklı bir kullanıcısı olur. En iyi uygulama, kullanıcı kimliğiniam get-current-user
ile almak ve ardından bunu destekleyen tüm komutlar için--user <userId>
'yi açıkça kullanmaktır. Android 9'a kadar açık kullanıcı işaretleri tüm komutlar için desteklenmiyordu.Android 9'dan itibaren ikincil kullanıcıların
/sdcard
yollarına erişim 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 içerik sağlayıcı başlıklı makaleyi inceleyin.
Çok kullanıcılı veriler için içerik sağlayıcı
adb
sistem kullanıcısı olarak çalıştığı ve veriler Android 9 ve sonraki sürümlerde korumalı alanda bulunduğu için sistem kullanıcısı olmayan bir kullanıcıdan test verilerini göndermek veya almak için içerik sağlayıcıları kullanmanız gerekir. Aşağıdaki durumlarda bu işlem gerekmez:
adbd
, yalnızcaadb root
userdebug
veyausereng
derleme.Ticari Federasyon (Ticaret Federasyonu)
ITestDevice
dosyaları aktarmak veya çekmek için test edin. Bu durumda, testinizde/sdcard/
yollarını kullanın (örneğin,pushFile
için kaynak koduna bakın.)NativeDevice.java
) dokunun.
Bir içerik sağlayıcı ikincil kullanıcıda çalışıyorsa ona
adb shell content
komutunu uygun user
, uri
ve
belirtilen diğer parametreler.
Uygulama geliştiriciler için geçici çözüm
push
veya pull
komutu yerine adb content
ve ContentProvider
örneğini kullanarak test dosyalarıyla etkileşime geçin.
- Uygulama tarafından barındırılan ve gerektiğinde dosya yayınlayıp depolayabilen bir
ContentProvider
örneği oluşturun. Uygulamanın dahili depolama alanını kullanın. - Dosyaları aktarmak veya çekmek için
adb shell content
read
ya dawrite
komutlarını kullanın.
Medya dosyaları için geçici çözüm
Medya dosyalarını SD kartın medya bölümüne aktarmak için MediaStore
genel API'lerini kullanın. Örnek:
# 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 içerik sağlayıcı yükleme
Kullanıcıya özel /sdcard
yoluna dosya okuyup yazan mevcut bir içerik sağlayıcıyı yükleyip kullanın.
TradefedContentProvider.apk
öğesini şuradan derleyin:
make TradefedContentProvider
:
```
# 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 çok kullanıcılı desteği
Resmi şirket Tradefed'dir Android test bandı. Bu bölümde, Tradefed'in yerleşik olarak bulunan çok kullanıcılı test senaryoları için destek sağlar.
Durum kontrolörleri
Sistem durumu kontrolörleri (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
, geliştiricilerin birden fazla kullanıcıyı test ederken yardımcı olması için açıkça tanımlanır. İzler
Bir testin cihazdaki kullanıcıların durumunu değiştirip değiştirmediği (örneğin,
kullanıcı oluşturma işlemi). Ayrıca, user-cleanup
ayarlanmışsa testten sonra otomatik olarak temizlik yapmaya çalışır.
testin düzeltilebilmesi için yararlı hatalar sunar.
<system_checker class="com.android.tradefed.suite.checker.UserChecker" >
<option name="user-cleanup" value="true" />
</system_checker>
Hedef hazırlayan
Hedef hazırlayıcılar genellikle belirli bir yapılandırma. Çok kullanıcılı testler söz konusu olduğunda, test hazırlayıcılar diğer kullanıcılara geçiş yapmayı öğretiyor.
İkincil kullanıcısı olmayan cihaz türleri için şunları kullanabilirsiniz:
CreateUserPreparer
oluşturmak için kullanıcı ve bu kullanıcıya geçiş yapın
AndroidTest.xml
. 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
simgesini kullanın. Şunun için ortak değerler:
user-type
, system
veya secondary
içerir.
<target_preparer
class="com.android.tradefed.targetprep.SwitchUserTargetPreparer">
<option name="user-type" value="secondary" />
</target_preparer>
Ana makineye dayalı testler
Bazı durumlarda, bir testin test içinde kullanıcıları değiştirmesi gerekir. Şunları Yapmayın:
gibi bir cihaz tarafı test çerçevesinden (ör.
Kullanıcı Arayüzü Otomatikleştirici,
çünkü test süreci her an sonlandırılabilir. Bunun yerine, bir ana makine tarafı
Tradefed'in Ana makineye dayalı testi gibi bir test çerçevesi
çerçeve
Bu da proje yaşam döngüsü
ITestDevice
,
gerekli kullanıcı manipülasyonuna izin vererek.
UserChecker
kullanın (şurada açıklanmıştır:
Değişen ana makine tabanlı testler için durum denetleyicileri)
temizlenmesini sağlar çünkü bu, testin kendisinden sonra düzgün bir şekilde temizlenmesini sağlar.