### Install and Enable Coturn Source: https://source.android.com/docs/automotive/start/avd/cloud_emulator Install the coturn server and enable it in the default configuration. ```bash sudo apt install coturn systemctl stop coturn echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn ``` -------------------------------- ### Install Node.js and NPM Source: https://source.android.com/docs/automotive/start/avd/cloud_emulator Install the Node.js runtime and package manager. ```bash sudo apt install nodejs npm ``` -------------------------------- ### Install System Dependencies Source: https://source.android.com/docs/automotive/start/avd/cloud_emulator Install Python, Android SDK, and verify CPU virtualization support. ```bash sudo apt update sudo apt install python3 sudo apt-get install python3-venv ``` ```bash sudo apt install android-sdk ``` ```bash egrep -c '(vmx|svm)' /proc/cpuinfo ``` -------------------------------- ### Install and Verify KVM Source: https://source.android.com/docs/automotive/start/avd/cloud_emulator Install Kernel Virtual Machine packages and verify the installation. ```bash sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils ``` ```bash sudo apt install cpu-checker kvm-ok ``` ```text INFO: /dev/kvm exists KVM acceleration can be used ``` -------------------------------- ### Plugin Installation and Configuration Source: https://source.android.com/docs/automotive/hmi/car_ui/plugins?hl=zh-cn Instructions on how to install plugins into the system partition and specific configurations for Android Studio. ```APIDOC ## Plugin Installation **Prerequisites:** The plugin must be pre-installed in the system partition by including the corresponding module in `PRODUCT_PACKAGES`. **Updating Plugins:** Pre-installed plugins can be updated like any other installed application. Applications using the plugin will automatically close and apply the update upon reopening. If the application is not running, it will launch with the updated plugin. ### Android Studio Specifics: * **Installation Bug:** A bug during Android Studio's app installation process can prevent plugin updates from taking effect. * **Fix:** In the plugin's build configuration, select **Always install with package manager (disables deploy optimizations on Android 11 and later)**. * **Activity Not Found Error:** Android Studio may report an error indicating it cannot find the main activity to launch. This is normal as plugins do not have activities (except for an empty intent for parsing). * **Fix:** In the build configuration, change the **Launch** option to **Nothing**. ``` -------------------------------- ### Usage Example: Getting and Using IAutomotiveDisplayProxyService Source: https://source.android.com/docs/automotive/camera/evs/display_proxy Demonstrates the steps to obtain and utilize the IAutomotiveDisplayProxyService, including retrieving display information and graphics producers. ```APIDOC ## Usage Example: Getting and Using IAutomotiveDisplayProxyService ### Description This example illustrates how to obtain the `IAutomotiveDisplayProxyService`, retrieve display information, and acquire an `IGraphicBufferProducer`. ### Steps 1. **Get `IAutomotiveDisplayProxyService` instance:** ```cpp android::sp windowProxyService = IAutomotiveDisplayProxyService::getService("default"); if (windowProxyService == nullptr) { LOG(ERROR) << "Cannot use AutomotiveDisplayProxyService. Exiting."; return 1; } ``` 2. **Retrieve active display information:** ```cpp // Assuming displayId is obtained elsewhere pWindowProxy->getDisplayInfo(displayId, [this](auto dpyConfig, auto dpyState) { DisplayConfig *pConfig = (DisplayConfig*)dpyConfig.data(); mWidth = pConfig->resolution.getWidth(); mHeight = pConfig->resolution.getHeight(); ui::DisplayState* pState = (ui::DisplayState*)dpyState.data(); if (pState->orientation != ui::ROTATION_0 && pState->orientation != ui::ROTATION_180) { // rotate std::swap(mWidth, mHeight); } LOG(DEBUG) << "Display resolution is " << mWidth << " x " << mHeight; }); ``` 3. **Retrieve `IGraphicBufferProducer`:** ```cpp mGfxBufferProducer = pWindowProxy->getIGraphicBufferProducer(displayId); if (mGfxBufferProducer == nullptr) { LOG(ERROR) << "Failed to get IGraphicBufferProducer from " << "IAutomotiveDisplayProxyService."; return false; } ``` 4. **Convert `IGraphicBufferProducer` to `SurfaceHolder` (using `libbufferqueueconverter`):** ```cpp mSurfaceHolder = getSurfaceFromHGBP(mGfxBufferProducer); if (mSurfaceHolder == nullptr) { LOG(ERROR) << "Failed to get a Surface from HGBP."; return false; } ``` 5. **Convert `SurfaceHolder` to native window (using `libbufferqueueconverter`):** ```cpp mWindow = getNativeWindow(mSurfaceHolder.get()); if (mWindow == nullptr) { LOG(ERROR) << "Failed to get a native window from Surface."; return false; } ``` 6. **Create EGL window surface and render:** ```cpp // Set up EGL context mDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); if (mDisplay == EGL_NO_DISPLAY) { LOG(ERROR) << "Failed to get egl display"; return false; } ... // Create EGL render target surface mSurface = eglCreateWindowSurface(mDisplay, egl_config, mWindow, nullptr); if (mSurface == EGL_NO_SURFACE) { LOG(ERROR) << "eglCreateWindowSurface failed."; return false; } ... ``` 7. **Show the window:** ```cpp // Call showWindow to display the rendered view pWindowProxy->showWindow(displayId); ``` ``` -------------------------------- ### Start Emulator Web Service Source: https://source.android.com/docs/automotive/start/avd/cloud_emulator Launch the service using Docker Compose. ```bash docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up ``` -------------------------------- ### Build Android environment setup Source: https://source.android.com/docs/automotive/system_performance_tools/boot-image-profile Standard commands to initialize the build environment and compile the target. ```bash source build/envsetup.sh lunch m ``` -------------------------------- ### Example CAP Configuration File Source: https://source.android.com/docs/automotive/audio/configurable-audio-policy-engine?hl=pt-br This XML file demonstrates an example configuration for the CAP in an automotive context. It adheres to the schema defined in `audio_policy_engine_configuration.xsd`. ```xml ``` -------------------------------- ### Start Binder Thread and Register NDK Client Source: https://source.android.com/docs/automotive/watchdog/wd_system_health Initializes the NDK binder process, starts the thread pool, and registers a native client with the Car Watchdog daemon. ```cpp int main(int argc, char** argv) { sp looper(Looper::prepare(/*opts=*/0)); ABinderProcess_setThreadPoolMaxThreadCount(1); ABinderProcess_startThreadPool(); std::shared_ptr client = ndk::SharedRefBase::make(looper); // The client is registered in initialize() client->initialize(); ... } ``` ```cpp void SampleNativeClient::initialize() { ndk::SpAIBinder binder(AServiceManager_getService( "android.automotive.watchdog.ICarWatchdog/default")); std::shared_ptr server = ICarWatchdog::fromBinder(binder); mWatchdogServer = server; ndk::SpAIBinder binder = this->asBinder(); std::shared_ptr client = ICarWatchdogClient::fromBinder(binder) mClient = client; server->registerClient(client, TimeoutLength::TIMEOUT_NORMAL); } ``` -------------------------------- ### Automotive Test Setup, Cleanup, and Execution Source: https://source.android.com/docs/automotive/tools/spectatio This code demonstrates the setup, cleanup, and execution of a sample automotive test using the Spectatio framework. It utilizes HelperAccessor to interact with app helper interfaces and includes test methods for opening, checking status, and closing the application. ```java @RunWith(AndroidJUnit4.class) public class AutoApplicationTest { static HelperAccessor autoApplicationHelper = new HelperAccessor<>(IAutoApplicationHelper.class); public AutoApplicationTest() { // constructor // Initialize any attributes that are required for the test execution } @Before public void beforeTest() { // Initial setup before each test // For example - open the app autoApplicationHelper.open(); } @After public void afterTest() { // Cleanup after each test. // For example - exit the app autoApplicationHelper.exit(); } @Test public void testApplicationFeature() { // Test // For example - Test if app is open assertTrue("Application is not open.", autoApplicationHelper.isOpen()); } } ``` -------------------------------- ### INITIAL_USER_INFO Request Example Source: https://source.android.com/docs/automotive/users_accounts/user_hal Represents a first boot request flattened into a VehiclePropValue object. ```text VehiclePropValue { // flattened from InitialUserInfoRequest prop: 299896583 // INITIAL_USER_INFO prop.values.int32Values: [0] = 1 // Request ID [1] = 1 // InitialUserInfoRequestType.FIRST_BOOT [2] = 0 // user id of current user [3] = 1 // flags of current user (SYSTEM) [4] = 1 // number of existing users [5] = 0 // existingUser[0].id [6] = 1 // existingUser[0].flags } ``` -------------------------------- ### main.cpp for Native Client Initialization Source: https://source.android.com/docs/automotive/watchdog/wd_flash_memory Initializes the binder thread pool, creates and initializes the `ResourceOveruseListenerImpl`, and starts the service. ```cpp int main(int argc, char** argv) { ABinderProcess_setThreadPoolMaxThreadCount(1); ABinderProcess_startThreadPool(); std::shared_ptr listener = ndk::SharedRefBase::make(); // The listener is added in initialize(). listener->initialize(); ... Run service ... // The listener is removed in terminate(). listener->terminate(); } ``` -------------------------------- ### Instantiate MediaCardController Source: https://source.android.com/docs/automotive/hmi/media/media-card Example of building a controller instance from a Fragment or Activity context. ```java mMediaCardController = (MediaCardController) new MediaCardController.Builder() .setModels(mViewModel.getPlaybackViewModel(), mViewModel, mViewModel.getMediaItemsRepository()) .setViewGroup((ViewGroup) view) .build(); ``` -------------------------------- ### Download Emulator Build Source: https://source.android.com/docs/automotive/start/avd/cloud_emulator Example of a required emulator build zip file. ```text sdk-repo-linux-emulator-7154743.zip ``` -------------------------------- ### Example Enabled Car Features Configuration Source: https://source.android.com/docs/automotive/displays/multi-display-comms-api This is an example output from `dumpsys car_service --services CarFeatureController`, showing enabled features. Ensure `car_remote_device_service` and `car_occupant_connection_service` are listed. ```text mDefaultEnabledFeaturesFromConfig:[car_evs_service, car_navigation_service, car_occupant_connection_service, car_remote_device_service, car_telemetry_service, cluster_home_service, com.android.car.user.CarUserNoticeService, diagnostic, storage_monitoring, vehicle_map_service] ``` -------------------------------- ### Install Emulator Container Scripts Source: https://source.android.com/docs/automotive/start/avd/cloud_emulator Clone the repository and configure the environment to enable the emu-docker executable. ```bash git clone https://github.com/google/android-emulator-container-scripts.git ``` ```bash cd android-emulator-container-script source ./configure.sh ``` -------------------------------- ### INITIAL_USER_INFO Response Example Source: https://source.android.com/docs/automotive/users_accounts/user_hal Represents a response to create an Admin user, flattened into a VehiclePropValue object. ```text VehiclePropValue { // flattened from InitialUserInfoResponse prop: 299896583 // INITIAL_USER_INFO prop.values.int32Values: [0] = 1 // Request ID (must match request) [1] = 2 // InitialUserInfoResponseAction.CREATE [2] = -10000 // user id (not used on CREATE) [3] = 8 // user flags (ADMIN) prop.values.stringValue: "en-US||Car Owner" // User locale and user name } ``` -------------------------------- ### Get a list of installed media sources Source: https://source.android.com/docs/automotive/voice/voice_interaction_guide/fulfilling_commands Detects media sources by querying PackageManager for services matching MediaBrowserService.SERVICE_INTERFACE, while filtering out custom implementations. ```java private Map getAvailableMediaSources() { List customMediaServices = Arrays.asList(mContext.getResources() .getStringArray(R.array.custom_media_packages)); List mediaServices = mPackageManager.queryIntentServices( new Intent(MediaBrowserService.SERVICE_INTERFACE), PackageManager.GET_RESOLVED_FILTER); Map result = new HashMap<>(); for (ResolveInfo info : mediaServices) { String packageName = info.serviceInfo.packageName; if (customMediaServices.contains(packageName)) { **// Custom media sources should be ignored, as they might have a // specialized handling (e.g., radio).** continue; } String className = info.serviceInfo.name; ComponentName componentName = new ComponentName(packageName, className); MediaSource source = MediaSource.create(mContext, componentName); result.put(source.getDisplayName().toString().toLowerCase(), source); } return result; } ``` -------------------------------- ### Build the environment Source: https://source.android.com/docs/automotive/start/pixelxl Sets up the build environment and initiates the build process. ```bash . build/envsetup.sh lunch aosp_tangorpro_car-ap1a-userdebug m ``` -------------------------------- ### Build and Run Custom Car AVD Source: https://source.android.com/docs/automotive/start/avd/android_virtual_device Builds and runs a custom car AVD named 'acar'. This command sequence includes environment setup, lunching the custom target, building the image, and starting the emulator. ```bash . build/envsetup.sh && lunch acar-userdebug && m -j32 && emulator & ``` -------------------------------- ### Example boot image profile content Source: https://source.android.com/docs/automotive/system_performance_tools/boot-image-profile A sample of the text format used in boot-image-profile.txt to specify classes for optimization. ```text Landroid/accounts/AccountManager; Landroid/app/ActivityManager; Landroid/app/ActivityTaskManager; Landroid/app/ActivityThread; Landroid/app/AlarmManager; Landroid/app/AlertDialog; Landroid/car/Car; Landroid/car/input/CarInputManager; Landroid/car/media/CarAudioManager; ``` -------------------------------- ### Install RROs via ADB Source: https://source.android.com/docs/automotive/hmi/car_ui/appendix Install an RRO APK directly using the `adb install` command for faster iteration. Note that this can lead to the RRO existing in both `/vendor/overlays` and `/data/app`. ```bash $ adb install ``` -------------------------------- ### Build libgui_vendor instructions Source: https://source.android.com/docs/automotive/camera/evs/camera-hal Commands to initialize the build environment and compile the vendor-specific libgui library. ```bash $ cd $ . ./build/envsetup. $ lunch <**product_name**>-<**build_variant**> ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=10 TARGET_PRODUCT=<**product_name**> TARGET_BUILD_VARIANT=<**build_variant**> TARGET_BUILD_TYPE=release TARGET_ARCH=arm64 TARGET_ARCH_VARIANT=armv8-a TARGET_CPU_VARIANT=generic TARGET_2ND_ARCH=arm TARGET_2ND_ARCH_VARIANT=armv7-a-neon TARGET_2ND_CPU_VARIANT=cortex-a9 HOST_ARCH=x86_64 HOST_2ND_ARCH=x86 HOST_OS=linux HOST_OS_EXTRA=<**host_linux_version**> HOST_CROSS_OS=windows HOST_CROSS_ARCH=x86 HOST_CROSS_2ND_ARCH=x86_64 HOST_BUILD_TYPE=release BUILD_ID=QT OUT_DIR=out ============================================ $ m -j libgui_vendor … $ find $ANDROID_PRODUCT_OUT/system -name "libgui_vendor*" .../out/target/product/hawk/system/lib64/libgui_vendor.so .../out/target/product/hawk/system/lib/libgui_vendor.so ``` -------------------------------- ### IEvsCamera - startVideoStream Source: https://source.android.com/docs/automotive/camera/evs/camera-hal Starts video streams for a given camera. Clients can independently start and stop streams. The underlying camera stream begins when the first client starts and stops when the last client stops. ```APIDOC ## startVideoStream ### Description Starts video streams. Clients may independently start and stop video streams on the same underlying camera. The underlying camera starts when the first client starts. ### Method POST ### Endpoint /evs/camera/{camera_id}/startVideoStream ### Parameters #### Path Parameters - **camera_id** (string) - Required - The identifier of the camera for which to start the video stream. #### Request Body - **receiver** (IEvsCameraStream) - Required - The receiver interface for the video stream. ``` -------------------------------- ### Example Parameter Framework Configuration XML Source: https://source.android.com/docs/automotive/audio/configurable-audio-policy-engine This XML file configures the Parameter Framework, specifying system class, tuning status, server port, and plugin locations. TuningAllowed='true' enables debugging. ```xml ``` -------------------------------- ### Example Watchdog termination log Source: https://source.android.com/docs/automotive/watchdog/wd_system_health This is an example of a logcat entry when Watchdog terminates an unresponsive process. ```log 05-01 09:50:19.683 578 5777 W CarServiceHelper: carwatchdog killed com.google.android.car.kitchensink (pid: 5574) ``` -------------------------------- ### Compilazione e installazione di CarDialerAppForTesting Source: https://source.android.com/docs/automotive/hmi/dialer/testing?hl=it Procedura per compilare e installare la variante di test dell'app Dialer, che sostituisce l'app Telefono originale sul dispositivo. ```bash cd %rRepoRoot%/packages/apps/Car/Dialer m CarDialerAppForTesting adb install %rRepoRoot%/out/target/product/%buildTarget%/system/priv-app/CarDialerAppForTesting/CarDialerAppForTesting.apk ``` -------------------------------- ### Configure font package installation Source: https://source.android.com/docs/automotive/hmi/car_ui/fonts Ensure the font module is installed in the product partition's etc folder by setting these flags in your Android.mk file. ```makefile LOCAL_MODULE_CLASS := ETC LOCAL_PRODUCT_MODULE := true LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT)/fonts ``` -------------------------------- ### Set up Build Environment and Lunch Target Source: https://source.android.com/docs/automotive/virtualization/reference_platform Source the build environment script and select the 'aosp_trout_arm64-userdebug' lunch target for building. ```bash source build/envsetup.sh lunch aosp_trout_arm64-userdebug make -j24 ``` -------------------------------- ### Create Emulator Container Source: https://source.android.com/docs/automotive/start/avd/cloud_emulator Initialize the container using the downloaded emulator and system image files. ```bash emu-docker create ``` -------------------------------- ### Configure Package Installation for User Types Source: https://source.android.com/docs/automotive/users_accounts/disable_packages?hl=pt-br Use this XML structure in the device's sysconfig directory to define which packages are installed for FULL and SYSTEM users. ```xml ``` -------------------------------- ### Configure App Lock Installation for Secondary Users Source: https://source.android.com/docs/automotive/unbundled_apps/app-lock Specify in `preinstalled-packages.xml` that the App Lock app should only be installed for secondary user types, excluding Guest users. ```xml ``` -------------------------------- ### Display Emulator Help Source: https://source.android.com/docs/automotive/start/avd/cloud_emulator Access the help menu for the emu-docker command. ```bash emu-docker -h ``` -------------------------------- ### Launch Emulator with USB Passthrough Source: https://source.android.com/docs/automotive/start/passthrough Start the emulator with the specific vendor and product IDs required for the USB passthrough connection. ```bash $ emulator -cores 4 -memory 6144 -usb-passthrough vendorid=0x0b05,productid=0x17cb ``` -------------------------------- ### Configure third-party app installation location Source: https://source.android.com/docs/automotive/flash-wear Use this resource overlay configuration to restrict third-party apps from being installed on internal storage, thereby reducing flash wear. ```xml false ``` -------------------------------- ### Product Configuration Overlay Example Source: https://source.android.com/docs/automotive/audio/config-flags Before Android 13, product configuration overlays were used to overwrite car service configs. This example shows the syntax for specifying the overlay path. ```makefile PRODUCT_PACKAGE_OVERLAYS := ``` -------------------------------- ### Build and install CarDialerAppForTesting Source: https://source.android.com/docs/automotive/hmi/dialer/testing Build and install the `CarDialerAppForTesting` variant to replace the original Dialer app on a test device. This variant is not compatible with real devices; use `CarDialerApp.apk` for real device testing. ```bash cd %rRepoRoot%/packages/apps/Car/Dialer m CarDialerAppForTesting дает install %rRepoRoot%/out/target/product/%buildTarget%/system/priv-app/CarDialerAppForTesting/CarDialerAppForTesting.apk ``` -------------------------------- ### Create Web Container Source: https://source.android.com/docs/automotive/start/avd/cloud_emulator Set up the web container with specified credentials for remote access. ```bash ./create_web_container.sh -p user1,passwd1 ``` -------------------------------- ### IBroadcastRadio - Get Properties Source: https://source.android.com/docs/automotive/radio/broadcast-radio-hal Retrieves the description of a module and its capabilities. ```APIDOC ## GET /IBroadcastRadio/getProperties ### Description Get the description of a module and its capabilities. ### Method GET ### Endpoint /IBroadcastRadio/getProperties ### Response #### Success Response (200) - **properties** (Properties) - The properties of the broadcast radio module. ### Response Example ```json { "properties": { "version": "1.0", "manufacturer": "Example Manufacturer", "product": "Example Product" } } ``` ``` -------------------------------- ### GET getCurrentPowerPolicy Source: https://source.android.com/docs/automotive/power/power_policy Retrieves the current active power policy. ```APIDOC ## GET getCurrentPowerPolicy ### Description Returns the current power policy object. ### Method GET ### Response #### Success Response (200) - **CarPowerPolicy** (object) - The current power policy. ``` -------------------------------- ### Set up the Android Automotive Emulator Source: https://source.android.com/docs/automotive/hmi/rotary_controller/app_developers Commands to initialize the build environment and launch the emulator for rotary development. ```bash source build/envsetup.sh && lunch car_x86_64-userdebug m -j emulator -wipe-data -no-snapshot -writable-system ``` -------------------------------- ### Get IGraphicBufferProducer Source: https://source.android.com/docs/automotive/camera/evs/display_proxy Requests the hardware IGraphicBufferProducer from the proxy service. ```C++ mGfxBufferProducer = pWindowProxy->getIGraphicBufferProducer(displayId); if (mGfxBufferProducer == nullptr) { LOG(ERROR) << "Failed to get IGraphicBufferProducer from " << "IAutomotiveDisplayProxyService."; return false; } ``` -------------------------------- ### Flash the build Source: https://source.android.com/docs/automotive/start/pixelxl Flashes the compiled build to the device. ```bash fastboot -w flashall ``` -------------------------------- ### GET getPowerComponentState Source: https://source.android.com/docs/automotive/power/power_policy Checks if a specific power component is currently turned on or off. ```APIDOC ## GET getPowerComponentState ### Description Checks the power state of a specific component. ### Method GET ### Parameters #### Request Body - **componentId** (PowerComponent) - Required - The ID of the power component to check. ### Response #### Success Response (200) - **boolean** - True if the component is on, false otherwise. ``` -------------------------------- ### GET /getDisplayIdList Source: https://source.android.com/docs/automotive/camera/evs/display_proxy?hl=zh-cn Retrieves a list of all EVS displays available to the system. ```APIDOC ## GET /getDisplayIdList ### Description Returns a list of identifiers for all EVS displays available to the system. The first ID in the list is always the primary display. ### Method GET ### Response #### Success Response (200) - **displayIds** (vec) - Identifiers of available displays. ``` -------------------------------- ### Get Parameter Range Source: https://source.android.com/docs/automotive/camera/acs/camera2-apis Retrieves the valid range for a specific parameter. ```cpp ACameraMetadata_getConstEntry ``` ```java CameraCharacteristics.get(key) ``` -------------------------------- ### Get Parameter List Source: https://source.android.com/docs/automotive/camera/acs/camera2-apis Retrieves all available metadata tags or keys. ```cpp ACameraMetadata_getAllTags ``` ```java CameraCharacteristics.getKeys ``` -------------------------------- ### Define PFW Configuration Rules Source: https://source.android.com/docs/automotive/audio/configurable-audio-policy-engine Example of a parameter-framework file defining domains, configurations, and selection rules for device routing. ```text supDomain: DeviceForProductStrategies supDomain: Music domain: SelectedDevice conf: BluetoothA2dp ForceUseForMedia IsNot NO_BT_A2DP ForceUseForCommunication IsNot BT_SCO AvailableOutputDevices Includes BLUETOOTH_A2DP component:/Policy/policy/product_strategies/vx_1000/selected_output_devices/mask bluetooth_a2dp = 1 bus = 0 conf: Bus AvailableOutputDevices Includes Bus AvailableOutputDevicesAddresses Includes BUS00_MEDIA component: /Policy/policy/product_strategies/vx_1000/selected_output_devices/mask bluetooth_a2dp = 0 bus = 1 conf: Default component: /Policy/policy/product_strategies/vx_1000/selected_output_devices/mask bluetooth_a2dp = 0 bus = 0 ``` -------------------------------- ### Verificar la conexión del dispositivo con ADB Source: https://source.android.com/docs/automotive/tools/catbox?hl=es-419 Ejecuta este comando para confirmar que el dispositivo está conectado y reconocido por ADB. ```bash adb devices ``` -------------------------------- ### Get Camera Information Source: https://source.android.com/docs/automotive/camera/acs/camera2-apis Retrieves metadata and characteristics for a specific camera. ```cpp ACameraManager_getCameraCharacteristics ``` ```java CameraManager.getCameraCharacteristics ```