Supported native APIs
The native components in the following table work on both the VVD and a Fire TV device. Supported means your app can bind to the component and a basic call succeeds. It doesn’t mean that every feature behind the component was tested. The table lists only components whose interfaces ship in Vega SDK 2.0. The Package or API column names the@amazon-devices package that uses the component, where there is one. It also names the Vega Native API reference package and the interface you get from the component.
Content Launcher and Account Login
Your app can register its Content Launcher and Account Login handlers on the VVD. The system features that send requests to those handlers aren’t available on the VVD. These features include the Fire TV Home screen, search, and Alexa voice requests. To test Content Launcher and Account Login integration, use a Fire TV device. For details, see Content Launcher and Account Login Testing.Declare the backing service
The buffer queue component and the EPG provider work only after your manifest declares their backing service. Without the declaration, calls fail on both the VVD and a Fire TV device.-
Buffer queue component: declare the media buffer service in
[[wants.service]]. -
EPG provider: declare the services
com.amazon.tv.developer.dataservice.serviceandcom.amazon.alexa.datastore.servicein[[wants.service]]. Declare the privilegecom.amazon.kepler.tv.privilege.data_providerin[[needs.privilege]]. For details, see Declare EPG Sync Task.
Components not available on the VVD
The components in the following table aren’t included in the VVD in this release. They’re available on a Fire TV device.What your app sees
The result depends on how your manifest declares the component. If your manifest declares the component in[needs], installation fails. Both vega device install-app and vega run-app report the missing module, as in the following example.
[wants], installation succeeds and vega run-app reports that the app launched. After launch, the result depends on your app:
- A native app that looks up the component and checks the result gets
com.amazon.apmf.NoSuchComponentErrorwith the messagecould not find component "<component-id>". - A native app that uses the result without checking it stops with
SIGABRT. The crash report doesn’t name the missing component. - A React Native app that calls Simple Sign-In through
@amazon-devices/simplesigninstops inside the native module. A JavaScripttry/catchblock doesn’t catch this failure, and the app receives no JavaScript error.
How to handle missing components
- Test features that use these components on a Fire TV device.
- To make sure your app still installs on the VVD, declare optional features in
[wants]instead of[needs]. - In native code, check that a component lookup succeeded before you use the result, and handle
NoSuchComponentError. - While you test on the VVD, don’t call Simple Sign-In. For example, put the call behind a flag in your test builds.
- Test sign-in flows on a Fire TV device.
- In native code, use the system information component (
/com.amazon.kepler.system.info, interfaceISystemInfoModule) to check whether the device is an emulator. You can then skip calls to unavailable components on the VVD.
DRM and protected playback
Clear (unencrypted) video playback works on the VVD. For protected playback, the VVD supports Widevine L3 (software robustness) on Mac M-series machines. On other host machines, DRM-protected playback isn’t available. Protected playback has the following limits:- Widevine L3 works, Widevine L1 doesn’t. The VVD includes only a software Widevine module (Widevine L3), so request software robustness when your app runs on the VVD. Widevine L1, hardware-secure robustness levels, and PlayReady aren’t available.
-
Secure robustness requests fail at media key creation. Your app can request
SECURE_DECRYPTorHW_SECURE_ALLrobustness through the native W3C media API or through EME. The key system access request succeeds, but creating the media keys fails with the following error.If your app doesn’t handle this failure, it can crash later, for example when it moves to the background. In testing, a React Native player app that requestedHW_SECURE_ALLcrashed in the foreground.
How to handle DRM limits
- Handle failures from
requestMediaKeySystemAccessand from media key creation. - Don’t assume that media keys exist after key system access succeeds.
- If media key creation fails, show an error or fall back to content your app can play. Don’t continue with a missing DRM session.
- On the VVD, test Widevine-encrypted playback at software robustness (Widevine L3). Use clear content for the rest of your player UI and playback logic.
- To test Widevine L1 (hardware-secure) or PlayReady playback, use a Fire TV device. For details, see Media Player playing DRM content.
Native libraries in task and service components
On the VVD, task and service components can start in a minimal process that doesn’t preload the graphics libraries. In testing, this behavior didn’t affect interactive components. A task or service component can load a shared library that calls OpenGL ES functions but doesn’t link the GL library itself. In that case, the library fails to load and the component doesn’t start. The device log shows an error like the following one.gl* function your library calls. If your interactive component waits on the failed component, your app can stop responding.
How to link the GL libraries
One shared library can serve both your interactive component and your task or service components. If any of that code calls GL functions, link the GL libraries explicitly. The following example shows how to link GLESv2 in CMake.egl* functions, link EGL the same way. Explicit linking makes the dependency visible to the loader on any device. Your library then doesn’t depend on which libraries the system preloads.
Developer tools on the VVD
The following developer tools behave differently on the VVD:- Warm start key performance indicator (KPI): the KPI Visualizer’s warm start measurement can report no value on the VVD. The tool’s setup step can’t switch to the Home screen on the VVD. Measure warm start on a Fire TV device. For details, see Measure App KPIs.
- Launch results:
vega run-appcan report a successful launch for an app that stops right after it starts. For example, a missing component in[wants]can cause this result. For details, see What your app sees.

