当前位置: 手机中国论坛 > 一加论坛 > 一加6论坛 > 讨论 > 帖子正文

[讨论] 《玩机大神之路》系列教程(四)实战-工具箱开发篇

2018-12-17 18:29:40 220 评论(0)
本帖最后由 Durance 于 2018-8-22 15:51 编辑
为了让各位加油能够更加了解手机,懂手机,特推出此系列教程。本系列教程由一加社区解答组原创出品,旨在从硬件到软件到玩机甚至到基础开发,全方位带领小白用户成长成为“玩机大神”,实现从「用手机」到「懂手机」的提升。一加社区作为唯一发布渠道,未经授权禁止任何形式的复制、粘贴、抄袭及转载。

【图片1】《玩机大神之路》系列教程(四)实战-工具箱开发篇
本文为系列教程第四篇。教程目录:
第一篇(硬件篇)://www.oneplusbbs.com/thread-4281090-1.html(点击可访问)
第二篇(软件篇)://www.oneplusbbs.com/thread-4297402-1.html(可点击访问)
第三篇(玩机操作篇)://www.oneplusbbs.com/thread-4302985-1.html(可点击访问)
第四篇(实战-开发属于自己的工具箱)://www.oneplusbbs.com/thread-4303727-1.html(本文)
第五篇(系统开发编译篇):规划和需求分析中...


为保证热度,回复本帖即可见本帖所有隐藏内容(注意不要灌水,无意义回复哦,否则可能会因违反版规删除回复,可能影响后期的阅读^_^),本文建议在PC端进行阅读,以获得更好的阅读体验。

在本篇教程中,你将了解到制作属于你自己的玩机工具箱的全过程。本篇教程以OnePlus 6玩机工具箱(解答组版)为基础,以其包含的基础功能进行教学。完成本篇教学后,你将能够轻松地开发出属于你自己的玩机工具箱!工具箱制作过程大揭秘!



一、工具箱制作基础与原理
在上一篇教程中,我们已经了解到,玩机操作利用到了ADB工具和Fastboot工具,并通过相关的命令执行对手机的操作。那么工具箱将以此着手。
要想让计算机为我们自动的执行一些语句,其最容易想到的即是 通过脚本语句,十分方便。
以下教学及我此前发布的工具箱,均利用的是批处理指令,并进行封包打包为exe文件的方式进行编写。学习本篇教程前,不需要您事先学习任何的编程语言等,不会涉及高深的知识,也正如我在工具箱发布帖中所说的,工具箱的技术难度不高,成本也较低,当然,在阅读前请确保您已经学习了第三篇的内容,不然依然可能难以下手。
如果一切准备就绪,请跟我来,为你揭开 玩机工具箱制作的全过程。


二、环境准备进行工具箱的制作,你需要准备好:

1、一台运行Windows系统的计算机;
2、Notepad++等文本编辑器(推荐Notepad++)官方网站:https://notepad-plus-plus.org/ 可自行下载安装,下载安装过程不再赘述。
【图片2】《玩机大神之路》系列教程(四)实战-工具箱开发篇
(图为 Notepad++官网页面)
3、没有了,没错,只要这些,不需要你安装乱七八糟的其他内容^_^


三、开始我们的“第一行代码”-主界面的设计
① 文件的创建
在任意一个目录创建一个.bat批处理文件,并使用Notepad++打开。我们在这里命名为“工具箱测试.bat”,确保图标为: 【图片3】《玩机大神之路》系列教程(四)实战-工具箱开发篇

打开后主界面如图显示:
【图片4】《玩机大神之路》系列教程(四)实战-工具箱开发篇
② 主界面设置与文字显示

在bat批处理中,用于显示文字的命令为:
  1. echo 文字内容
复制代码用于显示一行空行的命令为:
  1. echo.
复制代码在我们写要正式显示的内容前,我们需要先将ECHO放置在关闭状态。关闭状态下,每行代码的执行过程将不可见,这才是我们想要的,否则,界面将会十分混乱。要将ECHO关闭且不显示关闭ECHO这条命令,需要输入的内容为:
  1. @echo off
复制代码并将它放置在最顶端位置。

现在我们来试一试,输出三行内容,两行文字(中间一行为空行),要写入的代码为:
  1. @echo off
  2. echo 这是第一行测试文字
  3. echo.
  4. echo 这是空行以后的第二行测试文字
