목차
原理
执行流程
开发过程
脚本功能
使用
로 지정했습니다.< /strong>
실행 프로세스
개발 과정
사용
웹 프론트엔드 JS 튜토리얼 Node.js와 adb를 사용하여 휴대폰 백업 가젯을 개발하는 방법을 단계별로 안내해 드립니다.

Node.js와 adb를 사용하여 휴대폰 백업 가젯을 개발하는 방법을 단계별로 안내해 드립니다.

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

이 글은 Node실습을 공유하고 Node.js와 adb를 사용하여 휴대폰 백업 가젯을 개발하는 방법을 소개합니다. 모두에게 도움이 되기를 바랍니다!

Node.js와 adb를 사용하여 휴대폰 백업 가젯을 개발하는 방법을 단계별로 안내해 드립니다.

기술의 발전과 함께 우리가 일상에서 찍는 사진과 영상의 화질은 계속해서 향상되고 있지만, 이 또한 크기가 점점 커지고 있다는 큰 단점이 있습니다. 처음 스마트폰을 사용하기 시작했을 때는 사진 한 장이 2~5MB에 불과했지만 지금은 사진이 15~20MB 또는 그보다 더 커진 것을 아직도 기억합니다. 2-5MB,而现在一张照片已经达到了15-20MB,甚至更大。

Node.js와 adb를 사용하여 휴대폰 백업 가젯을 개발하는 방법을 단계별로 안내해 드립니다.

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

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

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

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

原理

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

执行流程

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

Node.js와 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();
};
로그인 후 복사

在执行脚本时,选择需要备份的设备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;
};
로그인 후 복사

遍历备份节点

选择设备之后,进入遍历节点信息,并执行拷贝文件到指定路径(配置文件中的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");
    }
  }
};
로그인 후 복사

脚本功能

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

使用

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

npm i @qc2168/mib -g
로그인 후 복사

配置脚本文件

首次使用需要在用户目录下新建.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"
}
로그인 후 복사

执行备份

在控制台中,直接输入mib

Node.js와 adb를 사용하여 휴대폰 백업 가젯을 개발하는 방법을 단계별로 안내해 드립니다.

그리고 휴대폰의 저장 공간은 제한되어 있습니다. 휴대폰의 공간을 확보하기 위해 이러한 사진과 비디오를 어떻게 백업합니까?

그래서 처음에는 이 모든 데이터를 사진 앨범 클라우드에 저장했습니다. 이러한 데이터를 저장하는 문제는 해결되었지만 업로드 크기 제한, 배경을 항상 차지해야 하는 필요성 등 새로운 문제도 나타났습니다. 이는 전력 소비 증가, 광고로 이어졌습니다.

나중에 저는 단순히 사용을 중단하고 데이터를 백업하기 위해 스크립트를 직접 작성하여 이 글을 작성했습니다.

저는

Node.jsadb를 사용하여 이 스크립트를 만들고 이름을 MIB

로 지정했습니다.< /strong>

이 작은 도구는 휴대폰의 adb 디버깅을 사용하여 shell 명령을 통해 휴대폰의 파일 정보를 읽고 복사하고 이동합니다. 휴대폰 파일은 . 🎜

실행 프로세스

🎜간단한 흐름도를 그렸습니다. MIB는 먼저 구성 파일을 읽습니다(그렇지 않은 경우 구성 파일을 생성합니다). to 구성 파일은 백업해야 하는 노드 경로를 읽고 파일 백업 작업을 수행합니다. 노드 끝까지. 🎜🎜Node.js와 adb를 사용하여 휴대폰 백업 가젯을 개발하는 방법을 단계별로 안내해 드립니다.🎜

개발 과정

