Skip to content

[公约]如何更好的普及Android开发规范及促进Google细化权限 #10

@pcqpcq

Description

@pcqpcq

绿色公约很棒,强烈支持。在阅读公约之后,这些天思考现在Android和iOS之间的差异(用户感知层面),我觉得Android App的『不绿色』可以粗糙的归结到两个问题:

1. 如何更好的普及开发规范

是什么

不少Android开发人员对于一些Api了解不够深入,且对Api变动更新跟进不及时,以至于一直保留旧的使用习惯。

为什么

比如,公约中提到的『避免使用『读取 / 写入外部存储』权限』,以高德地图为例,高德地图是要求一定要给外部存储写入权限否则不让用的,但是很明显高德即使按规范的做法来存储数据也没有任何问题,不会影响到他们的业务正常进行(假设高德真的只是想存储数据)。那么唯一不按规范来的原因只有一个,就是不知道应该那么做
类似的App不只高德地图,还可以举出其他的例子。要知道,『使用Context.getExternalFilesDir()、 Context.getExternalCacheDir() 这个Api来获取外部存储路径而不是直接写入 /sdcard/ 这样的路径』,这个规范很早很早就有了,但是现在仍然是选择直接写到 /sdcard/ 下。所以,我觉得问题应该是如何更好的给这部分开发人员(即使是在高德这样的『大』公司内)普及一些正确的做法

怎么做

我个人的建议是,通过开发一个AndroidStudio插件来规范代码,采用更强烈的规范约束。然后利用社区的力量来推广这个插件。其实就是整合Lint的功能,然而也许这部分人连Lint都不知道是什么。只是想法,有待验证技术上的可行性。

2. 如何促进Google细化权限

是什么

有些情况并不是开发不规范,而是因为权限只有那些,实在没得选择,只能那么做。

为什么

比如,再拿高德地图举例,高德地图在启动的时候,如果不给『读取手机状态和身份(READ_PHONE_STATE)』权限,那么是不让使用的。我仍然假设高德真的只是为了获取设备信息而不是手机号,那么站在高德的立场这个做法可以认为没有问题(虽然不让用很恶心)。但是开发人员也没得选择,因为『读取手机号』也是这个权限。
类似的还有『读取写入相册』和『读取写入外部存储』。用户如果同意了读取写入外部存储,那么App也可以顺便读取写入用户相册。
然而参考Flyme和MIUI这样的安卓系统,他们其实是把读取手机号这个事情单独分开的,在App授权页面清楚的写明了那个权限是读取IMEI。

怎么做

所以我觉得,这部分应该是Google的锅。那么,有什么办法可能更好的与Google沟通,更好的细化相应的权限?通过issue反馈可能只会得到Google的神回复。这方面我暂时想不到更好的途径。

================================

个人感想,如果有技术上描述不对的地方,欢迎指正。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions