Table des matières
原理
执行流程
开发过程
脚本功能
使用
Principe< /strong>
Processus d'exécution
Processus de développement
Utiliser
Maison interface Web js tutoriel Vous guidez étape par étape pour développer un gadget de sauvegarde de téléphone mobile à l'aide de Node.js et adb

Vous guidez étape par étape pour développer un gadget de sauvegarde de téléphone mobile à l'aide de Node.js et adb

Apr 14, 2022 pm 09:06 PM
node.js

Cet article partagera avec vous une pratique pratique de Node et vous présentera comment développer un gadget de sauvegarde de téléphone mobile à l'aide de Node.js et adb. J'espère que cela sera utile à tout le monde !

Vous guidez étape par étape pour développer un gadget de sauvegarde de téléphone mobile à l'aide de Node.js et adb

Avec le développement de la technologie, la définition des photos et des vidéos que nous prenons dans notre vie quotidienne continue de s'améliorer, mais cela présente également un inconvénient majeur, c'est-à-dire que leur taille devient également de plus en plus grande. Je me souviens encore que lorsque j'ai commencé à utiliser des smartphones, une photo ne faisait que 2 à 5 Mo, mais maintenant, une photo atteint 15 à 20 Mo, voire même plus. 2-5MB,而现在一张照片已经达到了15-20MB,甚至更大。

Vous guidez étape par étape pour développer un gadget de sauvegarde de téléphone mobile à laide de Node.js et adb

而我们手机上的存储空间是有限的,我们怎么把这些照片和视频备份起来,好让手机腾出空间来呢?

于是,在刚开始我是将这些数据都存放在了某相册云端上,虽然解决了存放这些数据的问题,但是也冒出了新的问题,例如上传大小约束、需要一直占后台导致耗电增加、广告。

后面我干脆不使用了,自己撸了一个脚本用于备份这些数据,于是就有了这一篇文章。

我使用了Node.jsadb制作了这一个脚本,并命名为MIB

原理

这个小工具是利用手机上的adb调试,通过shell命令读取手机中的文件信息和复制,移动手机中的文件实现的。

执行流程

我画了一个简易流程图,MIB首先会从读取配置文件(没有则创建配文件),根据配置文件读取需要备份的节点路径并进行文件备份操作。直到节点结束。

Vous guidez étape par étape pour développer un gadget de sauvegarde de téléphone mobile à laide de Node.js et adb

开发过程

安装所需环境

  • 下载adb包,用于执行各种设备操作

  • 下载Node.js,这个我相信兄弟们的电脑上都已经有了

  • 安装依赖库

    • fs-extra:基于fs模块二次封装的Node
    • prompts:命令行上交互的Node
    • winston:用于记录脚本日志的Node

由于项目源码有点过多,我这里只放主要的代码部分

有兴趣的小伙伴可以去github上看项目源码 github.com/QC2168/mib

读取配置文件

export const getConfig = (): ConfigType => {
  if (existConf()) {
    return readJsonSync(CONFIG_PATH);
  }
  // 找不到配置文件
  return createDefaultConfig();
};
Copier après la connexion

在执行脚本时,选择需要备份的设备ID。并指定执行adb命令时的设备

(async () => {
  const device: string | boolean = await selectDevice();
  if (device) MIB();
})();

export const selectDevice = async ():Promise<string|false> => {
  // 获取设备
  const list: devicesType[] = devices();

  if (list.length === 0) {
    log("当前无设备连接,请连接后再执行该工具", "warn");
    return false;
  }

  const result = list.map((i) => ({ title: i.name, value: i.name }));

  const { value } = await prompts({
    type: "select",
    name: "value",
    message: "please select your device",
    choices: result,
  });
  currentDeviceName = value;
  return currentDeviceName;
};
Copier après la connexion

遍历备份节点

选择设备之后,进入遍历节点信息,并执行拷贝文件到指定路径(配置文件中的output属性)