🎜필수 환경 설치🎜
  • 🎜다양한 장치 작업을 수행하는 데 사용되는 adb 패키지를 다운로드하세요🎜
  • 🎜Node.js<를 다운로드하세요 /code >, 모든 사람이 이미 자신의 컴퓨터에 이 기능을 가지고 있다고 생각합니다🎜</li><li>🎜종속 라이브러리 설치🎜<ul><li><code>fs-extra: fs< 기반 /code>모듈 보조 캡슐화 <code>노드 라이브러리
  • 프롬프트: 명령줄에서 대화형 노드 라이브러리
  • < li>winston: 스크립트 로그 기록을 위한 Node 라이브러리
🎜🎜프로젝트 소스 코드가 약간 있기 때문에 너무 많아서 메인 코드 부분만 여기에 넣었습니다🎜🎜관심 있는 친구들은 github에 가서 프로젝트 소스 코드를 볼 수 있습니다 github.com/QC2168/mib🎜🎜🎜🎜구성 파일 읽기🎜
mib
로그인 후 복사
🎜스크립트를 실행할 때 해당 장치를 선택하세요. ID를 백업해야 합니다. 그리고 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 程序结束
로그인 후 복사
🎜백업 노드 통과🎜🎜After 장치를 선택하고 순회 노드 정보를 입력한 후 지정된 경로(구성 파일의 output 속성)에 복사 파일을 실행합니다. 🎜rrreee

스크립트 기능 h2>
  • USB백업 데이터 연결 li>
  • 무선 연결 백업 데이터
  • 다중 장치 백업 선택
  • 단일 노드 전체 백업

사용

🎜 전역적으로 설치하려면 터미널에 다음 명령을 입력하세요. mib . 🎜rrreee🎜구성 스크립트 파일🎜🎜처음 사용하는 경우 사용자 디렉터리에 새 .mibrc 파일을 만들고 해당 매개변수 내용을 설정해야 합니다. 🎜rrreee🎜백업 수행🎜🎜콘솔에서 mib를 직접 입력하여 스크립트를 트리거하고, 다른 매개변수는 필요하지 않습니다. 🎜rrreee🎜콘솔은 구성 파일을 기반으로 해당 정보를 출력합니다. 🎜rrreee🎜🎜원본 주소: https://juejin.cn/post/7084889987631710221🎜🎜저자: _island🎜🎜🎜노드 관련 지식을 더 보려면 🎜nodejs 튜토리얼🎜을 방문하세요! 🎜

위 내용은 Node.js와 adb를 사용하여 휴대폰 백업 가젯을 개발하는 방법을 단계별로 안내해 드립니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Windows 11에서 ADB가 인식되지 않으면 다음을 수행하십시오. Windows 11에서 ADB가 인식되지 않으면 다음을 수행하십시오. May 19, 2023 pm 04:08 PM

맞춤형 ROM을 플래시하거나, 부팅 루프에서 휴대폰을 복구하거나, 부트로더를 잠금 해제하려는 경우 ADB와 Fastboot가 가장 친한 친구가 될 것입니다. ADB는 휴대폰에 앱을 설치하고, 기기를 루팅하지 않고 시스템 앱을 제거하고, 앱 로그를 얻고, 앱에 명령을 실행하고, 일반적으로 Android 기기와 통신하는 데 도움이 됩니다. Fastboot와 ADB는 Android 기기를 사용할 때 가장 중요한 두 가지 도구입니다. 그러나 많은 사람들이 처음으로 ADB와 Fastboot를 사용하려고 할 때 문제에 직면하는 경우가 많습니다. ADB 인식되지 않음 오류는 ADB를 처음 설정하려는 사람들에게 일반적이지만

Node V8 엔진의 메모리와 GC에 대한 자세한 그래픽 설명 Node V8 엔진의 메모리와 GC에 대한 자세한 그래픽 설명 Mar 29, 2023 pm 06:02 PM

이 기사는 NodeJS V8 엔진의 메모리 및 가비지 수집기(GC)에 대한 심층적인 이해를 제공할 것입니다. 도움이 되기를 바랍니다.

