この記事では、Node の実践的な経験を共有し、Node.js と adb を使用して携帯電話のバックアップ ガジェットを開発する方法を紹介します。
テクノロジーの発展に伴い、私たちが日常生活で撮影する写真やビデオの解像度は向上し続けていますが、これには大きな欠点もあります。サイズもどんどん大きくなってます。私がスマートフォンを使い始めたとき、写真は 2 ~ 5MB
しかなかったのを今でも覚えていますが、今では写真は 15 ~ 20MB
、あるいはそれ以上に大きくなりました。
#携帯電話のストレージ容量は限られています。これらの写真やビデオをバックアップして、携帯電話の容量を増やすにはどうすればよいですか?
そこで、最初はこれらのデータをすべてフォトアルバムクラウドに保存していましたが、データ保存の問題は解決したものの、アップロードサイズの制約や背景を占有する必要があるなどの新たな問題も発生しました。電力消費と広告の増加につながります。
私は単に後で使用をやめて、データをバックアップするためのスクリプトを自分で書いたので、この記事を思いつきました。
私は Node.js
と adb
を使用してこのスクリプトを作成し、MIB
#原理
この小さなツールは、携帯電話上でadb デバッグを使用し、
shell コマンドを通じて携帯電話内のファイル情報を読み取ります。携帯電話内のファイルをコピー、移動します。
実行プロセス
簡単なフローチャートを描きました。MIBは最初に設定ファイルを読み込みます(そうでない場合は、設定ファイルを作成します)。構成ファイルに従ってバックアップが必要なノードのパスを読み取り、ファイルのバックアップ操作を実行します。ノードの終わりまで。
必要な環境のインストール
- Download
- adb
パッケージ、さまざまなデバイス操作を実行するために使用されます
Download - Node.js
、私はこれを信じています。
すでにコンピューターに依存関係ライブラリがインストールされています -
- fs-extra
- :
fs
Module Secondary に基づいていますカプセル化Node
library prompts - :
Node
コマンド ラインでの対話用ライブラリ winston - :
Node
スクリプト ログを記録するためのライブラリ
- :
##設定ファイルの読み取り興味のある友人は、
github
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"); } } };
Script function
- 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
と直接入力し、他のパラメーターを指定せずにスクリプトをトリガーします。mib
コンソールは設定ファイルに基づいて対応する情報を出力します。
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 程序结束
元のアドレス: https://juejin.cn/post/7084889987631710221
著者: _island!ノード関連の知識について詳しくは、こちらをご覧ください。訪問:
nodejs チュートリアル
以上がNode.js と adb を使用して携帯電話のバックアップ ガジェットを開発する手順を段階的に説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

Quartzタイマーを使用してタスクをスケジュールする場合、Quartzでタスク通知を事前に送信する方法、タスクの実行時間はCron式によって設定されます。今...

JavaScriptプログラミング、プロトタイプチェーンの関数パラメーターの理解と操作のJavaScriptのプロトタイプチェーンの関数のパラメーターを取得する方法は、一般的で重要なタスクです...

WeChatアプレットWeb-ViewでVue.jsを使用する動的スタイルの変位障害がvue.jsを使用している理由の分析...

複数のリンクの同時ゲットリクエストを作成し、結果を返すために順番に判断する方法は? TamperMonkeyスクリプトでは、複数のチェーンを使用する必要があることがよくあります...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 中国語版
中国語版、とても使いやすい

ホットトピック