复制代码并保存,随后双击bat文件运行。

这时你会发现,窗口只是闪烁一次,然后就退出了。这是由于程序运行速度太快,而程序正常运行结束就自动正常退出了,我们看不到显示的实际文字,因此,我们需要再加入一行
  1. pause
复制代码这一行代码用于让程序暂停运行,等待我们的下一步操作,屏幕上同样也会输出一行:“请按任意键继续...” 【图片5】《玩机大神之路》系列教程(四)实战-工具箱开发篇
【图片6】《玩机大神之路》系列教程(四)实战-工具箱开发篇可看到,现在已经可以正常输出了。(请注意,如果输出的是乱码,请设置 编码,选择 “使用ANSI编码”)
接下来,我们按照这个道理输出工具箱的首页内容,代码如下(OnePlus 6玩机工具箱,解答组版 原版代码):
  1. @echo off
  2. echo.
  3. echo                                                    ======================
  4. echo                                                    =       主菜单       =
  5. echo                                                    ======================
  6. echo.
  7. echo                                                      请根据需要选择操作
  8. echo.
  9. echo                                   0) 检查手机连接状态
  10. echo                                   1) 安装手机驱动程序
  11. echo                                   2) 安装附加驱动(出现Waiting for device可尝试此选项)
  12. echo.
  13. echo                                   3) 检查是否解锁
  14. echo                                   4) 解锁手机(解除BootLoader锁)
  15. echo                                   5) 重新上锁手机(解锁后不建议重新上锁)
  16. echo.
  17. echo                                   6) ROOT手机(用于氢OS,且请确保手机已经解锁)(PATCH BOOT方式ROOT)
  18. echo                                   7) 刷入自定义第三方BOOT(包含Recovery)(可执行此操作后自行刷入Magisk进行ROOT)
  19. echo                                   8) 刷入第三方Recovery(TWRP官方镜像)
  20. echo.
  21. echo                                   9) 一键启动黑域服务
  22. echo                                  10) 重启设备开机
  23. echo                                  11) 重启设备到Fastboot模式
  24. echo                                  12) 重启设备到Recovery模式
  25. echo.
  26. echo                                  13) 检查是否有新版本工具箱(将自动打开论坛工具箱发布帖)
  27. echo                                  14) 访问一加社区
  28. echo                                  15) 退出
  29. echo.
  30. echo.
  31. pause
复制代码保存运行后,窗口显示内容为: 【图片7】《玩机大神之路》系列教程(四)实战-工具箱开发篇
与预期想象的内容一致。
那么,我们怎样让这些选项可供选择,并生效呢?


三、实现功能模块的选择和跳转
前文我们已经实现了基本的显示,但是现在只能做到显示内容,按下任意键就会退出程序,那么接下来,我会介绍怎样实现功能模块的选择和跳转。

要实现功能的跳转,则需要定义一个变量,这里我们选取变量名choice,更加直观,并将我们输入的内容储存在choice中,便于后续的选择

用到的语句为:
  1. set /p choice= 输入需要的选项:
复制代码此操作将会使得输出 = 号后内容,并将输入的内容存储到 choice中。

要实现跳转,则需要告诉计算机,要跳转到哪个模块,那么我们很容易想到,我们需要给每一块“区域”或称作“功能”进行命名,且功能执行完毕后,能够重新返回主菜单。

需要用到的语句为:
  1. :任意字符

  2. 例如:

  3. 给菜单命名为menu,需要输入:
  4. :menu
复制代码并放置在菜单的最顶部。

随后编写跳转指引:
  1. if '%choice%'=='0' goto :check                         //如果choice中存储的是0,那么跳转到check部分
  2. if '%choice%'=='1' goto :drivers                       //如果choice中存储的是1,那么跳转到drivers部分
  3. if '%choice%'=='2' goto :fastbootdriver           //同上所述
  4. if '%choice%'=='3' goto :lockstate
  5. if '%choice%'=='4' goto :unlock
  6. if '%choice%'=='5' goto :lock
  7. if '%choice%'=='6' goto :root
  8. if '%choice%'=='7' goto :flashanyrec
  9. if '%choice%'=='8' goto :flashtwrp
  10. if '%choice%'=='9' goto :starthy
  11. if '%choice%'=='10' goto :reboot
  12. if '%choice%'=='11' goto :bootfastboot
  13. if '%choice%'=='12' goto :bootrecovery
  14. if '%choice%'=='13' goto :update
  15. if '%choice%'=='14' goto :bbs
  16. if '%choice%'=='15' goto :exit
  17. goto menu                                             //为了防止选择其他内容,默认跳转到menu(效果如同刷新显示)
