关于「幕后」

我们每天会接触大量的软件、硬件,但是多数时间下,都只是以固有的「使用者」视觉去体验和评判,快节奏的模式让我们没时间体会太多背后的理念。「幕后」栏目 因此而生,我们会不定期邀请一些制作者,讲述他们在产品开发 / 制作过程中的点滴。


流畅、省电,这几乎是所有 Android 手机用户的共同愿景。我们在谈及相关话题之时,往往会提到一些非常优秀的 Android 系统优化应用,如绿色守护、冰箱等等。

除了这些大家耳熟能详的优化工具以外,一款名为黑域的应用近期也在 Android 玩机圈里攒下了不小的名气。通过劫持特定的系统 API,黑域直接通过返回、HOME、从最近任务列表移除等基本用户操作来判断一款应用的「去留」。除此之外,它不需要 ROOT,最高支持 Android 7.1,有着极低的上手门槛和极强的操作系统适应性。

而事实上,这款几乎没有上手难度的应用却与早期 Xposed 玩家心中一款叫做「阻止运行」的「神器」有着千丝万缕的联系。在 2016 少数派年度盘点 中,初生的黑域凭借其不俗的实力当选为 2016 年年度最佳 Android 应用之一,我们也借此机会采访到了黑域的开发者,请他们来谈一谈黑域这款优化应用新星的「前世今生」。

π:做一下自我介绍吧。

你好,我是黑域的开发者 Thom,大家也可以叫我子非;目前我在南京做 Java 后台开发,同时也是一个准爸。

π:你会如何向一名新用户介绍黑域,来帮助他们快速上手?

黑域和部分 Android 玩家所熟知的阻止运行模块一样,期望用不太复杂的操作与配置,让不想使用的应用不要长期运行及恶意唤醒。但它不需要 ROOT,且支持 Android 7.0 及以上版本的系统。

Android 对于每种操作都会有特定的事件,黑域就是通过分析这些事件来进行智能阻断:比如当用户按下 HOME 键时,黑域就将这个应用放入后台;当用户按下 BACK 键从一个应用退回桌面,则表示这个应用用户可能暂时用不上了;而当用户把一个应用从最近列表划掉,那这个应用短期内就没有在后台保留并保持唤醒的必要了。

个人认为这样的判定方式比较符合大多数 Android 用户的操作逻辑和使用习惯,当然,有些用户可能也不太认同我的这种使用方式。

π:黑域的前身其实就是「阻止运行」,可以简单介绍一下开发阻止运行这个 Xposed 模块的初衷吗?

写阻止运行这个 Xposed 模块的动机其实很简单。那时想用绿色守护,但绿色守护主要利用了 Android 3.2 才有的特性,并不支持我的古董机器 XPRT。而阻止运行作为一个 Xposed 模块,可以向后支持运行 Android 2.3 系统的设备。

π:你提到了绿色守护,可以为一些刚入门的 Android 玩家简单对比一下当前市面上常见的同类工具吗?比如冰箱、绿色守护和你自己当前正在维护的黑域。

普通版绿色守护主要是通过息屏以后点亮屏幕,模拟用户强行停止应用,达到不再收不到广播的作用,此外也可以把整个设备放入 Doze 模式;而 ROOT 版本则可以实现休眠等;Priv 模式有权限强行停止,可能会有一些优化;此外还有 Xposed 模式,改变某些系统行为,可能支持强行停止以后还能收 GCM 消息——整体上来说,绿色尊重了用户意愿,但对我而言版本众多,并不能提供相对统一的体验,对普通用户来说作用十分有限。

阻止运行和黑域则直接通过行为来决定用户是否使用应用,比如按 BACK 可能就是暂时不用,按 HOME 可能就是放到后台,从最近列表划掉就是真的不再使用,来决定如何处理不再使用的应用,比较简单粗暴些,同时处理效率也很高。此外,黑域高度利用 Android 6.0 的休眠(App Standby)特性,基本使用休眠来处理应用,强行停止恶意唤醒或者真的不再使用的应用。

绿色守护与黑域允许友好打开第三方应用,比如支付类、帐号类、分享类唤醒;而冰箱则直接告诉系统,这个应用不存在的,主要利用的是禁用特性。这也就为冰箱用户带来了一个常见的烦恼,如果他们把支付宝放进了冰箱,他们就无法在进行手机支付时调用支付宝客户端进行操作,除非事先对支付宝进行「解冻」。

