Contents

碎屏手机改造移动路由

换了手机后,想专门配一个大流量的上网卡,良心联通15G/50元,但新办上网卡只有micro卡,而且新手机卡槽已然满了,一个4G卡托要一百多,还要插我那个电池垃圾不行的移动路由……怎么说我那破手机还是一个卡槽全网通啊!(而且心疼钱。)想想用这破手机实现也不难,无非是开机打开热点而已了。

开始从固件上入手,不过垃圾国行特供版少有开源固件,还要熟悉安卓启动机制,卒。转而寻求软件实现。发现也不难,从商店里下了几个热门的安卓自动化软件,简单说一下自己的体验。

在这之前,要先恢复手机到最佳状态。格掉吧!

预处理

恢复出厂设置最好的方法是通过Recovery。用fastboot或者三星的Odin线刷完整固件以后,再刷进去一个twrp recovery。所有手机碎屏后可以做到的啦。twrp有一个不需要授权的adb命令行,还有一个同名命令 twrp ,很方便。

开机音量上键进入twrp后,在电脑端 adb shell 进入命令行,进行如下几步设置。命令参考了这里。不得不说,在这种问题上,stackoverflow的回答和百度知道没什么两样,都是一群看别人教程来的人照猫画虎的写答案。我第一个看到的是这个,和我遇到的问题一毛一样。可这高票回答是什么鬼?“备份了换个手机吧。”踢你蛋蛋哦。

# 恢复出厂设置
twrp wipe data
twrp wipe cache
reboot
# 重启后等系统自动生成data分区结构,强制关机,再进入recovery

# 开启 adb
setprop persist.service.adb.enable 1
setprop persist.service.debuggable 1
setprop persist.sys.usb.config mtp,adb

然后在主机上对主系统里的adb进行授权。(*nix适用)

adb push ~/.android/adbkey.pub /data/misc/adb/adb_keys

接下来正常进入系统,用 AndroidScreencast 通过ADB投影屏幕,用 adb install 安装软件就好啦。

需求

要实现的功能有:

  • 开机自动开启热点
  • 网络变化后强制重开
  • 语音播报网络状态
  • 短信控制手机开关热点、开关机

软件

Automate

Automate是我第一个使用而且用了一段时间的软件(直到我发现了第二个),这个软件算是功能第二强大的软件,不过付费版是稳稳的第一。它让我想起来小时候玩过乐高的一个图形化编程小软件。画出流程图就可以按图执行操作,而且补全非常完整,全都可以下拉菜单解决。Automate是这几个里面唯一一个真正意义上在编写 程序 的app,它里面的一个flow是一个程序,一个fiber是一个线程,可以fork、可以subroutine、可以loop、可以if-else,简直是一个解释器。

唯一的缺点是,免费版所有运行的fiber中最多只能同时包含三十个程序块。程序开始算一个,fork一个线程多算一倍。[手动再见]

解决方案v1

/zh/2016/android-automated-life/00.png

/zh/2016/android-automated-life/01.png

/zh/2016/android-automated-life/02.png

用了两个flow,一个死循环检测AP状态并循环开启,一个监听短信并触发控制操作。我总觉得那个死循环特别费电……倒数三十秒,获取状态,一刻不停的好心累。最后特别加了只有这个软件有的功能,点亮通知LED灯。有网就绿色,没网就红色。

注意到一点让人觉得功能很强大,这里的TTS模块可以选择输出到哪个声道,输出到铃音声道就可以在播出语音前控制音量,很方便。

E-Robot

erobot和下面软件都是基于事件的触发方式的。有利有弊。基于事件的触发方式缺点是,程序流程相对固定,[触发器-触发条件-响应事件]的循环。不过优点也有不少。最重要的就是 省电 !安卓系统的状态变化都是一个一个的广播,只要程序打开来接收就可以,不用主动去探测系统状态,这个机制可以显著降低耗电量。

还有一个优点显而易见。这种方式实现的程序是 全异步 的!没有一个严格意义的主线程,只有这个软件的service监听所有的系统事件做一个dispatcher;所有的action也是,除非显式指定,否则每个action的执行也是并行的,不说性能上的考虑,起码定义非常非常简洁优雅。我搞完那个流程图还是觉得挺乱的……

解决方案v2

/zh/2016/android-automated-life/03.png

/zh/2016/android-automated-life/04.png

/zh/2016/android-automated-life/05.png

这一个解决方案里定义了三个commands。一个监听网络变动并在开机后自动运行,强制开启AP;一个接受短信并正则匹配操作并相应执行;最后一个专门语音播报网络状态。

这个菜单点来点去还是挺麻烦的,然后还不能复制粘贴……郁闷死了。那段检测网络状态的判断语句搞得人欲仙欲死,感觉自己快要栈溢出了😂来来来看看这菜单点开啥样的。

/zh/2016/android-automated-life/06.png

MacroDroid

不上图了,功能和上面一样。最大的区别是,长得好看一些,然后,垃圾的要死。

  • 免费版只能定义5个command
  • 每个只有一个触发器、一个action和应该是随便几个执行条件(那还有卵用)
  • 功能块比前两个少得多的多,没有热点控制,不能切换网络开关,没有TTS,所有需要root的功能都没有,没有正则匹配,没有自定义变量,连发个自己编写的通知的功能都没有,就那点鸡肋功能让人装这软件干啥?
  • 而且,是 这几个软件里面最贵的!

🙄卸了。

Tasker

也差不多……唯一一个亮眼的功能是,按时间地点触发Profile,不过CM13自带啊,对不起。E-Robot还能自定义白天、夜里的定位间隔和Wi-Fi扫描时间呢。

何况你还要钱。🙄

IFTTT

这个我只是想了想,装都没装。

IFTTT安卓版的功能太少了啦,它的主业是连接各种互联网应用,给手机顶多就是发发通知之类的,不能完整的控制手机的功能。毕竟不该它干的。最主要的理由还是一个,热点都开不开还忙乎啥。


其实我写这俩小脚本时候,想到的是py和node写web的日子。啧啧,异步真是优雅。多线程起来,程序又不乱,思路沿着callback走,比思考线程间发信号传委托的烧脑过程,脑仁爽多了。