mockdevice-testing

bởi facebook

MockDeviceKit dùng để kiểm thử mà không cần phần cứng kính thực tế.

npx skills add https://github.com/facebook/meta-wearables-dat-android --skill mockdevice-testing

MockDevice Testing (Android)

Use MockDeviceKit to test DAT SDK integrations without physical Meta glasses.

MockDeviceKit simulates Meta glasses behavior for development and testing. It provides:

  • MockDeviceKit — Entry point for creating simulated devices
  • MockGlasses — Simulated Ray-Ban Meta glasses
  • MockCameraKit — Simulated camera with configurable video feed and photo capture

Setup

Add mwdat-mockdevice to your Gradle dependencies:

dependencies {
    implementation(libs.mwdat.mockdevice)
}

Creating a mock device

import com.meta.wearable.dat.mockdevice.MockDeviceKit
import com.meta.wearable.dat.mockdevice.api.MockDeviceKitConfig

val mockDeviceKit = MockDeviceKit.getInstance(context)

// Attach fake registration and connectivity (auto-initializes Wearables if needed).
// By default, Wearables.registrationState transitions to Registered.
mockDeviceKit.enable()

// Or start in unregistered state to test registration flows:
// mockDeviceKit.enable(MockDeviceKitConfig(initiallyRegistered = false))

val device = mockDeviceKit.pairGlasses(GlassesModel.RAYBAN_META).getOrThrow()

You can check mockDeviceKit.isEnabled to query whether the mock environment is active.

Simulating device states

// Simulate glasses lifecycle
device.powerOn()
device.unfold()
device.don()    // Simulate wearing the glasses

// Later...
device.doff()   // Simulate removing
device.fold()
device.powerOff()

Configuring permissions

MockDeviceKit provides permissions to control permission behavior without the Meta AI app.

By default, RequestPermissionContract returns Granted. Use set() to control checkPermissionStatus() and setRequestResult() to control request outcomes.

val mockDeviceKit = MockDeviceKit.getInstance(context)

// Simulate denied camera permission status
mockDeviceKit.permissions.set(Permission.CAMERA, PermissionStatus.Denied)

// Simulate denied request result (user tapping "deny")
mockDeviceKit.permissions.setRequestResult(Permission.CAMERA, PermissionStatus.Denied)

Setting up mock camera feeds

Video streaming

val camera = device.services.camera
camera.setCameraFeed(videoUri)

Photo capture

val camera = device.services.camera
camera.setCapturedImage(imageUri)

Note: Android doesn't transcode video automatically. Mock video files must be in h.265 format. Use FFmpeg to convert:

ffmpeg -hwaccel videotoolbox -i input.mp4 -c:v hevc_videotoolbox -c:a aac_at -tag:v hvc1 -vf "scale=540:960" output.mov

Writing instrumentation tests

Create a reusable test base class:

import android.content.Context
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.platform.app.InstrumentationRegistry
import com.meta.wearable.dat.mockdevice.MockDeviceKit
import com.meta.wearable.dat.mockdevice.api.MockDeviceKitInterface
import org.junit.After
import org.junit.Before
import org.junit.Rule

open class MockDeviceKitTestCase<T : Any>(
    private val activityClass: Class<T>
) {
    @get:Rule
    val scenarioRule = ActivityScenarioRule(activityClass)

    protected lateinit var mockDeviceKit: MockDeviceKitInterface
    protected lateinit var targetContext: Context

    @Before
    open fun setUp() {
        val instrumentation = InstrumentationRegistry.getInstrumentation()
        targetContext = instrumentation.targetContext
        mockDeviceKit = MockDeviceKit.getInstance(targetContext)
        grantRuntimePermissions()
    }

    @After
    open fun tearDown() {
        mockDeviceKit.disable()
    }

    private fun grantRuntimePermissions() {
        val packageName = targetContext.packageName
        val shell = InstrumentationRegistry.getInstrumentation().uiAutomation
        shell.executeShellCommand("pm grant $packageName android.permission.BLUETOOTH_CONNECT")
        shell.executeShellCommand("pm grant $packageName android.permission.CAMERA")
    }
}

Using MockDeviceKit in the CameraAccess sample

The CameraAccess sample app includes a Debug menu for MockDeviceKit:

  1. Tap the Debug icon to open the MockDeviceKit menu
  2. Tap Pair RayBan Meta to create a simulated device
  3. Use PowerOn, Unfold, Don to simulate glasses states
  4. Select video/image files for mock camera feeds
  5. Start streaming to see simulated frames

Supported media formats

TypeFormats
Videoh.264 (AVC), h.265 (HEVC)
ImageJPEG, PNG

Links

Thêm skills từ facebook

binary-size-analysis
facebook
Phân tích thay đổi kích thước tệp nhị phân theo từng commit của thư viện dùng chung hermesvm trong một phạm vi commit git. Tạo báo cáo markdown với kích thước theo từng commit và bảng tóm tắt các mức tăng giảm đáng kể.
official
modify-jsi-features
facebook
Hướng dẫn thêm chức năng JSI mới vào lớp Giao diện JavaScript (JSI). Sử dụng khi người dùng yêu cầu thêm, tạo hoặc triển khai các phương thức hoặc tính năng mới trong…
official
non-interactive-git-rebase
facebook
Sử dụng khi cần sắp xếp lại, tách, bỏ hoặc sửa đổi các commit git không phải là commit trên cùng, mà không cần truy cập trình chỉnh sửa tương tác. Bao gồm rebase theo chương trình thông qua…
official
click-target
facebook
Tìm và nhấp vào đối tượng mục tiêu trong XR. Sử dụng khi kiểm tra tương tác giao diện, nhấp nút hoặc xác minh các phần tử có thể tương tác hoạt động chính xác.
official
iwsdk-planner
facebook
Hướng dẫn lập kế hoạch dự án IWSDK và các phương pháp tốt nhất. Sử dụng khi lập kế hoạch tính năng IWSDK mới, thiết kế hệ thống/thành phần, xem xét kiến trúc mã IWSDK, hoặc khi…
official
iwsdk-ui-panel
facebook
Phát triển và lặp lại các bảng điều khiển giao diện IWSDK một cách hiệu quả. Sử dụng khi làm việc với các thành phần PanelUI, gỡ lỗi bố cục giao diện, hoặc cải thiện thiết kế giao diện trong các ứng dụng IWSDK.
official
test-all
facebook
Bộ điều phối kiểm thử song song. Chạy đồng thời tất cả 9 bộ kiểm thử thông qua các tác tử con Task và CLI iwsdk. Xử lý build, thiết lập ví dụ, máy chủ dev, khởi chạy tác tử,…
official
test-audio
facebook
Kiểm tra hệ thống âm thanh (tải AudioSource, trạng thái phát, dừng, âm thanh không gian) so với ví dụ âm thanh sử dụng CLI iwsdk.
official