const MIB = () => {
  // 获取配置文件
  const { backups, output } = getConfig();
  // 判断备份节点是否为空
  if (backups.length === 0) {
    log("当前备份节点为空", "warn");
    log("请在配置文件中添加备份节点", "warn");
  }
  if (backups.length > 0) {
    isPath(output);
    // 解析备份路径最后一个文件夹
    backups.forEach((item: SaveItemType) => {
      log(`当前执行备份任务:${item.comment}`);
      const arr = item.path.split("/").filter((i: string) => i !== "");
      const folderName = arr.at(-1);
      const backupDir = pathRepair(item.path);
      // 备份目录
      // 判断节点内是否有备份目录  // 拼接导出路径
      const rootPath = pathRepair(pathRepair(output) + folderName);
      const outputDir = item.output
        ? item.output && pathRepair(item.output)
        : rootPath;
      // 判断备份路径是否存在
      if (!isPathAdb(backupDir)) {
        log(`备份路径:${backupDir} 不存在已跳过`, "error");
      } else {
        // 判断导出路径
        isPath(outputDir);
        backup(backupDir, outputDir, item.full);
      }
    });
  }
  log("程序结束");
};


// 细化需要备份的文件,进入备份队列中
const backup = (target: string, output: string, full: boolean = false) => {
  if (!full) {
    // 备份非备份的文件数据
    // 获取手机中的文件信息,对比本地
    const { backupQueue } = initData(target, output);
    // 计算体积和数量
    computeBackupSize(backupQueue);
    // 执行备份程序
    move(backupQueue, output);
  } else {
    // 不文件对比,直接备份
    moveFolder(target, output);
  }
};


// 移动待备份文件队列中的文件
const move = (backupQueue: FileNodeType[], outputDir: string): void => {
  if (backupQueue.length === 0) {
    log("无需备份");
    return;
  }
  for (const fileN of backupQueue) {
    log(`正在备份${fileN.fileName}`);
    try {
      const out: string = execAdb(
        `pull "${fileN.filePath}" "${outputDir + fileN.fileName}"`,
      );
      const speed: string | null = out.match(speedReg) !== null ? out.match(speedReg)![0] : "读取速度失败";
      log(`平均传输速度${speed}`);
    } catch (e: any) {
      log(`备份${fileN.fileName}失败 error:${e.message}`, "error");
    }
  }
};
Copier après la connexion

脚本功能

  • USB连接备份数据
  • 无线连接备份数据
  • 多设备备份选择
  • 单节点全量备份

使用

在终端中输入以下命令进行全局安装mib

npm i @qc2168/mib -g
Copier après la connexion

配置脚本文件

首次使用需要在用户目录下新建.mibrc文件,并设置对应的参数内容。

{
    "backups": [
        {
            "path": "/sdcard/MIUI/sound_recorder/call_rec",
            "comment": "通话录音"
        },
        {
            "path": "/sdcard/DCIM/Camera",
            "comment": "本地相册"
        },
        {
            "path": "/sdcard/DCIM/Creative",
            "comment": "我的创作"
        },
        {
            "path": "/sdcard/Pictures/weixin",
            "comment": "微信相册"
        },
        {
            "path": "/sdcard/tencent/qq_images",
            "comment": "QQ相册"
        },
        {
            "path": "/sdcard/Pictures/知乎",
            "comment": "知乎"
        },
        {
            "path": "/sdcard/tieba",
            "comment": "贴吧"
        },
        {
            "path": "/sdcard/DCIM/Screenshots",
            "comment": "屏幕截屏"
        },
        {
            "path": "/sdcard/DCIM/screenrecorder",
            "comment": "屏幕录制"
        },
        {
            "path": "/sdcard/MIUI/sound_recorder",
            "comment": "录音"
        },
        {
            "path": "/sdcard/MIUI/sound_recorder/app_rec",
            "comment": "应用录音"
        }
    ],
    "output": "E:/backups/MI10PRO"
}
Copier après la connexion

执行备份

在控制台中,直接输入mib

Vous guidez étape par étape pour développer un gadget de sauvegarde de téléphone mobile à laide de Node.js et adb

Et L'espace de stockage sur nos téléphones mobiles est limité. Comment sauvegarder ces photos et vidéos pour libérer de l'espace sur nos téléphones mobiles ?

Donc, au début, j'ai stocké toutes ces données dans un certain cloud d'album photo. Bien que le problème du stockage de ces données ait été résolu, de nouveaux problèmes sont également apparus, tels que les contraintes de taille de téléchargement et la nécessité d'occuper l'arrière-plan en permanence. , ce qui a entraîné une augmentation de la consommation d'électricité et de la publicité.

Plus tard, j'ai simplement arrêté de l'utiliser et j'ai écrit un script pour sauvegarder les données, donc cet article est sorti.