复制代码为了稍后能够检验我们的代码能够正常工作,我们需要写一个简单的测试。

我们为check功能定义内容,需要写入的语句为:
  1. :check              //首先声明以下内容为 check 部分
  2. cls                       //cls用于清屏,清除屏幕上的内容
  3. echo.
  4. echo 测试功能0的跳转           //输出一行内容
  5. echo.
  6. echo.
  7. pause                  //暂停执行,等待用户输入内容
  8. goto menu         //返回主菜单
复制代码并保存,到这里,我们写入的总代码为:
  1. @echo off
  2. :menu
  3. cls
  4. echo.
  5. echo                                                    ======================
  6. echo                                                    =       主菜单       =
  7. echo                                                    ======================
  8. echo.
  9. echo                                                      请根据需要选择操作
  10. echo.
  11. echo                                   0) 检查手机连接状态
  12. echo                                   1) 安装手机驱动程序
  13. echo                                   2) 安装附加驱动(出现Waiting for device可尝试此选项)
  14. echo.
  15. echo                                   3) 检查是否解锁
  16. echo                                   4) 解锁手机(解除BootLoader锁)
  17. echo                                   5) 重新上锁手机(解锁后不建议重新上锁)
  18. echo.
  19. echo                                   6) ROOT手机(用于氢OS,且请确保手机已经解锁)(PATCH BOOT方式ROOT)
  20. echo                                   7) 刷入自定义第三方BOOT(包含Recovery)(可执行此操作后自行刷入Magisk进行ROOT)
  21. echo                                   8) 刷入第三方Recovery(TWRP官方镜像)
  22. echo.
  23. echo                                   9) 一键启动黑域服务
  24. echo                                  10) 重启设备开机
  25. echo                                  11) 重启设备到Fastboot模式
  26. echo                                  12) 重启设备到Recovery模式
  27. echo.
  28. echo                                  13) 检查是否有新版本工具箱(将自动打开论坛工具箱发布帖)
  29. echo                                  14) 访问一加社区
  30. echo                                  15) 退出
  31. echo.
  32. echo.
  33. set /p choice= 输入需要的选项:
  34. echo.
  35. if '%choice%'=='0' goto :check
  36. if '%choice%'=='1' goto :drivers
  37. if '%choice%'=='2' goto :fastbootdriver
  38. if '%choice%'=='3' goto :lockstate
  39. if '%choice%'=='4' goto :unlock
  40. if '%choice%'=='5' goto :lock
  41. if '%choice%'=='6' goto :root
  42. if '%choice%'=='7' goto :flashanyrec
  43. if '%choice%'=='8' goto :flashtwrp
  44. if '%choice%'=='9' goto :starthy
  45. if '%choice%'=='10' goto :reboot
  46. if '%choice%'=='11' goto :bootfastboot
  47. if '%choice%'=='12' goto :bootrecovery
  48. if '%choice%'=='13' goto :update
  49. if '%choice%'=='14' goto :bbs
  50. if '%choice%'=='15' goto :exit
  51. goto menu
  52. exit /b

  53. :check
  54. cls
  55. echo.
  56. echo 测试功能0的跳转
  57. echo.
  58. echo.
  59. pause
  60. goto menu
复制代码
运行后,效果如图所示:

【图片8】《玩机大神之路》系列教程(四)实战-工具箱开发篇

【图片9】《玩机大神之路》系列教程(四)实战-工具箱开发篇


可看到功能能够正常跳转。清屏和返回主菜单功能也同样运行正常,是不是已经小有成就感了呢?重新温习一下上面的内容,接下来我们将要讲述实际功能的实现。




四、实际功能的实现(以检查手机连接状态为例)

接下来,我们要实现一个功能,检查手机连接状态,不然,只能输出内容多没意思? 【图片10】《玩机大神之路》系列教程(四)实战-工具箱开发篇

不要着急,前面的都只是铺垫。

我们在第三章提到过,工具箱的实现依赖了ADB和Fastboot工具,因此我们需要先引入这两个工具,我们将相关的文件全部复制到与bat文件同目录中,如图所示即为拷贝完成情况:
【图片11】《玩机大神之路》系列教程(四)实战-工具箱开发篇
拷贝完依赖的ADB和fastboot包后,则可以正常地在批处理中调用adb和Fastboot程序。
之所以采用了相对路径的方式,是为了日后打包bat为exe时的方便,否则会出现调用错误。

完成了拷贝后,我们开始尝试第一个功能的实现,在这里,我先放上代码,并进行解释:

  1. :check                       //注明下面的内容为check功能部分
  2. cls                            //清屏,清除之前显示的菜单内容
  3. echo.                        //打印空行
  4. echo 请注意稍后屏幕输出情况...                   //打印一行字符
  5. echo.                                                     //打印空行
  6. adb.exe devices                          //调用adb.exe,执行devices语句,等效于 adb devices  检测是否在开机/recovery模式
  7. ping -n 2 127.0.0.1 >NUL           //了解内容,可不写,意为等待2秒钟,  >NUL标识不显示此行代码的返回内容
  8. filefastboot.exe devices            //调用fastboot.exe,执行devices语句,等效于fastboot devices,检测是否在Fastboot模式
  9. echo.
  10. echo   =====================================================================================================
  11. echo   = = =                                                                                           = = =
  12. echo   = = =    若显示 序列号  device,代表连接正常,且为开机状态                                      = = =
  13. echo   = = =    若显示 序列号  unauthoritied,代表连接正常,但未授权调试,请在手机端点击信任允许调试   = = =
  14. echo   = = =    若显示 序列号  recovery,代表连接正常,目前处于Recovery模式                            = = =
  15. echo   = = =    若显示 序列号  fastboot,代表连接正常,且为Fastboot模式                                = = =
  16. echo   = = =    若显示 序列号  offline,代表连接异常,尝试拔掉数据线再连接一次                         = = =
  17. echo   = = =    若仅仅显示List of devices attached,下方空白无序列号,代表连接不正常或未开启USB调试    = = =
  18. echo   = = =                                                                                           = = =
  19. echo   =====================================================================================================
  20. echo.
  21. echo.
  22. echo 按下任意键返回主菜单...                                                     //输出必要的内容
  23. echo.
  24. pause             //暂停等待用户继续操作
  25. goto menu                 //执行完毕,返回主菜单,等待进一步操作
复制代码本段代码每一行都已经进行了注释,如果你已经认真学习了第三章的内容,看懂应该毫无压力,我们把这部分代码写入文件,自此,全部的代码为:
  1. @echo off
  2. :menu
  3. cls
  4. echo.
  5. echo                                                    ======================
  6. echo                                                    =       主菜单       =
  7. echo                                                    ======================
  8. echo.
  9. echo                                                      请根据需要选择操作
  10. echo.
  11. echo                                   0) 检查手机连接状态
  12. echo                                   1) 安装手机驱动程序
  13. echo                                   2) 安装附加驱动(出现Waiting for device可尝试此选项)
  14. echo.
  15. echo                                   3) 检查是否解锁
  16. echo                                   4) 解锁手机(解除BootLoader锁)
  17. echo                                   5) 重新上锁手机(解锁后不建议重新上锁)
  18. echo.
  19. echo                                   6) ROOT手机(用于氢OS,且请确保手机已经解锁)(PATCH BOOT方式ROOT)
  20. echo                                   7) 刷入自定义第三方BOOT(包含Recovery)(可执行此操作后自行刷入Magisk进行ROOT)
  21. echo                                   8) 刷入第三方Recovery(TWRP官方镜像)
  22. echo.
  23. echo                                   9) 一键启动黑域服务
  24. echo                                  10) 重启设备开机
  25. echo                                  11) 重启设备到Fastboot模式
  26. echo                                  12) 重启设备到Recovery模式
  27. echo.
  28. echo                                  13) 检查是否有新版本工具箱(将自动打开论坛工具箱发布帖)
  29. echo                                  14) 访问一加社区
  30. echo                                  15) 退出
  31. echo.
  32. echo.
  33. set /p choice= 输入需要的选项:
  34. echo.
  35. if '%choice%'=='0' goto :check
  36. if '%choice%'=='1' goto :drivers
  37. if '%choice%'=='2' goto :fastbootdriver
  38. if '%choice%'=='3' goto :lockstate
  39. if '%choice%'=='4' goto :unlock
  40. if '%choice%'=='5' goto :lock
  41. if '%choice%'=='6' goto :root
  42. if '%choice%'=='7' goto :flashanyrec
  43. if '%choice%'=='8' goto :flashtwrp
  44. if '%choice%'=='9' goto :starthy
  45. if '%choice%'=='10' goto :reboot
  46. if '%choice%'=='11' goto :bootfastboot
  47. if '%choice%'=='12' goto :bootrecovery
  48. if '%choice%'=='13' goto :update
  49. if '%choice%'=='14' goto :bbs
  50. if '%choice%'=='15' goto :exit
  51. goto menu
  52. exit /b

  53. :check
  54. cls
  55. echo.
  56. echo 请注意稍后屏幕输出情况...
  57. echo.
  58. adb.exe devices
  59. ping -n 2 127.0.0.1 >NUL
  60. fastboot.exe devices
  61. echo.
  62. echo   =====================================================================================================
  63. echo   = = =                                                                                           = = =
  64. echo   = = =    若显示 序列号  device,代表连接正常,且为开机状态                                      = = =
  65. echo   = = =    若显示 序列号  unauthoritied,代表连接正常,但未授权调试,请在手机端点击信任允许调试   = = =
  66. echo   = = =    若显示 序列号  recovery,代表连接正常,目前处于Recovery模式                            = = =
  67. echo   = = =    若显示 序列号  fastboot,代表连接正常,且为Fastboot模式                                = = =
  68. echo   = = =    若显示 序列号  offline,代表连接异常,尝试拔掉数据线再连接一次                         = = =
  69. echo   = = =    若仅仅显示List of devices attached,下方空白无序列号,代表连接不正常或未开启USB调试    = = =
  70. echo   = = =                                                                                           = = =
  71. echo   =====================================================================================================
  72. echo.
  73. echo.
  74. echo 按下任意键返回主菜单...
  75. echo.
  76. pause
  77. goto menu
复制代码
并保存退出。

运行测试可以看到:

【图片12】《玩机大神之路》系列教程(四)实战-工具箱开发篇


程序正常执行,输出内容正常。


自此,我们就完成了第一个功能的实现。




五、实现更多的功能

如果你已经跟着我的进度完成了前四部分,现在应该已经小有成就感,而之后要做的,就是重复第四部分内容,对我们规划的内容进行一一实现。

在这里,我列举几个功能示例,剩下的就交给加油自行摸索完成了^_^

检查解锁状态代码(以下代码为解答组版一加手机6工具箱原版代码,我将需要的文件放置在了file目录下,如果复制粘贴,请自行修改):
  1. :lockstate
  2. cls
  3. echo.
  4. echo 现在,请将手机关闭,先长按音量加号键,不松开“音量加”按键情况下长按电源键开机,直到看到英文界面,随后,在电脑端按下任意键继续...
  5. echo.
  6. pause
  7. cls
  8. filefastboot.exe oem device-info
  9. echo.
  10. echo                  ===========================================================
  11. echo                  = = =                                                 = = =
  12. echo                  = = =                 请检查输出的信息                = = =
  13. echo                  = = =                                                 = = =
  14. echo                  = = =          输出内容包含下行字符串代表已解锁       = = =
  15. echo                  = = =       (bootloader)    Device unlocked: true     = = =
  16. echo                  = = =                                                 = = =
  17. echo                  = = =          输出内容包含下行字符串代表未解锁       = = =
  18. echo                  = = =       (bootloader)    Device unlocked: false    = = =
  19. echo                  = = =                                                 = = =
  20. echo                  = = =               按下任意键返回主菜单              = = =
  21. echo                  ===========================================================
  22. echo.
  23. pause
  24. cls
  25. goto menu
