Android Auto OS 13 und höher enthält Funktionen, mit denen Sie Ethernet-Netzwerke konfigurieren und verwalten Abbildung 1 zeigt ein Beispiel für ein Netzwerk. Diagramm für ein Auto:
Abbildung 1: Android Auto-Netzwerk.
Diese Abbildung zeigt die Aufrufmethoden der OEM-Netzwerk-App im
EthernetManager
-Klasse zum Konfigurieren und Verwalten von Onboard-Ethernet-Netzwerken
(eth0.1, eth0.2 und eth0.3). Der Rest von Abbildung 1 fällt nicht in den Bereich
in diesem Dokument.
Standard-Ethernet-Netzwerkeinstellungen festlegen
Verwenden Sie zum Festlegen von Standard-Netzwerkeinstellungen die
Ressourcen-Overlay
config_ethernet_interfaces
:
<string-array translatable="false" name="config_ethernet_interfaces">
<!--
<item>eth1;12,13,14,15;ip=192.168.0.10/24 gateway=192.168.0.1 dns=4.4.4.4,8.8.8.8</item>
<item>eth2;;ip=192.168.0.11/24</item>
<item>eth3;12,13,14,15;ip=192.168.0.12/24;1</item>
-->
</string-array>
Dieses
Das Beispiel zeigt das Ressourcen-Overlay config_ethernet_interfaces
von
config.xml
Wichtige Informationen zum Code
eth1
,eth2
undeth3
sind die Namen der Netzwerkschnittstelle, die konfiguriert wird.- Die fortlaufenden Zahlen von
12, 13, 14, 15
stehen für Netzwerk Funktionen aktiviert wird. ip=
,gateway=
unddns
werden verwendet, um die anfängliche IP-Adresse, das Gateway und DNS für das Netzwerk.
Netzwerkschnittstelle aktivieren oder deaktivieren
Rufen Sie zum Aktivieren einer Netzwerkschnittstelle
EthernetManager.enableInterface()
:
public final class InterfaceEnabler {
private final Context mApplicationContext;
private final EthernetManager mEthernetManager;
private final OutcomeReceiver<String, EthernetNetworkManagementException> mOutcomeReceiver;
public InterfaceEnabler(Context applicationContext,
OutcomeReceiver<String, EthernetNetworkManagementException> outcomeReceiver) {
mApplicationContext = applicationContext;
mEthernetManager = applicationContext.getSystemService(EthernetManager.class);
mOutcomeReceiver = outcomeReceiver;
}
public void enableInterface(String ifaceName) {
mEthernetManager.enableInterface(ifaceName,
mApplicationContext.getMainExecutor(),
mOutcomeReceiver);
}
}
Wichtige Informationen zum Code
ifaceName
ist der Name der Netzwerkschnittstelle, die aktiviert werden soll.getMainExecutor()
gibt den Anwendungskontext zurück.OutcomeReceiver
ist ein Callback, mit dem der Abschluss kommuniziert wird. Aktualisierter Netzwerkname bei Erfolg oderEthernetNetworkManagementException
bei Fehler.
Wenn eine Netzwerkschnittstelle aktiviert ist, verwendet sie die Konfiguration,
EthernetManager.updateConfiguration()
Wenn keine Konfiguration festgelegt wurde
durch EthernetManager.updateConfiguration()
verwendet, verwendet die Netzwerkschnittstelle den
Ressourcen-Overlay config_ethernet_interfaces
oder das Standard-Ethernetnetzwerk
Konfiguration, wenn kein Overlay verfügbar ist.
Rufen Sie zum Deaktivieren einer Netzwerkschnittstelle
EthernetManager.disableInterface()
:
public final class InterfaceEnabler {
private final Context mApplicationContext;
private final EthernetManager mEthernetManager;
private final OutcomeReceiver<String, EthernetNetworkManagementException> mOutcomeReceiver;
public InterfaceEnabler(Context applicationContext,
OutcomeReceiver<String, EthernetNetworkManagementException> outcomeReceiver) {
mApplicationContext = applicationContext;
mEthernetManager = applicationContext.getSystemService(EthernetManager.class);
mOutcomeReceiver = outcomeReceiver;
}
public void disableInterface(String ifaceName) {
mEthernetManager.disableInterface(ifaceName,
mApplicationContext.getMainExecutor(),
mOutcomeReceiver);
}
}
Wichtige Informationen zum Code
ifaceName
ist der Name der Netzwerkschnittstelle, die deaktiviert werden soll.getMainExecutor()
gibt den Anwendungskontext zurück.OutcomeReceiver
ist ein Callback, mit dem der Abschluss kommuniziert wird. Aktualisierter Netzwerkname bei Erfolg oderEthernetNetworkManagementException
bei Fehler.
Netzwerkkonfiguration aktualisieren
Zum Aktualisieren
Ethernet-Netzwerkkonfigurationen, rufen Sie
EthernetManager.updateConfiguration()
:
public final class ConfigurationUpdater {
private final Context mApplicationContext;
private final EthernetManager mEthernetManager;
private final OutcomeReceiver<String, EthernetNetworkManagementException> mCallback;
public ConfigurationUpdater(Context applicationContext,
OutcomeReceiver<String, EthernetNetworkManagementException> callback) {
mApplicationContext = applicationContext;
mEthernetManager = applicationContext.getSystemService(EthernetManager.class);
mCallback = callback;
}
public void updateNetworkConfiguration(String packageNames,
String ipConfigurationText,
String networkCapabilitiesText,
String interfaceName)
throws IllegalArgumentException, PackageManager.NameNotFoundException {
EthernetNetworkUpdateRequest request = new EthernetNetworkUpdateRequest.Builder()
.setIpConfiguration(getIpConfiguration(ipConfigurationText))
.setNetworkCapabilities(getCapabilities(
interfaceName, networkCapabilitiesText, packageNames))
.build();
mEthernetManager.updateConfiguration(interfaceName, request,
mApplicationContext.getMainExecutor(), mCallback);
}
}
Wichtige Informationen zum Code
getCapabilities()
ist eine Hilfsmethode, die das aktuelle Netzwerk und ruftconvertToUIDs()
zum Conversion-Tracking auf für Menschen lesbare Paketnamen in eine Linux-eindeutige Kennung (UID) ein. In der Regel die UIDs nicht, im Voraus für die zugehörigen Pakete. Wenn Sie alsoEthernetManager.updateConfiguration()
, um den Zugriff auf eine Untergruppe von Apps zu beschränken, ihre UIDs verwenden.request
ist die Konfiguration, die für das interne Netzwerk verwendet werden soll. Die -Anfrage kann neue Einstellungen für die IP-Konfiguration und das Netzwerk enthalten. Funktionen. Wenn die im Konnektivitäts-Stack registriert ist, wird es gemäß Konfiguration. Diese Konfiguration bleibt bei einem Neustart nicht erhalten.getMainExecutor()
gibt den Executor zurück, auf dem der Listener aufgerufen wird.mCallback
ist der Callback, mit dem der Abschluss kommuniziert wird. Aktualisierter Netzwerkname bei Erfolg oderEthernetNetworkManagementException
bei Fehler.
Mit updateConfiguration()
können die Eigenschaften eines berücksichtigten Netzwerks aktualisiert werden
durch den Android-Konnektivitäts-Stack unveränderlich. Die
das Netzwerk für diese unveränderlichen
die zu aktualisieren sind.
Netzwerk auf bestimmte Apps beschränken
Mit EthernetManager#updateConfiguration
können Sie den Zugriff auf eine Person beschränken,
Teilmenge der zulässigen UIDs. Verwenden Sie diese Methode, um Anwendungsfälle abzudecken,
erforderlich, z. B. für interne Fahrzeugnetze, die nur von einer kleinen Gruppe genutzt werden können
von OEM-Apps.
Android verfolgt Apps hauptsächlich anhand ihrer UID.
Der folgende Code von
UIDToPackageNameConverter.java
zeigt, wie Sie eine Reihe von UIDs aus einem String von Paketnamen abrufen:
public static Set<Integer> convertToUids(Context applicationContext, String packageNames)
throws PackageManager.NameNotFoundException {
final PackageManager packageManager = applicationContext.getPackageManager();
final UserManager userManager = applicationContext.getSystemService(UserManager.class);
final Set<Integer> uids = new ArraySet<>();
final List<UserHandle> users = userManager.getUserHandles(true);
String[] packageNamesArray = packageNames.split(",");
for (String packageName : packageNamesArray) {
boolean nameNotFound = true;
packageName = packageName.trim();
for (final UserHandle user : users) {
try {
final int uid =
packageManager.getApplicationInfoAsUser(packageName, 0, user).uid;
uids.add(uid);
nameNotFound = false;
} catch (PackageManager.NameNotFoundException e) {
// Although this may seem like an error scenario, it is OK as all packages are
// not expected to be installed for all users.
continue;
}
}
if (nameNotFound) {
throw new PackageManager.NameNotFoundException("Not installed: " + packageName);
}
}
return uids;
Wichtige Informationen zum Code
- Mit
getApplicationInfoAsuser().uid
wird die UID von der Paketname. uids
ist das generierte Array von Ganzzahlen.
Der folgende Code in
EthernetManagerTest.kt
zeigt, wie Sie die Konfiguration Ihrer Netzwerkschnittstelle mit den UIDs der Apps aktualisieren
dürfen das Netzwerk nutzen:
val allowedUids = setOf(Process.myUid())
val nc = NetworkCapabilities.Builder(request.networkCapabilities)
.setAllowedUids(allowedUids).build()
updateConfiguration(iface, capabilities = nc).expectResult(iface.name)
Wichtige Informationen zum Code
allowUids
ist die Gruppe von App-UIDs, die das Netzwerk verwenden dürfen.updateConfiguration()
aktualisiert die Konfiguration, um das Netzwerk auf Folgendes zu beschränken: den angegebenen UID-Satz.