J'ai utilisé

Node.js et adb pour créer ce script, et je l'ai nommé MIB

Principe< /strong>

Ce petit outil utilise le débogage adb sur le téléphone mobile pour lire et copier les informations du fichier dans le téléphone mobile via la commande shell, et déplacer les fichiers du téléphone mobile dans . 🎜

Processus d'exécution

🎜J'ai dessiné un organigramme simple MIB lira d'abord le fichier de configuration (sinon, créera un fichier de configuration), en fonction. Le fichier de configuration lit le chemin du nœud qui doit être sauvegardé et effectue des opérations de sauvegarde de fichiers. jusqu'à la fin du nœud. 🎜🎜Vous guidez étape par étape pour développer un gadget de sauvegarde de téléphone mobile à laide de Node.js et adb🎜

Processus de développement

🎜Installation de l'environnement requis🎜
  • 🎜Téléchargez le package adb, qui est utilisé pour effectuer diverses opérations sur l'appareil🎜
  • 🎜Téléchargez Node.js< /code >, je crois que tout le monde l'a déjà sur son ordinateur🎜</li><li>🎜Installer les bibliothèques dépendantes🎜<ul><li><code>fs-extra : basé sur fs< /code>Bibliothèque <code>Node d'encapsulation secondaire du module
  • invites : bibliothèque Node interactive sur la ligne de commande
  • < li>winston : bibliothèque Node pour l'enregistrement des journaux de script
🎜🎜Étant donné que le code source du projet est un peu Il y en a trop, je n'ai mis que la partie principale du code ici🎜🎜Les amis intéressés peuvent aller sur github pour voir le code source du projet github.com/QC2168/mib🎜🎜🎜🎜Lire le fichier de configuration🎜
mib
Copier après la connexion
🎜Lors de l'exécution du script, sélectionnez l'appareil qui doit être sauvegardé ID. Et spécifiez le périphérique lors de l'exécution de la commande adb 🎜
2022-04-09 20:58:11 info 当前执行备份任务:屏幕录制
2022-04-09 20:58:11 info 备份数量1
2022-04-09 20:58:11 info 已获取数据24Mb
2022-04-09 20:58:11 info 备份体积24Mb
2022-04-09 20:58:11 info 正在备份Screenrecorder-2022-04-08-19-45-51-836.mp4
2022-04-09 20:58:12 info 平均传输速度27.7 MB/s
2022-04-09 20:58:12 info 当前执行备份任务:录音
2022-04-09 20:58:12 info 备份数量0
2022-04-09 20:58:12 info 备份体积0Mb
2022-04-09 20:58:12 info 无需备份
2022-04-09 20:58:13 info 程序结束
Copier après la connexion
🎜Traversez le nœud de sauvegarde🎜🎜Après en sélectionnant le périphérique, entrez les informations du nœud de traversée et exécutez le fichier de copie vers le chemin spécifié (attribut output dans le fichier de configuration) 🎜rrreee

Fonction de script h2>
  • USBConnecter les données de sauvegarde li>
  • Données de sauvegarde de connexion sans fil
  • Sélection de sauvegarde multi-périphériques
  • Sauvegarde complète d'un seul nœud

Utiliser

🎜 Entrez la commande suivante dans le terminal pour installer globalement mib . 🎜rrreee🎜Fichier de script de configuration🎜🎜Pour la première utilisation, vous devez créer un nouveau fichier .mibrc dans le répertoire utilisateur et définir le contenu des paramètres correspondant. 🎜rrreee🎜Effectuer une sauvegarde🎜🎜Dans la console, saisissez directement mib pour déclencher le script, Aucun autre paramètre n'est requis. 🎜rrreee🎜La console affichera les informations correspondantes basées sur le fichier de configuration. 🎜rrreee🎜🎜Adresse originale : https://juejin.cn/post/7084889987631710221🎜🎜Auteur : _island🎜🎜🎜Pour plus de connaissances sur les nœuds, veuillez visiter : 🎜tutoriel Nodejs🎜 ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Si ADB n'est pas reconnu dans Windows 11, procédez comme suit Si ADB n'est pas reconnu dans Windows 11, procédez comme suit May 19, 2023 pm 04:08 PM