复制代码0513版本ROOT功能实现核心代码:
  1. :rooting0513
  2. echo.
  3. echo 请确保当前在Fastboot模式下,即将ROOT您的OnePlus 6(氢OS 0513版本)
  4. echo.
  5. echo 按下任意键开始ROOT操作...
  6. echo.
  7. pause > NUL
  8. filefastboot.exe boot file513R_boot.img
  9. echo.
  10. echo 现在,若正常,手机将开始启动,启动完成后,请确保已经开启USB调试,并按下任意键告诉我,以继续操作...
  11. echo.
  12. pause > NUL
  13. echo.
  14. echo  现在,我们将为你安装Magisk Manager(ROOT权限管理程序).
  15. echo.
  16. fileadb.exe install fileMagiskManager-v5.7.0.apk
  17. echo.
  18. echo 安装完成,接下来,请按照我的提示操作你的手机:
  19. echo.
  20. echo  1) 打开应用抽屉,找到Magisk Manager应用并运行.(此处显示已ROOT只是临时ROOT)
  21. echo  2) 在Magisk应用中,从屏幕左侧右滑,点击设置
  22. echo  3) 点击“更新通道”,并修改为“测试版”
  23. echo  4) 返回Magisk主界面,确保“高级设置”中的“保持强制加密”及“保留AVB 2.0/dm-verity”为选中状态
  24. echo  5) 点击“安装”,随后选择“直接安装”,等待安装完成
  25. echo  6) ROOT完成!
  26. echo.
  27. echo  感谢您的使用,手机的ROOT操作已完成!
  28. echo.
  29. echo 按下任意键返回主界面...
  30. pause > NUL
  31. goto menu
复制代码其他的代码不再举例,道理都相同,只需要搞清楚跳转关系和逻辑,就能做出一个逻辑清晰,功能好用的工具箱来。

接下来,我会介绍一些其他的一些小技巧


六、完善工具箱细节

前文基础内容已经实现,下面我们处理一些细节问题

1、标题栏的内容

默认情况下,标题栏显示为cmd文件的路径,并不美观,我们可以在menu部分写入一行
  1. title 标题内容
复制代码
即可将标题更改为我们想要的内容。

2、字体颜色与背景颜色

要修改背景颜色与字体颜色,我们需要在主要的位置写入一行:
  1. color [背景代码][字体颜色代码]
复制代码颜色代码为:0=黑、1=蓝、2=绿、3=浅绿、4=红、5=紫、6=黄、7=白、8=灰、9=淡蓝、A=淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白

例如
  1. color 8f
复制代码代表 背景颜色为8号色,即灰色,字体颜色为f号,即亮白色。

3、对工具箱进行打包为exe可执行文件

前面我们已经写好了相关的功能实现,需要的文件也都在一个文件夹内,直接进行分享将会不太方便,用户需要进行解压等操作,因此我们可以通过bat转exe工具进行格式转换。具体的转换软件可百度搜索,这里不予推荐。

注意:进行exe转换后,杀毒软件将有极大概率报毒,请自行选择是否封包。



七、总结
本教程以0基础的条件为加油揭秘了 玩机工具箱 制作的全部核心过程。包括 原理环境配置界面编写功能跳转实现具体功能实现以及细节的优化等均有所涉猎。

如果你认真学习了本教程,现在的你只要多加练习,写出一个好用的工具箱也是指日可待的事情。

自此,本教程基本内容已经讲授完毕,如果有其他问题,请通过回复和我联系。

本系列教程由 一加社区解答组成员 完成,希望本系列的教程对你的提升有所帮助。
本系列教程所有内容无任何复制粘贴情况,请尊重原作者的创作内容,转载等必须经过本人许可。

欢迎各位加油通过自己的尝试,制作属于自己的工具箱,如果做得非常完善,也欢迎发表到一加社区,服务更多的加油~

此外,针对我们规划的 第五章——系统开发编译篇,由于内容较多,目前正在规划是否需要出品,如果需求较大,我们会尽快推出第五篇教程,如果需求量过小,第五篇教程将暂时搁置,不再在短期内进行发布,欢迎回复留言告诉我你的想法~




本主题由 岷县任 于 2018-10-9 23:08 删除回复

不吐不快,我来说两句... 登录 | 注册

发布
暂时没有回复

您需要注册登录后,才能回帖哦! 登录 | 注册