π:后来你将阻止运行转让给了第三方厂商,是出于什么原因?

呃,主要是累了。说实话,在开发阻止运行的过程中,我自身已经换了好几家公司。到了去年,真的是身心疲累,不想在这上面投入更多时间。但毕竟已经花了这么多时间,我也并不想轻易放弃,如果能有个人或者团队继续维护自然是更好的。正好这家公司找到我,在阻止运行模块本身开源的情况下,非常友好地出资让我转让;加上他们说有「黑科技」,可以不用 ROOT 安装 Xposed 模块,个人感觉技术实力也比较雄厚,值得托付;此外我也和他们沟通了一下未来的发展方向,觉得差不多,就转让了。

π:那你又是出于什么原因选择重新开发黑域?家人如何看待你的开发工作?

去年,因为容量太小的原因我的主力机型从 Moto G 更换为 Google Pixel。但 Xposed 和阻止运行并不支持 Google Pixel 所预装的 Android 7.1,出于这样的原因我觉得很有必要为自己写一个。

早先我是直接使用阻止运行最后一版公开代码来进行重写的(因为转让以后,我也没有源码),但后来我又发现,Google Pixel 采用双系统启动,改动 bootloader 非常麻烦;绿色守护虽然支持 Android 7.1,但在非 ROOT 的机器上效果有限,所以我选择了重新开发一款主要支持非 ROOT 机器的「阻止运行」,这就是黑域。

这个过程也要非常感谢少数派。少数派把黑域评为 2016 年年度应用,实际上愧不敢当。阻止运行某种程度上可以算得上,但黑域真的不敢当,毕竟当时的黑域只是一个挂着名的阻止运行。在一番沟通以后,作为一个技术宅,我也想做好之前没有做好的补丁模式,并额外支持了 Android 4.4。同时,也一度有用户说阻止运行被黑域盗用了。虽然阻止运行没有明说,代码遵从 WTFPL 协议发布,但是这种事情不能由我来做。

在这种羞愧下,我加快了黑域的开发。首先是重写了后台实现,让黑域和阻止运行只有前端界面相似;随后我又索性重构了前端,让整个界面看起来更贴近「当代」的 Android 应用(当然,界面还是很平淡,甚至有点丑);最后,我又对后台实现进行了一次重构。在整个实现过程中,我对 Android 系统的框架层也有了更深的了解,更重要的是,黑域自始至终都不需要用户进行 ROOT 操作。

整个开发过程中,老婆对我支持很多。她做了绝大部分家务,同时也允许我适当利用业务时间进行开发。黑域的 logo 是老婆亲自选定的,里面的一些图标,我也都请她帮助选择。

比如那个不再黑域的图标,之前我一直是想找个「还原」之类的,但老婆说,直接来个圆圈就好。

π:你提到了对黑域的多次「重构」,那么黑域的工作原理与「阻止运行」相比主要优势在哪里?

与阻止运行相比,黑域主要优势是不再需要 ROOT,同时支持 7.0 及以上系统,并且高度利用休眠。但黑域也有不足,一是不能事先阻断,当然也避免了某些应用无法正常使用;二是无法自动运行,因为没有 ROOT 的机器并不能开机以后自动获取黑域所需要的权限,首次使用黑域的用户需要根据提示通过 ADB 指令来获取这些权限。

此外,当初有些用户(包括我自己)安装 Xposed 或者解锁只是为了阻止运行。所以,在折腾累了乏了之后,推出非 ROOT 版本的意义很大。

某种意义上,黑域不如阻止运行,但是不需要 ROOT,这应该是最大的优势;而相比之下,阻止运行基本已经停止维护。此外,从实现上讲,黑域是我现在的作品,代表了我目前的最高水准,同时也修复了好多此前在阻止运行上表现出来的 bug;而阻止运行起步较早,代码质量其实很差,我都不忍卒读。

π:目前有有很多黑域用户在使用过程中(包括我自己)都抱怨过重启/或是重新安装都需要重新在电脑上执行 ADB 命令这个问题,未来有考虑过解决这个问题吗?

呃,这个确实是黑域最大的问题,普通模式下应该是无解的。对于没有 ROOT 的用户而言,重启之后他们必须通过 ADB 重新对黑域进行授权,来保证黑域的正常工作。但是,只要不重启,即使你对黑域进行了版本更新,那你目前也不需要重新启动黑域服务,这点要比阻止运行好很多。

