Membawa anda langkah demi langkah untuk membangunkan alat sandaran telefon mudah alih menggunakan Node.js dan adb

青灯夜游
Lepaskan: 2022-05-05 21:13:06
ke hadapan
3348 orang telah melayarinya

Artikel ini akan berkongsi dengan anda pengalaman praktikal Nod dan memperkenalkan cara membangunkan alat sandaran telefon mudah alih menggunakan Node.js dan adb. Saya harap ia akan membantu semua orang.

Membawa anda langkah demi langkah untuk membangunkan alat sandaran telefon mudah alih menggunakan Node.js dan adb

Dengan perkembangan teknologi, definisi gambar dan video yang kita ambil dalam kehidupan seharian kita terus bertambah baik, tetapi ini juga mempunyai kelemahan utama, iaitu, mereka saiz juga semakin besar. Saya masih ingat apabila saya mula menggunakan telefon pintar, foto hanya akan menjadi 2-5MB, tetapi kini foto telah mencapai 15-20MB, atau lebih besar.

Membawa anda langkah demi langkah untuk membangunkan alat sandaran telefon mudah alih menggunakan Node.js dan adb

Ruang storan pada telefon mudah alih kami adalah terhad. Bagaimanakah kami menyandarkan foto dan video ini untuk mengosongkan ruang pada telefon mudah alih kami?

Jadi, pada mulanya, saya menyimpan semua data ini dalam awan album foto Walaupun masalah menyimpan data ini telah diselesaikan, masalah baru juga muncul, seperti kekangan saiz muat naik dan keperluan untuk Menduduki latar belakang. membawa kepada peningkatan penggunaan kuasa dan pengiklanan.

Kemudian saya berhenti menggunakannya dan menulis skrip untuk menyandarkan data, jadi artikel ini keluar.

Saya menggunakan Node.js dan adb untuk membuat skrip ini dan menamakannya MIB

Prinsip

Alat ini dilaksanakan dengan menggunakan adb nyahpepijat pada telefon mudah alih dan membaca maklumat fail serta menyalin dan mengalihkan fail dalam telefon bimbit melalui arahan shell.

Proses pelaksanaan

Saya melukis carta alir ringkas MIBPertama, fail konfigurasi akan dibaca daripada fail konfigurasi (jika tiada fail konfigurasi, fail konfigurasi akan dibuat). Dapatkan laluan nod yang perlu disandarkan dan lakukan operasi sandaran fail. sehingga hujung nod.

Membawa anda langkah demi langkah untuk membangunkan alat sandaran telefon mudah alih menggunakan Node.js dan adb

Proses pembangunan

Pemasangan persekitaran yang diperlukan

  • Muat turun pakej adb, digunakan untuk melaksanakan pelbagai operasi peranti

  • Muat turunNode.js, saya percaya semua orang sudah mempunyai ini pada komputer mereka

  • Pasang pustaka bergantung

    • fs-extra: fspustaka Node
    • berdasarkan prompts pengkapsulan sekunder modul: NodePustaka
    • winston untuk interaksi pada baris arahan: NodePustaka untuk merekod log skrip

disebabkan kod sumber projek Agak terlalu banyak, saya hanya meletakkan bahagian kod utama di sini

Rakan-rakan yang berminat boleh pergi ke github untuk melihat kod sumber projek github.com/QC2168/mib

Baca fail konfigurasi

export const getConfig = (): ConfigType => {
  if (existConf()) {
    return readJsonSync(CONFIG_PATH);
  }
  // 找不到配置文件
  return createDefaultConfig();
};
Salin selepas log masuk

Apabila melaksanakan skrip, pilih peranti yang perlu disandarkanID. Dan nyatakan peranti apabila melaksanakan perintah 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;
};
Salin selepas log masuk

Traverse nod sandaran

Selepas memilih peranti, masukkan traversal maklumat nod, dan Laksanakan salinan fail ke laluan yang ditentukan (output atribut dalam fail konfigurasi)

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");
    }
  }
};
Salin selepas log masuk

Fungsi skrip

  • USBSambungkan Data sandaran
  • Data sandaran sambungan wayarles
  • Pilihan sandaran berbilang peranti
  • Sandaran penuh nod tunggal

Masukkan arahan berikut dalam terminal menggunakan

untuk memasang secara global mib.

npm i @qc2168/mib -g
Salin selepas log masuk

Fail skrip konfigurasi

Untuk penggunaan kali pertama, anda perlu mencipta fail .mibrc baharu dalam direktori pengguna dan tetapkan kandungan parameter yang sepadan.

{
    "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"
}
Salin selepas log masuk

Laksanakan sandaran

Dalam konsol, masukkan mib terus untuk mencetuskan skrip tanpa sebarang parameter lain.

mib
Salin selepas log masuk

Konsol akan mengeluarkan maklumat yang sepadan berdasarkan fail konfigurasi.

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 程序结束
Salin selepas log masuk

Alamat asal: https://juejin.cn/post/7084889987631710221

Penulis: _island

Mohon lebih banyak pengetahuan berkaitan nod lawati: tutorial nodejs!

Atas ialah kandungan terperinci Membawa anda langkah demi langkah untuk membangunkan alat sandaran telefon mudah alih menggunakan Node.js dan adb. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!