mockdevice-testing

tarafından facebook

Fiziksel gözlük donanımı olmadan test yapmak için MockDeviceKit

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

Phone camera as the feed

setCameraFeed(CameraFacing) sources frames from the handset camera, so the app needs android.permission.CAMERA in the manifest and at runtime. That is not the DAT Permission.CAMERA covered by MockDeviceKitConfig(initialPermissionsGranted = true) — no real-glasses path needs the handset grant, so an existing integration will never have requested it.

Grant it before calling setCameraFeed; in instrumentation tests, pm grant <your.package> android.permission.CAMERA. Without it the mock rejects the stream start and the failure names the missing permission. setCameraFeed(Uri) has no such requirement.

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

facebook tarafından daha fazla skill

gc-safe-coding
facebook
Tam açıklama ve gerekçe için doc/GCSafeCoding.md dosyasına bakın.
app-review-prep
facebook
Meta uygulamasını App Review için hazırlayın — mevcut durumu, bekleyen gereksinimleri, verilen ayrıcalıkları ve gönderim geçmişini kontrol eder. Bir uygulama göndermeden önce kullanın…
api-health
facebook
Bir Meta uygulaması için API sağlığını izleyin — hız sınırlarını, çağrı hacmini ve API kullanımdan kaldırmalarını kontrol edin. Azaltmayı teşhis etmek, kapasite planlamak veya API sürümüne hazırlanmak için kullanın…
debug-webhooks
facebook
Meta uygulaması için webhook sorunlarını giderin — aktif abonelikleri inceleyin, yanlış yapılandırmayı tespit edin ve teslimatı doğrulamak için test yükleri gönderin. Şu durumlarda kullanın…
api-integration
facebook
Bir geliştiriciyi sıfırdan Meta API entegrasyonu kurma konusunda yönlendirir — doğru API'leri keşfeder, kurulum kılavuzlarını getirir, kimlik doğrulama gereksinimlerini kontrol eder,…
webhook-setup
facebook
Bir Meta uygulaması için webhook'ları uçtan uca kurun — mevcut konuları keşfedin, alanlara abone olun ve bir test payload'ı ile doğrulayın. Webhook yapılandırırken kullanın…
test-ui
facebook
Test UI sistemini (PanelUI, ScreenSpace) poke örneğine karşı iwsdk CLI kullanarak test edin.
flags
facebook
React sürüm kanalları arasında özellik bayrağı durumlarını inceleyin ve karşılaştırın. Tüm bayrakları kanallar arasında (www, www-modern, canary, next, experimental, rn varyantları) görüntüleyin veya --diff ile belirli kanalları karşılaştırın. Çıktı biçimleri varsayılan tablo görünümü, CSV dışa aktarma ve temizlik durumu gruplandırmasını içerir. Bayrak durumları sembollerle gösterilir: etkin (✅), devre dışı (❌), varyant testi (🧪), yalnızca profil oluşturma (📊). Yaygın tuzak: __VARIANT__ bayrakları www üzerinde her iki durumda da test edilir; anlamlı farklılı