기기 테스트용 SELinux 정책

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,
}