La méthode service
n'a pas fonctionné pour moi sur mon appareil Samsung. J'ai trouvé comment le faire en configurant directement l'interface réseau. Voici un script qui configure une machine Linux et un appareil Android rooté connecté en USB pour le partage de connexion USB. Cela ne configure pas les DNS ou le masquage NAT, mais suffit pour rendre l'appareil accessible à 192.168.42.129 :
#!/bin/bash
set -euo pipefail
# Configurer le partage de connexion USB pour un appareil Android.
# Utilisation : adb-usb-tether [VENDOR USB-PRODUCT]
# Si le vendeur/produit USB n'est pas spécifié, utilisez la première interface réseau USB.
# Côté Android, le partage est activé via adb shell.
if [[ $# -eq 2 ]]
then
any=false
vendor=$1
product=$2
else
any=true
fi
function find_if() {
local path if
for path in /sys/class/net/*
do
if=$(basename "$path")
if [[ "$(readlink "$path")" == */usb* ]]
then
local ifproduct ifvendor
ifproduct=$(cat "$(realpath "$path")/../../../idProduct")
ifvendor=$(cat "$(realpath "$path")/../../../idVendor")
if $any || [[ "$ifproduct" == "$product" && "$ifvendor" == "$vendor" ]]
then
echo "Interface trouvée : $if" 1>&2
echo "$if"
return
fi
fi
done
}
function adb_shell() {
adb shell "$(printf " %q" "$@")"
}
function adb_su() {
local quoted
quoted="$(printf " %q" "$@")"
adb shell su -c "$(printf %q "$quoted")"
}
if=$(find_if)
if [[ -z "$if" ]]
then
echo "Demande d'interface :" 1>&2
adb_su setprop sys.usb.config rndis,adb
echo " >> OK" 1>&2
fi
while [[ -z "$if" ]]
do
echo "En attente d'un périphérique réseau..." 1>&2
sleep 1
if=$(find_if)
done
while ! ( ip link | grep -qF "$if" )
do
echo "En attente de l'interface..." 1>&2
sleep 1
done
function configure_net() {
local name="$1"
local if="$2"
local ip="$3"
local table="$4"
local cmdq="$5" # Commande de requête
local cmdx="$6" # Commande de configuration
if ! ( "$cmdq" ip addr show dev "$if" | grep -qF 192.168.42."$ip" )
then
echo "Configuration de l'adresse de l'interface $name :" 1>&2
"$cmdx" ip addr add 192.168.42."$ip"/24 dev "$if"
echo " >> OK" 1>&2
fi
if ( "$cmdq" ip addr show dev "$if" | grep -qF 'state DOWN' )
then
echo "Activation de l'interface $name :" 1>&2
"$cmdx" ip link set dev "$if" up
sleep 1
echo " >> OK" 1>&2
fi
if ! ( "$cmdq" ip route show table "$table" | grep -qF "192.168.42.0/24 dev $if" )
then
echo "Configuration de la route pour $name :" 1>&2
"$cmdx" ip route add table "$table" 192.168.42.0/24 dev "$if"
echo " >> OK" 1>&2
fi
}
configure_net local "$if" 128 main command sudo
configure_net device rndis0 129 local adb_shell adb_su
Pour activer le transfert (c'est-à-dire se connecter à Internet depuis le PC via l'appareil Android), voir ma question et réponse ici.
0 votes
C'est vraiment cool. J'ai essayé de trouver d'autres commandes pour faire
aapt dump xmltree com.android.settings.apk AndroidManifest.xml
mais cela n'a pas fonctionné sur mon téléphone (aapt introuvable). Comment puis-je voir la liste des paramètres disponibles ?0 votes
elinux.org/Android_aapt
0 votes
Merci! J'ai trouvé aapt dans le dossier build-tools. Je peux le lancer maintenant. Je ne semble pas trouver com.android.settings.apk cependant. J'ai essayé:
find / -name 'com.android.settings.apk'
sur le téléphone, mais rien n'est apparu :( Pouvez-vous s'il vous plaît me dire où je peux trouver com.android.settings.apk ?