Kompatibilität mit dem Display des Autos

Durch die Kompatibilität mit Autodisplays können Smartphone- und Tablet-Apps auf Automotive-Geräten gut ausgeführt werden.

z. B.

  • DPI-Skalierung:Die UI-Elemente der App werden basierend auf der DPI-Einstellung des Displays skaliert.
  • Sicherer Bereich für das Rendern von Apps:App-Inhalte sollten sich in einem sicheren Bereich befinden, damit sie nicht von System-UI-Elementen verdeckt werden.
  • Logik für die App-Klassifizierung:Apps identifizieren, für die die Kompatibilität mit Autodisplays erforderlich ist.

Kompatibilitätsfunktionen

Die Plattform bietet verschiedene Mechanismen zur Optimierung des Renderns und Skalierens von Apps auf Fahrzeugdisplays.

DPI-Skalierung

Mit der Funktion zur DPI-Skalierung können Gerätehersteller die Dichte-DPI einzelner Apps oder aller Apps skalieren, die mit dem Autodisplay kompatibel sein müssen.

So konfigurieren Sie die Skalierung der Anzeigedichte von Apps:

  1. Fügen Sie eine Konfigurationsdatei /product/etc/display_compat_config.xml hinzu:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
        Each scale factor can have the following attributes
    
        display     (required) Specifies the displayId to which this scale factor will be applied.
        packageName (optional) Specifies the packageName to which the scale factor will be applied.
                    If omitted, the scaling will apply to all packages.
    
        For example:
        <scale display="0" packageName="com.android.car.media.localmediaplayer">0.5</scale>
    
        This means that only package `com.android.car.media.localmediaplayer` on display `0` will be scaled.
    -->
    <config>
    <scale display="0">1.0</scale>
    </config>
    
  2. Wenn Sie einen Standardskalierungswert für alle Apps festlegen möchten, die Car Display Compat erfordern, ändern Sie die Standardskalierung für Display 0 in <scale display="0">1.0</scale>. Der Wert ist der Wert der inversen Skala. Wenn Sie beispielsweise Apps, für die „Car Display Compat“ erforderlich ist, auf 1,5-fache Größe skalieren möchten, legen Sie den Skalierungswert auf (1 / 1.5) = 0.67 fest:

    <config>
        <scale display="0">0.67</scale>
    </config>
    
  3. Wenn Sie einen Skalierungswert für eine bestimmte App festlegen möchten, fügen Sie der Konfiguration ein neues scale-Element hinzu. In diesem Beispiel wird YouTube Automotive auf das 1,43-Fache skaliert (z. B. (1 / 1.43) = 0.7).

    <config>
        <scale display="0">0.67</scale>
        <scale display="0" packageName="com.google.android.apps.automotive.youtube">0.7</scale>
    </config>
    

Wenn das System ausgeführt wurde, als Sie /product/etc/display_compat_config.xml geändert haben, müssen Sie den Cache leeren, damit die neue Konfiguration wirksam wird. Verwenden Sie dieses Makro, um den Cache zu leeren:

SECURE_SETTING_KEY="android.software.car.display_compatibility:settings:secure"
USER_ID_LIST=$(adb shell cmd user list -v | grep 'id=' | cut -d'=' -f2 | cut -d',' -f1)
for USER_ID in $USER_ID_LIST; do
    echo "Deleting Display Compat config for user: $USER_ID"
    adb shell settings delete secure --user $USER_ID $SECURE_SETTING_KEY
    sleep 1
    echo
done
  1. Fügen Sie die Konfigurationsdatei und die Funktionsdeklaration einem AAOS-Build hinzu, z. B. in vendor/OEM_NAME/products/displaycompat:

    # File: vendor/OEM_NAME/products/displaycompat/Android.bp
    
    prebuilt_etc {
        name: "display_compat_config",
        filename: "display_compat_config.xml",
        src: "display_compat_config.xml",
        product_specific: true,
    }
    

Sicherer App-Bereich

Smartphone- und Tablet-Apps sind oft nicht für die großen Systemleisten in Automotive-Apps konzipiert. Diese Apps dürfen keine Inhalte unter Systemleisten oder System-Overlays darstellen. Andernfalls werden interaktive Elemente möglicherweise in einem Bereich gerendert, der für den Endnutzer nicht sichtbar ist.

Der Bereich für sichere Apps wird mit skalierbarer UI SafeBounds implementiert.

Logik zur App-Klassifizierung

Mit CarPackageManager.requiresDisplayCompat(..) können Sie zusätzliche Funktionen entwickeln, die die App-Kompatibilität verbessern. Sie können diese Funktion beispielsweise verwenden, um einen Button „Zurück“ oder eine zusätzliche Benutzeroberfläche hinzuzufügen.

App-Entwickler können die Kompatibilität mit Autodisplays aktivieren, indem sie Metadaten in das Manifest der App aufnehmen:

<meta-data
    android:name="android.software.car.display_compatibility"
    android:value="true" />

Das System prüft anhand der folgenden Logik (in der angegebenen Reihenfolge), ob eine App Funktionen für die Kompatibilität mit Autodisplays benötigt:

  1. Manifest-Metadaten android.software.car.display_compatibility:
    • Wenn android:value="true" → App requires compat
    • Wenn android:value="false" → App doesn't require compat
    • Wenn Metadaten fehlen, fahren Sie mit der nächsten Prüfung fort.
  2. Verwendet die Funktion android.hardware.type.automotive:
    • Wenn das Feature deklariert ist (unabhängig davon, ob android:required true oder false ist) → App doesn't require compat
    • Wenn die Funktion fehlt, fahren Sie mit der nächsten Prüfung fort.
  3. App-Aktivitäten:
    • Wenn die App keine Aktivitäten hat (z. B. Laufzeit-Ressourcen-Overlays (RROs), monitorlose Apps oder Dienste) → App doesn't require compat
    • Wenn die App Aktivitäten enthält, fahren Sie mit der nächsten Prüfung fort.
  4. App-Informationen:
    • Wenn die App privilegiert ist → App doesn't require compat
    • Wenn die App eine System-App (FLAG_SYSTEM) ist → App doesn't require compat
    • Andernfalls fahren Sie mit der nächsten Prüfung fort.
  5. Signaturinformationen:
    • Wenn die App plattformsigniert ist (mit derselben Signatur wie das Android-Framework) → App doesn't require compat
    • Andernfalls fahren Sie mit der nächsten Prüfung fort.
  6. Fallback-Entscheidung:
    • Wenn alle Prüfungen ohne Deaktivierung bestanden werden → App requires compat

Weitere Informationen finden Sie unter CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked.

Geräteunterstützung

Geräte, die die Kompatibilität mit dem Display des Autos unterstützen, müssen die Unterstützung mit der folgenden Funktionsdeklaration deklarieren:

<feature name="android.software.car.display_compatibility" />