这两天,有一个关于 “ 小米提议禁止安卓手机提取 APK 文件,遭谷歌驳回 ” 的新闻很火。
这个新闻中说外网有个叫 Mishaal Rahman 的推主爆料,说小米开发者 “ 拟彻底阻止 Android 设备所有者从手机中复制 APK 文件 ” 。
这么做的理由是 APK 可能包含一些私有资源,为了保护用户安全,最好只从 Google Play 以及受信任的第三方应用市场获取 APK 。
很多不明真相的网友看到这个就直接炸毛了,我就是冲着安卓自由开放的生态来的,人民群众喜闻乐见,你小米居然想搞封闭生态?
但其实呢,我仔细看了看这位开发者的代码,发现它只是限制设备使用者在利用 ADB Shell ( 电脑上调试应用时使用的命令行开发工具 )提取 APK 文件。
对于中国大陆安卓用户来说,这样的操作一定不会陌生:你有一个很喜欢的游戏,但是却找不到地方购买或者不想花钱买。
于是你就会去某个众包网站找这个游戏的 APK ,下载到手机上进行安装。
那么网站上的这个 APK 是哪来的?就是那些购买过游戏的用户,利用 ADB Shell 之类的手段把这个游戏还原成了安装程序。
这位开发者的提议,说白了就是为了防破解防盗版。
这和之前的 “ 彻底阻止 Android 设备所有者从手机中复制 APK 文件 ” 的本质是完全不同的。
因为这两行代码并不会对于用户从第三方下载 APK 、或者手机互传 APK 并且进行安装这样的操作有影响。
结果这个出发点被曲解了,搞了个大新闻,引来了许多的骂声。
至于为啥谷歌不同意,其中一个原因是这两行代码并没有那么实用。
根据外国开发者的说法,这个做法只能拦住那些普通用户。
有一定技术能力的用户安装一个调试版本的安卓系统就能和以往一样用 ADB pull 提取 APK 。
只要有那么一两个人去安装了调试版本的系统,并且把 APK 提取出来进行分享,那这个保护措施就等于废了。
就好比你把世界上所有住户的钥匙都没收了,但只要还有开锁匠在,住户们最终还是能进自己家门。
巧的是,绝大部分的普通用户平时并不会用 ADB 抓包各种软件,去干这个事情的都是有点儿水平的用户,这个代码根本拦不住这些技术党。
如果再深入地去看一下双方在这个项目下的留言,我们可以发现其实这场风波的本质在于两者所在地应用市场生态的差异。
小米开发者提出,他始终觉得直接导出数据是不安全不合适的,并且以那些付费下载的应用程序举例。
比如有一个人付费购买 App 后,抓包出 APK ,放到各种平台上给别人下载安装,给开发者带来巨大损失。
然而外国开发者认为则是觉得,这个事情和用户怎么干没关系,那些付费应用应该检查用户是否付过钱。
比如可以通过查询 Google Play 账号的购买记录、查询设备、查询安装程序来判断这个 App 是不是付费过的。
这是因为海外有Google Play 这个较为统一的应用市场,甚至近乎垄断,这种操作在外国人眼里是常识,可是却并不适用于中国大陆的安卓生态环境。
放眼中国大陆,那么多的应用市场里,各位差友觉得哪家算得上 “ 最大 ” 的?这恐怕很难有一个具体的答案。
打个比方,我去年在小米应用商店花钱买了一个 App ,但今年我换了华为手机。
如果我把那个 App 抓包在华为手机上安装,华为手机应用市场也不会有我的购买记录。
可是作为一个安卓用户,隔一年换个系统用用是很常见的操作,我明明是付过钱的正版用户,到了华为那边却成了盗版用户,这谁受得了?
鉴于这种情况,中国大陆安卓应用市场基本上就没有付费下载这种生态,开发商也无法依靠应用商店判断当前用户是否付过费。
拥有完善健全的付费下载应用的生态,对于厂商、软件开发公司以及独立开发者来说都是好事,可惜这其中的根本问题,并不是两行代码就能解决得了的。
此外,小米开发者还提到了另外一个问题,就是关于 APK 内图片之类的资源泄露问题。
因为 APK 本质是一个压缩包,用户在电脑上把它的后缀改成、zip 之类的就可以轻松解压缩,然后就可以使用里面的一些图片。
这样一来就会涉及版权问题。
外国开发者的回答也很直接:图片资源应该靠版权法保护。
而从一开始,这位小米开发者就提出了自己的疑虑:在开发者模式的高权限下,用户手机中所有的数据都能被提取出来是一件很危险的事情。
而且人人都可以通过 APK 来看到这些数据,这些数据都属于用户个人隐私,第三方是不应该有这种权限的,因此他用那两行代码进行了一些限制。
至少从表面上看,这位开发者是为了用户隐私在着想。
但实际上,外国开发者认为 APK 里面的东西根本就不能算私有资源,他的代码也拦不住真正想要看这些资源的人。
反正掰扯半天,这个提议最终被谷歌给驳回了。
从表面上看是双方各执一词无法互相理解,本质上的原因其实很简单。
说白了,这位小米开发者发起这个修改,是因为他看到了一些安卓系统本身存在的问题,并且逐一列出了理由。
只是很可惜,这些问题在外国的开发者眼里并不算什么问题,更何况这代码也不够牛 X ,自然也不用谈去解决问题了。
其实吧,想要保护收费应用的方法根本就不在于提高 APK 的提取门槛,你的门槛再高,也有高手能跨过去。
与其搞这些东西,不如想想怎么给应用搞一个更加合理点的收费验证系统比较实在。