当然,对于 ROOT 用户来说这样的问题是可以解决的。黑域目前还处于 Beta 阶段,存在一些兼容性问题,等稳定之后,我会向第三方 ROM 提供补丁模式,自然也会提供 ROOT 方式,那时候就无需手动执行 ADB 命令了。但是对于普通非 ROOT 用户而言就真的没有办法了,我只能向他们保证升级黑域之后不用再次执行 ADB 指令。

此外,为了用户体验,我不可能提供多个体验不一样的模式;又或者利用系统漏洞,提供一些专供低版才有的特性,再或者提供一个我都不使用的模式。

π:目前仅就酷安那边来说,黑域可能是目前同类应用中最为热门的一个,但它同时还是一个免费应用。未来有没有收费或是推出高级版本的计划?

呃,向老婆报备的时候,说的是放到 Google Play 上付费下载,但最后我发现付费区没有中国,就改免费了(但现在回过头来一想,中国本身就无法直接访问 Google Play 啊)。另外,目前而言,Google Play 上的应用一旦免费,就不能改成收费。

我也想过收费,但是吧,一方面量很小,另一方面自己作为自由软件的实际受益者,回馈社区太少,上学时提供过一些翻译,后来提交过一些补丁之类。所以,就别这么费劲了,直接开放就好,如果你喜欢,随意捐赠就行。老婆看到那些几角几分的,还和我说,能不能设个下限啥的,我说,没事,都是用户的心意,捐多捐少全凭意愿。

当然,为了鼓励捐赠,我也下了些功夫。

比如支付宝捐赠,点一下就能直接跳到付款页面,曾经靠这个渠道收到过 7 笔共 8 分的捐赠,捐赠体验应该很不错;微信方面无法发送支付链接,只能扫码;而 Google Play 的话,还能显示捐赠了几笔共多少,为了防止被破解,自己实现了 RSA 算法。当然,这些东西的实际意义有限,捐不捐赠不影响主要功能。

但是,会有些需要付费才能使用的功能,如前文提到的 ROOT 模式,以及可能的多用户支持(目前暂无计划支持多用户)。主要原因是,我自身不受益,同时 ROOT 很容易把设备置于不安全的处境,所以对于这些强迫症用户会收费。此外,一旦涉及付费,就会有验证的问题,比如怎么验证支付宝与微信捐赠,实际是比较难的,阻止运行时代通过签发独特的许可,现在的话,还没有想好,也许会直接放开。

π:作为这样一款应用的开发者,你对国内的 Android 生态环境有什么看法和期许?

知乎上有个 Android 工程师说,因为了解 Android 系统,可以实现好多对用户体验不好的事情,然后自己使用 iPhone。我在那个答案下回复:正是因为有你这样的工程师,才导致大环境下 Android 应用不如 iOS 应用。

我就期望,Android 开发者包括产品经理,真正地使用和体验 Android。那样他们才能更多地为用户着想,少一些邪道,多一些用户体验。如果软件都能很好自律,又或者像 PC 平台上,软件一但退出,除非用户打开,就不会再自动启动,也就没有黑域什么事了。我也知道,好多 Android 开发者及产品经理,本身主机并不是 Android,个人觉得这样很难把软件做得更好。当然,我这么说是因为自己很笨,好多事情并不能一次就做好。

同时也期望一些工具类的应用不要尝试去阉割其它应用的组件:你可以去限定用户没有打开它时的行为,但是,一旦用户主动打开,就不要有任何限制。当然,基于 Xposed 模块的应用层破解在黑域上应该是无效的,主要是我早先在阅读 Xposed 源码时,发现 Xposed 一个漏洞,可以阻止 Xposed 模块,告诉 Xposed 作者以后,他表示不会修复。

π:最后推荐三个你最近在用的 Android 应用给少数派的读者吧。

每个人的兴趣爱好都不一样,我本身安装的软件也很少,说下我觉得还不错的应用:

中华日历:真的很实用,没有过多功能,专心解决一件事。

Google Spotlight Stories:真正引人入胜的故事,但支持设备都比较有限,资源也相对较少。

黑域:希望有一天国内的 Android 生态能让大家不再需要它。


阅读更多「幕后」故事 >