atest가 기기 테스트를 실행하면 atest는 테스트 바이너리와 리소스를 /data 파티션에 푸시하고 adb shell로 실행합니다. 테스트 실행 파일은 shell SELinux 도메인을 사용하므로 shell 도메인과 연결된 SELinux 정책 를 수신합니다. 기기가 강제 SELinux 모드로 실행되면 이러한 정책을 위반하는 기기 테스트는 SELinux 오류와 함께 실패합니다.
특히 shell 도메인에는 다음을 위한 allow 규칙이 없습니다.
/vendor파티션에 설치된 라이브러리와의 연결을 비롯하여/vendor파티션의 파일에 액세스임의의 바인더 인터페이스를 호출합니다.
기기 테스트에 이러한 권한 중 하나 또는 둘 다 필요한 경우 root 권한으로 테스트를 실행해야 합니다. adbd에 루트 권한이 있으면 adbd는 권한이 더 많은 shell 대신 기기에서 su SELinux 도메인을 사용합니다.
루트 권한을 사용하여 기기 테스트를 실행하려면 Android.bp 파일의 해당 Soong 모듈 정의에 require_root: true 속성을 추가합니다.
// file: Android.bp
rust_test {
name: "example_rust_test_that requires root",
// ...
rustlibs: [
"some-vendor-lib",
],
// This example test requires root permissions, because it calls Binder
// interfaces unavailable for the shell, and also links with a vendor
// library.
require_root: true,
}