Configurer un IDE pour le développement SDV

Android Studio for Platform (ASfP) est l'environnement de développement intégré (IDE) recommandé pour le développement de la plate-forme de véhicule défini par logiciel (SDV) d'Android Automotive OS (AAOS). ASfP est compatible avec tous les langages utilisés par la plate-forme SDV AAOS, y compris Rust pour les bundles de services SDV.

Cette page ne traite que de la configuration spécifique aux SDV. Pour en savoir plus sur les fonctionnalités et les workflows généraux d'ASfP, consultez Android Studio for Platform.

ASfP ne s'exécute que sur Linux 64 bits avec des processeurs x86-64. Vous pouvez l'utiliser sur un poste de travail Linux local ou dans le cloud. Pour en savoir plus sur la configuration du cloud, consultez Développement cloud.

Installer ASfP

Par défaut, ASfP utilise une taille de tas maximale de 30 Go. L'indexation d'un checkout de plate-forme utilise beaucoup de mémoire, en particulier lorsque vous exécutez également des appareils Cuttlefish multi-VM sur la même machine. Limitez la portée de votre projet aux répertoires sur lesquels vous travaillez et ajustez la taille maximale du tas de mémoire dans les paramètres de mémoire d'ASfP si nécessaire.

ASfP est compatible avec les mises à jour automatiques dans l'IDE. Pour en savoir plus, consultez Mettre à jour Android Studio pour la plate-forme. Pour en savoir plus sur le téléchargement et l'installation d'ASfP, ainsi que sur la configuration système requise, consultez Installer Android Studio for Platform.

Créer un projet SDV

Avant de commencer, initialisez, synchronisez et compilez votre checkout AAOS SDV. Pour en savoir plus sur la configuration de votre checkout, consultez Emplacement du code et Télécharger, compiler et exécuter.

Pour créer un projet SDV, procédez comme suit :

  1. Créez un projet dans ASfP et sélectionnez la racine de votre extraction AAOS SDV comme extraction de dépôt. Pour en savoir plus sur les étapes de l'assistant, consultez Créer ou importer un projet.
  2. Une fois qu'ASfP a créé le projet, sélectionnez ASfP > Project > Open Config (ASfP > Projet > Ouvrir la configuration) pour ouvrir le fichier .asfp-project.
  3. Remplacez le contenu du fichier par l'exemple suivant, puis définissez repo sur le chemin d'accès de votre paiement :

    repo: /path/to/sdv_source
    lunch: sdv_core_cf-aosp_current-userdebug
    directories:
      include:
        -   system/software_defined_vehicle/samples
    other_languages:
      -   rust
    
  4. Mettez à jour lunch et directories pour la zone sur laquelle vous travaillez. Pour que l'indexation et la synchronisation restent rapides, n'incluez que les répertoires que vous modifiez activement. Le tableau suivant liste les cibles et répertoires SDV courants :

    Objectif de développement SDV lunch cible Recommandés directories
    Lots de services SDV sdv_core_cf-aosp_current-userdebug Votre catalogue de services et votre répertoire de bundles, par exemple system/software_defined_vehicle/samples
    Intégration de la plate-forme SDV Core sdv_core_cf-aosp_current-userdebug system/software_defined_vehicle/middleware, system/software_defined_vehicle/automotive_services, device/google/sdv
    Passerelle SDV sur SDV IVI sdv_ivi_cf-aosp_current-userdebug system/software_defined_vehicle/sdv_gateway, system/software_defined_vehicle/samples/sdv_gateway, packages/services/Car
    Afficher la sécurité sur les supports SDV sdv_media_har_cf-aosp_current-userdebug packages/services/display_safety, device/google/sdv_display_safety
    Afficher la sécurité sur l'IVI SDV sdv_ivi_cf_ds-aosp_current-userdebug packages/apps/Car/DriverUI, packages/services/display_safety/service

    Si votre paiement utilise un fichier manifeste trunk_staging, remplacez -aosp_current-userdebug par -trunk_staging-userdebug. Pour parcourir également le code de la plate-forme native, ajoutez cpp à other_languages. Pour en savoir plus sur toutes les options de configuration, consultez Paramètres de configuration.

  5. Pour appliquer vos modifications, sélectionnez ASfP > Sync > Sync Project (ASfP > Synchroniser > Synchroniser le projet). Pour en savoir plus sur les modes de synchronisation (synchronisation complète, synchronisation partielle et synchronisation sans compilation) et sur l'exportation ou l'importation de modèles .asfp-project partageables pour votre équipe, consultez Modes de synchronisation et fenêtre d'outil Soong et Modèles de projet partageables (exportation et importation).

Déployer des bundles de services SDV

ASfP inclut un plug-in SDV qui déploie un APEX contenant vos bundles de services directement sur un appareil SDV en cours d'exécution. Le plug-in est désactivé par défaut. Pour l'utiliser, activez le plug-in SDV dans Settings > Plugins (Paramètres > Plug-ins). Pour en savoir plus sur le packaging APEX, consultez Créer et déployer des bundles de services.

Le déploiement dépend de la présence ou non de l'APEX sur l'appareil :

  • Si l'APEX est déjà installé, vous pouvez déployer vos modifications directement depuis ASfP.
  • Si l'APEX est nouveau, vous devez d'abord recompiler et relancer l'image système, ou utiliser une image système incluant la clé utilisée pour signer l'APEX. Vous pourrez ensuite déployer depuis ASfP.