Node의 메모리 제어에 관한 기사 Node의 메모리 제어에 관한 기사 Apr 26, 2023 pm 05:37 PM

Non-Blocking, Event-Driven 기반으로 구축된 Node 서비스는 메모리 소모가 적다는 장점이 있으며, 대규모 네트워크 요청을 처리하는데 매우 적합합니다. 대규모 요청을 전제로 '메모리 제어'와 관련된 문제를 고려해야 합니다. 1. V8의 가비지 수집 메커니즘과 메모리 제한 Js는 가비지 수집 기계에 의해 제어됩니다.

최고의 Node.js Docker 이미지를 선택하는 방법에 대해 이야기해 볼까요? 최고의 Node.js Docker 이미지를 선택하는 방법에 대해 이야기해 볼까요? Dec 13, 2022 pm 08:00 PM

Node용 Docker 이미지를 선택하는 것은 사소한 문제처럼 보일 수 있지만 이미지의 크기와 잠재적인 취약점은 CI/CD 프로세스와 보안에 상당한 영향을 미칠 수 있습니다. 그렇다면 최고의 Node.js Docker 이미지를 어떻게 선택합니까?

Node의 파일 모듈에 대해 자세히 이야기해 보겠습니다. Node의 파일 모듈에 대해 자세히 이야기해 보겠습니다. Apr 24, 2023 pm 05:49 PM

파일 모듈은 파일 읽기/쓰기/열기/닫기/삭제 추가 등과 같은 기본 파일 작업을 캡슐화한 것입니다. 파일 모듈의 가장 큰 특징은 모든 메소드가 **동기** 및 ** 두 가지 버전을 제공한다는 것입니다. 비동기**, sync 접미사가 있는 메서드는 모두 동기화 메서드이고, 없는 메서드는 모두 이기종 메서드입니다.

Node.js 19가 공식적으로 출시되었습니다. Node.js의 6가지 주요 기능에 대해 이야기해 보겠습니다! Node.js 19가 공식적으로 출시되었습니다. Node.js의 6가지 주요 기능에 대해 이야기해 보겠습니다! Nov 16, 2022 pm 08:34 PM

Node 19가 정식 출시되었습니다. 이 글에서는 Node.js 19의 6가지 주요 기능에 대해 자세히 설명하겠습니다. 도움이 되셨으면 좋겠습니다!

Windows 11에서 ADB 드라이버를 다운로드하고 설치하는 방법 Windows 11에서 ADB 드라이버를 다운로드하고 설치하는 방법 Apr 13, 2023 pm 11:19 PM

ADB는 사용자가 Android 기기에서 복잡하고 제한 없는 변경을 수행할 수 있게 해주는 명령줄 도구입니다. 이를 사용하여 앱 사이드로딩, 사용자 정의 ROM 플래싱, 펌웨어 업그레이드 및 기타 고급 조정을 수행할 수 있습니다. ADB 드라이버는 이 프로세스를 촉진하고 ADB가 예상대로 작동하도록 보장합니다. 그러나 이전 운영 체제와 마찬가지로 ADB는 Windows 11에 사전 설치되어 있지 않습니다. 따라서 드라이버를 직접 설치해야 합니다. 이 튜토리얼에서는 ADB 드라이버를 설치하는 방법뿐만 아니라 구성 프로세스도 안내합니다. ADB 드라이버를 설치해도 안전합니까? ADB 드라이버는 일반적으로 안전합니다. 그들은 귀하의 PC에 불필요한 작업을 수행하지 않습니다

Node.js의 GC(가비지 수집) 메커니즘에 대해 이야기해 보겠습니다. Node.js의 GC(가비지 수집) 메커니즘에 대해 이야기해 보겠습니다. Nov 29, 2022 pm 08:44 PM

Node.js는 GC(가비지 수집)를 어떻게 수행하나요? 다음 기사에서는 이에 대해 설명합니다.

See all articles