Trang này mô tả các khía cạnh quan trọng của việc kiểm thử nhiều người dùng trên nền tảng Android. Để biết thông tin về cách triển khai tính năng hỗ trợ nhiều người dùng, hãy xem Hỗ trợ nhiều người dùng.
Đường dẫn thiết bị
Bảng sau đây liệt kê một số đường dẫn thiết bị và cách giải quyết các đường dẫn đó. Tất cả giá trị trong cột Path (Đường dẫn) đều là bộ nhớ cát dành riêng cho người dùng. Câu chuyện về bộ nhớ của Android đã thay đổi theo thời gian; đọc Tài liệu về Bộ nhớ để biết thêm thông tin.
Đường dẫn | Đường dẫn hệ thống (không bắt buộc) | Mục đích |
---|---|---|
/data/user/{userId}/{app.path}
|
/data/data
|
Bộ nhớ ứng dụng |
/storage/emulated/{userId}
|
/sdcard
|
Bộ nhớ trong dùng chung |
/data/media/{userId}
|
none | Dữ liệu nội dung nghe nhìn của người dùng (ví dụ: nhạc, video) |
/data/system/users/{userId}
|
none | Cấu hình/trạng thái hệ thống trên mỗi người dùng
Chỉ các ứng dụng hệ thống mới có thể truy cập |
Dưới đây là ví dụ về cách sử dụng đường dẫn dành riêng cho người dùng:
# to access user 10's private application data for app com.bar.foo:
$ adb shell ls /data/user/10/com.bar.foo/
hoạt động tương tác với adb giữa người dùng
Một số lệnh adb
sẽ hữu ích khi xử lý nhiều người dùng. Một số
các lệnh này chỉ được hỗ trợ trong Android 9 và
cao hơn:
adb shell am instrument --user <userId>
chạy một bài kiểm thử đo lường đối với một người dùng cụ thể. Theo mặc định, phương thức này sử dụng người dùng hiện tại.adb install --user <userId>
cài đặt một gói cho một người dùng cụ thể. Người nhận đảm bảo rằng một gói được cài đặt cho tất cả người dùng, bạn phải gọi lệnh này cho mọi người dùng.adb uninstall --user <userId>
gỡ cài đặt một gói cho một người dùng cụ thể. Gọi mà không có cờ--user
để gỡ cài đặt cho tất cả người dùng.adb shell am get-current-user
nhận mã nhận dạng người dùng hiện tại (nền trước).adb shell pm list users
nhận danh sách tất cả người dùng hiện tại.adb shell pm create-user
tạo một người dùng mới, trả về mã nhận dạng.adb shell pm remove-user
xoá một người dùng cụ thể theo mã nhận dạng.adb shell pm disable --user <userId>
tắt một gói cho một người dùng cụ thể.adb shell pm enable --user <userId>
bật một gói cho một người dùng cụ thể.adb shell pm list packages --user <userId>
liệt kê các gói (-e
đối với gói đã bật,-d
đối với gói đã tắt) cho một người dùng cụ thể. Theo mặc định, mục này luôn liệt kê cho người dùng hệ thống.
Thông tin sau đây giúp giải thích cách adb
hoạt động với nhiều người dùng:
adb
(hay chính xác hơn là trình nềnadbd
) luôn chạy dưới dạng hệ thống user (mã nhận dạng người dùng = 0) bất kể người dùng hiện tại là người dùng nào. Do đó, thiết bị các đường dẫn phụ thuộc vào người dùng (chẳng hạn như/sdcard/
) luôn phân giải là người dùng hệ thống. Xem bài viết Đường dẫn thiết bị để biết thêm thông tin chi tiết.Nếu bạn không chỉ định người dùng mặc định, thì mỗi lệnh con
adb
sẽ có một người dùng khác nhau. Cách hay nhất là truy xuất mã nhận dạng người dùng bằngam get-current-user
, sau đó là hãy sử dụng--user <userId>
một cách rõ ràng cho mọi lệnh hỗ trợ lệnh này. Cờ người dùng rõ ràng không được hỗ trợ cho tất cả các lệnh cho đến Android 9.Quyền truy cập vào các đường dẫn
/sdcard
của người dùng phụ sẽ bị từ chối kể từ Android 9. Hãy xem phần Trình cung cấp nội dung cho dữ liệu nhiều người dùng để biết thông tin chi tiết về cách truy xuất tệp trong quá trình kiểm thử.
Nhà cung cấp nội dung cho dữ liệu nhiều người dùng
Vì adb
chạy dưới dạng người dùng hệ thống và dữ liệu được đưa vào hộp cát trong Android 9 trở lên, nên bạn phải sử dụng trình cung cấp nội dung để đẩy hoặc lấy mọi dữ liệu kiểm thử từ người dùng không phải hệ thống. Bạn không cần làm việc này nếu:
adbd
đang chạy dưới dạng thư mục gốc (thông quaadb root
). Điều này chỉ có thể thực hiện bằng cách sử dụng Bản dựnguserdebug
hoặcusereng
.Bạn đang sử dụng
ITestDevice
của Liên minh thương mại (Tradefed) để đẩy hoặc kéo các tệp, trong trường hợp này, hãy sử dụng đường dẫn/sdcard/
trong cấu hình kiểm thử (ví dụ: xem mã nguồn chopushFile
trongNativeDevice.java
).
Khi trình cung cấp nội dung đang chạy trong người dùng phụ, bạn có thể truy cập trình cung cấp đó bằng cách
bằng lệnh adb shell content
với user
, uri
và
các thông số khác được chỉ định.
Giải pháp cho nhà phát triển ứng dụng
Tương tác với các tệp kiểm thử bằng adb content
và một thực thể của
ContentProvider
thân mến!
thay vì lệnh push
hoặc pull
.
- Tạo một thực thể của
ContentProvider
do ứng dụng lưu trữ, có thể phân phát và lưu trữ các tệp khi cần. Dùng bộ nhớ trong của ứng dụng. - Sử dụng các lệnh
adb shell content
read
hoặcwrite
để đẩy hoặc kéo tệp.
Giải pháp cho tệp đa phương tiện
Để đẩy tệp phương tiện vào phân vùng phương tiện của thẻ SD, hãy sử dụng API công khai MediaStore
. Ví dụ:
# 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
Cài đặt trình cung cấp nội dung chung
Cài đặt và sử dụng một trình cung cấp nội dung hiện có có chức năng đọc và ghi tệp vào
đường dẫn /sdcard
dành riêng cho người dùng.
Tạo TradefedContentProvider.apk
từ nguồn bằng cách sử dụng
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
```
Hỗ trợ nhiều người dùng của Liên đoàn Thương mại
Tradefed là bộ kiểm thử Android chính thức. Phần này tóm tắt một số tính năng hỗ trợ tích hợp của Tradefed cho các trường hợp kiểm thử nhiều người dùng.
Trình kiểm tra trạng thái
Trình kiểm tra trạng thái hệ thống (SSC) được chạy trước trình chuẩn bị mục tiêu và quá trình dọn dẹp của chúng được chạy sau các trình chuẩn bị đó.
UserChecker
được xác định rõ ràng để hỗ trợ nhà phát triển khi thử nghiệm nhiều người dùng. Chiến dịch này theo dõi
liệu thử nghiệm có thay đổi trạng thái của người dùng trên thiết bị hay không (ví dụ:
tạo người dùng mà không cần loại bỏ từng người dùng). Ngoài ra, nếu user-cleanup
được thiết lập, hệ thống sẽ tự động tìm cách dọn dẹp sau khi kiểm tra, trong khi vẫn
cung cấp các lỗi hữu ích để thử nghiệm có thể được sửa.
<system_checker class="com.android.tradefed.suite.checker.UserChecker" >
<option name="user-cleanup" value="true" />
</system_checker>
Người chuẩn bị mục tiêu
Trình chuẩn bị mục tiêu thường được dùng để thiết lập một thiết bị có cấu hình cụ thể. Trong trường hợp có thể sử dụng trình chuẩn bị kiểm thử nhiều người dùng để tạo người dùng thuộc một loại cụ thể cũng như chuyển sang người dùng khác.
Đối với các loại thiết bị không có người dùng phụ, bạn có thể sử dụng
CreateUserPreparer
để tạo và chuyển sang người dùng phụ trong
AndroidTest.xml
. Khi kết thúc kiểm thử, trình chuẩn bị sẽ chuyển về và xoá người dùng phụ.
<target_preparer
class="com.google.android.tradefed.targetprep.CreateUserPreparer" >
</target_preparer>
Nếu loại người dùng mà bạn muốn đã tồn tại trên thiết bị, hãy sử dụng SwitchUserTargetPreparer
để chuyển sang người dùng hiện có. Các giá trị phổ biến cho
user-type
bao gồm system
hoặc secondary
.
<target_preparer
class="com.android.tradefed.targetprep.SwitchUserTargetPreparer">
<option name="user-type" value="secondary" />
</target_preparer>
Kiểm thử do máy chủ điều khiển
Trong một số trường hợp, kiểm thử cần chuyển đổi người dùng trong quá trình kiểm thử. Đừng chuyển đổi từ trong khung kiểm thử phía thiết bị, chẳng hạn như UI Automator, vì quá trình kiểm thử có thể bị tắt bất cứ lúc nào. Thay vào đó, hãy sử dụng phía máy chủ
khung thử nghiệm như Thử nghiệm do máy chủ lưu trữ của Tradefeed
khung,
Công cụ này cấp quyền truy cập vào
ITestDevice
,
cho phép thao tác đối với người dùng nếu cần.
Sử dụng UserChecker
(được mô tả trong phần Trình kiểm tra trạng thái) cho các kiểm thử do máy chủ điều khiển thay đổi trạng thái người dùng vì nó đảm bảo rằng kiểm thử sẽ dọn dẹp đúng cách sau khi kiểm thử.