安卓不再是程序员的天堂

2020年12月12日

范德成

我是从2012年开始正式使用安卓智能手机的。在那之前,还没有真正使用过智能手机。在这之前,见过2006年的多普达Windows Mobile,2007年的摩托罗拉Linux手机,2007年的iPhone一代,2010年的iPod Touch 4(这个不是手机,但它用的操作系统和iPhone 4是一样的)。

2012年的时候,我买了我的第一个智能手机,是一个Sony Ericsson的MT15i。索爱的手机我之前也买过。我可以把我用过(可能是我或是我爸,亦或是我老婆买的,但都是给我用的)的手机按品牌分列举如下:

Nokia
Model | Year
2100  | 2004

Sony Ericsson/Sony
Model | Year
K300c | 2006
MT15i | 2012
Xperia Z1 L39t | 2014
Xperia XZ2     | 2020

Samsung
Model | Year
S5628 | 2010

Apple
Model       | Year
iPhone 5 SE | 2016
iPhone SE 2 | 2020

Coolpad
Model   | Year
400 CNY | 2018

可见,从2012年开始,几乎每次更新手机都是智能手机(除了那个酷派流量手机,虽然它是低端智能手机,但我从来不把它当作智能手机使用)。

那么我为什么需要智能手机呢?因为现在许多事情必须在智能手机上的相应App里办。所以不光是智能手机,智能手机软硬件对这些App的支持也是重要的。这就是为什么后期Windows Phone卖不动的原因——因为微软曾经对应用程序开发商不甚友好,特别是屡次打破向下兼容性,并在功能也不是特别理想(当然,早期的Android和iOS的功能也不是特别理想;Android和Windows Phone 8系统的稳定性都还可以,iOS则更好些)。这样一来,许多应用程序开发商就没有兴趣在微软的Windows Phone平台上开发程序了。特别是像微信等较重要的日常应用程序开发商的逐渐退出,导致Windows Phone的实用性越发下降,最后它也只得退出了市场。

但,同样是提供各种App运行的Android和iOS系统,它们却是有一些本质区别的:

1. 底层操作系统不同。Android是基于Linux开发的,而iOS是基于苹果自己的Darwin开发的。
2. 权限管理不同。Android开放了SD卡(或在没有SD卡的手机上把内部闪存存储区域虚拟为SD卡目录的目标区域),在SD卡上的内容,各个只要是申请了SD卡读写权限的应用程序都能读写。但iOS则控制得严格,各个程序只能读写照片等有限的公共数据,而不是指定位置下的任意目录、任意文件(包括配置、数据文件)的读写。导致的后果就是,Android下如果能写入SD卡的程序,理论上可以破坏SD卡上其他不相关程序的数据。iOS上的程序最多破坏相册里的照片,但无法破坏其他程序的配置数据等对程序运行很关键的内容。
3. 控制台支持不同。Android通过本地terminal和USB连接的adb(Android Debug Bridge)等方式支持控制台(命令行)访问本地资源。其中未被映射为SD卡目录的内部闪存存储区域是各个程序自己控制权限的,默认情况下是不能被其他程序访问的(读写都不行),但如果程序自己愿意,可以开放让其他程序读(比如让其他任意程序都能读、执行)或者读写。在*nix(包括Linux和Android)上的文件和目录的权限控制有“读、写、执行”三种,可以分别控制。实际情况是,可以在Android控制台模拟器(或称终端模拟器)上执行自己的app home目录内的可执行文件,也可以执行SL4A平台的Python程序公开出来的它的app目录里的python。

因为以上这三点不同,Android在4.2(Xperia Z1所带的版本)或更早版本(比如MT15i的Android 2.3.3)上是可以装上终端模拟器、SL4A、Busybox、vim、p7zip、Hacker’s Keyboard等等,被作为一个命令行开发环境来用的。但是,当我买了2018版的Sony Xperia XZ2后,发现这不再可能了。它搭载的是Android 9.0。当我配置上述程序时,发现,busybox运行任意命令,都报错“Bad system call”。网上查了一下,Termux有它的解决方案,使用proot -0命令行。但是,Termux在国内墙内无法用。

https://github.com/MasterDevX/Termux-Java/issues/3

我的结论是,Android 9.0已经不适合作为国内程序员的开发环境使用了。虽然Termux还能用,但是它必须在墙外才能用。想象一下,如果我在国外,虽然能用Termux,但同时,下次换手机还是得在国外才能装Termux,想想就是一件麻烦事。我不想那么折腾。

还有一条路可能是去root,然后使用原生的chroot,但没有什么文档支持说这样做能行。我也不想折腾。

所以,我觉得,XZ2最大的作用就是当远程桌面终端,通过RDP或VNC协议连接电脑用吧。还有个大的用处是看立体照片。一个小一点的用处就是看视频或者听音频。还有作为电视机的投屏手机。

留下您的评论