Si vous essayez de flasher une ROM personnalisée, de récupérer votre téléphone à partir d'une boucle de démarrage ou de déverrouiller le chargeur de démarrage, ADB et Fastboot seront vos meilleurs amis. ADB vous aide à installer des applications sur votre téléphone, à désinstaller des applications système sans rooter votre appareil, à obtenir des journaux d'applications, à émettre des commandes vers des applications et, de manière générale, à communiquer avec votre appareil Android. Fastboot et ADB sont deux des outils les plus importants lors de l'utilisation d'appareils Android. Cependant, de nombreuses personnes rencontrent souvent des problèmes lorsqu'elles tentent d'utiliser ADB et Fastboot pour la première fois. L'erreur ADB non reconnue est courante chez les personnes essayant de configurer ADB pour la première fois, mais pour les personnes qui ont

Explication graphique détaillée de la mémoire et du GC du moteur Node V8 Explication graphique détaillée de la mémoire et du GC du moteur Node V8 Mar 29, 2023 pm 06:02 PM

Cet article vous donnera une compréhension approfondie de la mémoire et du garbage collector (GC) du moteur NodeJS V8. J'espère qu'il vous sera utile !

Un article pour parler du contrôle de la mémoire dans Node Un article pour parler du contrôle de la mémoire dans Node Apr 26, 2023 pm 05:37 PM

Le service Node construit sur une base non bloquante et piloté par les événements présente l'avantage d'une faible consommation de mémoire et est très adapté à la gestion de requêtes réseau massives. Dans le contexte de demandes massives, les questions liées au « contrôle de la mémoire » doivent être prises en compte. 1. Le mécanisme de récupération de place du V8 et les limitations de mémoire Js sont contrôlés par la machine de récupération de place

Parlons de la façon de choisir la meilleure image Docker Node.js ? Parlons de la façon de choisir la meilleure image Docker Node.js ? Dec 13, 2022 pm 08:00 PM

Le choix d'une image Docker pour Node peut sembler trivial, mais la taille et les vulnérabilités potentielles de l'image peuvent avoir un impact significatif sur votre processus CI/CD et votre sécurité. Alors, comment choisir la meilleure image Docker Node.js ?

Parlons en profondeur du module File dans Node Parlons en profondeur du module File dans Node Apr 24, 2023 pm 05:49 PM

Le module de fichiers est une encapsulation des opérations de fichiers sous-jacentes, telles que l'ajout de lecture/écriture/ouverture/fermeture/suppression de fichiers, etc. La plus grande caractéristique du module de fichiers est que toutes les méthodes fournissent deux versions de **synchrone** et ** asynchrone**, with Les méthodes avec le suffixe sync sont toutes des méthodes de synchronisation, et celles qui n'en ont pas sont toutes des méthodes hétérogènes.

Node.js 19 est officiellement sorti, parlons de ses 6 fonctionnalités majeures ! Node.js 19 est officiellement sorti, parlons de ses 6 fonctionnalités majeures ! Nov 16, 2022 pm 08:34 PM

Node 19 est officiellement publié. Cet article vous donnera une explication détaillée des 6 fonctionnalités majeures de Node.js 19. J'espère qu'il vous sera utile !

Comment télécharger et installer le pilote ADB sur Windows 11 Comment télécharger et installer le pilote ADB sur Windows 11 Apr 13, 2023 pm 11:19 PM

ADB est un outil de ligne de commande qui permet aux utilisateurs d'effectuer des modifications complexes et sans restriction sur les appareils Android. Vous pouvez l'utiliser pour effectuer le chargement latéral d'applications, le flashage personnalisé de la ROM et les mises à niveau du micrologiciel, ainsi que d'autres ajustements avancés. Le pilote ADB facilite ce processus et garantit qu'ADB fonctionne comme prévu. Cependant, comme les systèmes d’exploitation précédents, ADB n’est pas préinstallé sur Windows 11. Vous devez donc installer le pilote vous-même. Dans ce didacticiel, nous vous montrons non seulement comment installer le pilote ADB, mais nous vous guidons également tout au long du processus de configuration. Les pilotes ADB sont-ils sûrs à installer ? Les pilotes ADB sont généralement sûrs. Ils ne feront rien d'inutile à votre PC

Parlons du mécanisme GC (garbage collection) dans Node.js Parlons du mécanisme GC (garbage collection) dans Node.js Nov 29, 2022 pm 08:44 PM

Comment Node.js fait-il le GC (garbage collection) ? L’article suivant vous guidera à travers cela.

See all articles