Pour déployer un APEX de bundle de services, procédez comme suit :

  1. Démarrez votre appareil SDV avec le plug-in Cuttlefish. Pour en savoir plus, consultez Exécuter des appareils SDV sur Cuttlefish.
  2. Ouvrez le fichier apex/Android.bp de votre bundle de services, puis cliquez sur l'icône Exécuter dans la marge à côté du bloc apex {.
  3. Dans le menu qui s'ouvre, sélectionnez Run 'Deploy APEX_NAME' (Exécuter "Déployer "). Vous pouvez également compiler l'APEX sans le déployer ou modifier la configuration d'exécution à partir du même menu.

Exécuter des appareils SDV sur Cuttlefish

ASfP inclut un plug-in Cuttlefish qui crée et exécute des appareils Cuttlefish locaux. Le plug-in nécessite l'orchestrateur d'hôte Cuttlefish. Si l'outil d'orchestration hôte n'est pas disponible, ASfP affiche des instructions pour le configurer.

Pour créer un appareil SDV, procédez comme suit :

  1. Sélectionnez Tools > Device Manager (Outils > Gestionnaire d'appareils), cliquez sur +, puis sélectionnez Create Cuttlefish Device (Créer un appareil Cuttlefish).
  2. Pour créer une configuration multi-VM, sélectionnez À partir d'une configuration canonique, puis créez ou importez une configuration pour votre configuration, par exemple SDV Core avec SDV IVI ou SDV Media avec SDV IVI pour la sécurité de l'affichage. Pour créer une seule VM, sélectionnez plutôt À partir de l'extraction de l'arborescence source Android locale.

Pour afficher tous les écrans de VM sur un seul écran et accéder à des options d'appareil supplémentaires, utilisez la fenêtre d'outil Cuttlefish. Pour l'ouvrir, sélectionnez l'icône ... dans le panneau latéral, puis sélectionnez Cuttlefish, ou recherchez Cuttlefish dans Aide > Rechercher une action. Vous pouvez également afficher des écrans individuels dans Running Devices (Appareils en cours d'exécution). Comme SDV Core s'exécute sans écran, utilisez Logcat et le terminal pour l'inspecter.

Déboguer et tester

ASfP inclut un débogueur LLDB intégré pour le code C++ et Rust. Pour en savoir plus sur le débogage et les tests dans ASfP, consultez Déboguer le code de la plate-forme, Déboguer le code Rust, Tester le code de la plate-forme avec atest et Déboguer les cibles cc_test et rust_test sous LLDB.

Lorsque vous associez le débogueur à un bundle de services, associez-le au processus qui l'héberge. Les noms de processus utilisent le format <bundle_name>:<instance_name>, par exemple OrchestratorSampleRustServiceBundle:sample-main-no-conditions. La commande suivante liste les processus correspondants et leurs ID de processus :

adb shell ps -A | grep <bundle_name>

Pour en savoir plus sur les workflows de débogage SDV, comme la connexion à plusieurs appareils et l'affichage des journaux, consultez Déboguer un SDV.

Modifier des fichiers VSIDL

ASfP inclut le serveur de langage VSIDL (vsidl-lsp). Pour en savoir plus sur la configuration de votre catalogue pour le serveur de langage, consultez Mises à jour automatiques du catalogue et intégration de LSP. Lorsque votre catalogue inclut un fichier CATALOG_UPDATE, l'éditeur fournit les fonctionnalités suivantes pour les fichiers .vsidl :

  • Validation en direct : l'éditeur met en surbrillance les mots clés VSIDL et affiche les erreurs de syntaxe, les types non résolus et les erreurs de validation VSIDLC dans la fenêtre Problèmes. Pour en savoir plus sur les règles de validation et leurs codes d'erreur, consultez la spécification du langage VSIDL.
  • Saisie semi-automatique et documentation : vous pouvez appuyer sur Ctrl+Espace pour obtenir des suggestions de mots clés, de messages, de services, de sujets et de canaux, et sur Ctrl+Q pour afficher les commentaires de la documentation.
  • Navigation et mise en forme : vous pouvez appuyer sur Ctrl+B pour accéder aux définitions .vsidl ou .proto, sur Alt+Maj+F7 pour rechercher des références, sur Ctrl+F12 pour afficher la structure du fichier et sur Ctrl+Alt+L pour mettre en forme le fichier.

Ajouter le contexte SDV pour les assistants IA

ASfP inclut l'IA dans Android Studio et un agent intégré avec les outils de compilation Soong et atest. Pour en savoir plus sur les fonctionnalités d'IA d'ASfP, consultez Découvrir Android Studio for Platform. Pour aider l'assistant IA à suivre les conventions SDV, ajoutez un fichier AGENTS.md à la racine de votre catalogue VSIDL. Pour en savoir plus sur les fichiers d'agent, consultez Personnaliser Gemini à l'aide de fichiers AGENTS.md.

L'exemple suivant est un point de départ que vous pouvez adapter à votre catalogue :

# AAOS SDV service catalog rules

- Implement SDV service bundles in Rust under `services/<BundleName>/src/`.
- Keep `.proto` files limited to Protobuf `message`, `enum`, and `service` definitions. Define service bundles, APEX packaging, VM placement, and SOME/IP mappings in `.vsidl` files.
- Regenerate middleware with `vsidlc` after you change `.vsidl` or `.proto` files, and leave generated files unmodified.
- Use `PascalCase` for service bundle names and lowercase `kebab-case` for topic and channel names.
- Run `vsidlc --explain <CODE>` to look up a VSIDLC error code.