9 votes

Exécutez la commande adb dans l'émulateur de terminal ou de manière programmatique sans Root

Y a-t-il un moyen d'exécuter le adb backup sur le dispositif lui-même sans utiliser d'ordinateur ?

Bien sûr, quand j'essaie de le faire, adb se plaint que le démon n'est pas démarré et qu'il ne parvient pas à trouver un périphérique.

u0_a192@klimtwifi:/ $ adb connect localhost:9999
* daemon not running. starting it now on port 5038 *
* daemon started successfully *
unable to connect to localhost:9999:9999
u0_a192@klimtwifi:/ $ adb connect localhost:5038
connected to localhost:5038
u0_a192@klimtwifi:/ $ adb shell
error device not found
u0_a192@klimtwifi:/ $

11voto

Firelord Points 23064

Adressez-vous à Révision 4

Vous faites toujours les choses de manière incorrecte même si j'ai noté dans révision 1 de ma réponse que vous auriez besoin adb dans le PC pour une fois et une seule, tant qu'il n'y a pas de redémarrage ou de désactivation du débogage USB.

En ce qui concerne votre tentative :

u0_a192@klimtwifi:/ $ adb connect localhost:9999  
* daemon not running. starting it now on port 5038 *
* daemon started successfully *
unable to connect to localhost:9999:9999  
u0_a192@klimtwifi:/ $ adb connect localhost:5038
connected to localhost:5038
u0_a192@klimtwifi:/ $ adb shell
error device not found

adb connect localhost:9999 n'a pas marché parce que tu n'as pas fait adb tcpip 9999 à partir d'un PC. Cette commande permet de définir la propriété service.adb.tcp.port au port spécifié qui, à son tour, est lu par adbd lorsqu'il est démarré/redémarré et utilisé pour écouter les connexions.

adb connect localhost:5038 ne vous a pas profité, tout simplement parce que vous avez été confus ou n'avez pas compris les bases que j'ai notées dans la révision 1 de ma réponse.

D'abord, dissiper toute confusion. Ce n'est pas parce que le terme daemon est mentionné qu'il s'agit de adbd. A démon peut servir à beaucoup de choses. Une description du protocole entre les clients adb et le serveur est notée ici . Une bonne compréhension de la façon dont la communication client-serveur-appareil/émulateur adb se produit est notée. ici . Vous êtes prié de lire tous les documents pour comprendre le fonctionnement d'adb.

Maintenant, voici les détails pour votre tentative : Quand vous avez fait adb connect localhost:9999 vous avez en fait demandé au client adb de votre appareil Android hôte de se connecter à un esclave exécutant adbd écoutant sur 9999. Votre client adb a essayé de rechercher le serveur adb sur votre appareil Android hôte. Comme il n'a pas trouvé de serveur en cours d'exécution, il a démarré un serveur et l'a lié au port 5038. Nulle part vous n'avez demandé à adbd d'écouter sur le port 9999 ou même 5038. Vous pouvez le confirmer avec l'accès Root. Faites su -c 'netstat -natup' et vous trouverez adb et non adbd écoutant sur le port 5038 après l'exécution de votre commande.

Il devrait maintenant être clair pourquoi shell adb a entraîné l'erreur.

Je dois insister sur le fait qu'il est inutile de penser à exécuter une commande liée au client adb sur un appareil sans accès au PC pour une fois ou sans accès Root. J'ai déjà noté la procédure concernant le PC dans la révision 1. Si vous avez un accès Root et que vous avez toujours besoin d'utiliser adb sur l'appareil, faites-le :

su 2000 -c 'setprop service.adb.tcp.port  PORT'   # choose PORT greater than 1024.
su -c 'stop adbd && start adbd'                   # this would stop and start adbd. 
su -c adb connect localhost:PORT                        # you shall now be connected and would be required to accept fingerprint to authorize USB debugging.

(Cliquez sur une image pour l'agrandir)

IMG: IMG:


Révision 1 éditée

Vous cherchez ceci ?

IMG:

Vous faites les choses de manière incorrecte. D'abord, quelques notions de base :

  • adb est un pont qui permet de communiquer avec un esclave (un appareil Android) à partir d'un client sur une machine hôte (généralement un PC) par l'intermédiaire d'un serveur fonctionnant sur la machine hôte.
  • Un esclave a un démon nommé adbd qui doit tourner pour que l'esclave puisse communiquer en retour.

Lorsque vous tentez d'exécuter une commande adb qui nécessite un appareil Android pour la sortie souhaitée, le serveur adb s'attend à un esclave connecté à l'hôte par USB. Comme aucun appareil Android n'est connecté à votre appareil Android par USB, vous obtenez error: device not found . Si vous connectez un autre appareil Android via OTG et que le débogage USB y est activé, vous pourriez être en mesure d'exécuter adb avec succès. En tout cas, j'ai pu le faire.

La solution de contournement la plus simple consiste à faire en sorte que adbd écoute également sur TCP. Dans ce cas, vous pouvez vous connecter à localhost et faire le travail. Il n'y a aucun moyen pour un processus avec des privilèges ordinaires dans Android de redémarrer adbd pour qu'il écoute sur TCP. La méthode officielle sous Android standard est la suivante adb tcpip PORT de la machine hôte. Dans ce cas, vous aurez besoin d'un PC avec adb de l'installation. Connectez l'appareil au PC et exécutez depuis le PC, la commande :

adb tcpip PORT   # PORT is port number in your device to listen for and establish connection on TCP. Default port is 5555. Choose a PORT greater than 1024 

Vous pouvez maintenant débrancher l'appareil. Tant que vous ne redémarrez pas l'appareil ou que vous ne désactivez pas le débogage USB dans les options du développeur, adbd continuera à fonctionner et à écouter la connexion sur votre PORT fourni.

Ne vous inquiétez pas pour la sécurité. Alors qu'adbd recevra une connexion du réseau Wi-Fi local, il ne pourra pas se connecter avec succès à votre appareil si vous n'autorisez pas le débogage en acceptant son empreinte digitale.

Quoi qu'il en soit, dans votre émulateur de terminal, exécutez

adb connect localhost:PORT

Il vous sera demandé d'accepter une empreinte digitale. Si vous suivez attentivement les instructions, vous obtiendrez le résultat :

connected to localhost:PORT

Maintenant vous pouvez exécuter votre commande de sauvegarde. Mais honnêtement, ce que vous essayez d'obtenir n'est pas clair pour moi. Si la sauvegarde seule est le but, alors Hélium pourrait vous aider, bien qu'il faille également disposer d'un accès Root ou d'un PC équipé d'une carte de crédit. adb installation.

Au cas où vous ne le sauriez pas, toutes les applications ne peuvent pas être sauvegardées en utilisant adb .

0 votes

@Firelord : ok j'ai finalement trouvé un moyen de faire ce que je veux : simplement utiliser le service de sauvegarde Android (appelé par /system/bin/bu ) qui nécessitera de toute façon une interaction avec l'utilisateur. La réponse définitive est donc que ce n'est pas possible pour des raisons évidentes.

0 votes

@user2284570 J'ai essayé cela avant d'éditer ma réponse mais j'ai remarqué que sans accès adb ou Root, l'exécution bu ne fonctionnait pas. Le dépannage par logcat a révélé que android.permission.backup n'a pas été accordée à l'utilisateur ordinaire. Vous dites que vous avez réussi à faire une sauvegarde sans utiliser adb ou l'accès Root ?

0 votes

@Firelord : bien sûr que non.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X