Android开发深恶痛绝之低端机

2017-09-15 · 🙈Ray · 0条 · 647次

前段时间做了一款APP,我负责了Android客户端的开发,每次做完Android项目都会忍不住吐槽一番这份工作的痛,然后感叹自己真他妈牛X。

1年半前做完一款名为“金股狂人”的外包APP后就想吐槽了,对不起,我的拖延症足足有1年半这么久......那个时候市面上Android操作系统大部分还停留在4.*时代,虽然Material Design已经推出,但是鲜有所见,那个时候我们还在用Actionbar,还不知道AppCompatActivity。

下面我就吐槽一下Android开发的病:

病1: 小米?华为?魅族?VIVO?OPPO......MIUI?FlyMe?Funtouch?......

现在的Android手机厂商太多太多了,每一家都有若干机型,每一家都有自己的一套操作系统(基于Android开发)。

众多机型必然带来众多分辨率,你刚做好适配,然后测试的时候,有用户反馈,我的红米上怎么显示不全啊。我靠,怪我怪我,没做好适配。光是小米就有下面这么多机型,就问你怕不怕:

有些厂商做了深度定制,你会发现为什么我的权限开启了但是却像没开一样,我他妈是不是活在梦里?靠,一个即时消息需要传这么久吗?每一家的系统都会有自己的一个特点,当初他们设计的时候肯定是考虑到什么因素,但是同时牺牲了很多的特性。大家都是混口饭吃,不要互相为难好不啦。比如一个悬浮窗权限,有的一申请权限就可以使用了,但有的却需要到设置中心自己开启,有的还要到系统自带安全软件中开启。对手机系统保护的太好,却大大降低了用户体验度。

还有,要不要这么多定制系统?说好的material design呢,怎么成了扁平设计?说好的google规范呢?

其实在Android5.0以前厂家定制系统我是可以理解的,那个时候Android原生并不好看,但是随着谷歌设计规范的推出,UI看起来更有质感了,我觉得挺不错的,完全没有必要定制如此之多的系统,做成主题不就好了。当然这些操作系统的UI对开发者并没有太大影响,除了有时应用图标需要注意圆角不能太大bulabula。但是有几家的设计真的很low好不,相当没有新意。

这个时候就该羡慕IOS开发了。像IOS手机就很好啊,只有苹果一家生产商,UI永远是同一的,每年就那么2-3个机型,现在4基本都没人用了,才5-8而已,真是好啊。人家做个开发就算买全了,也无非10个设备而已,你Android要想买全了,我靠,得买几千台机器吧。[但是苹果贵啊]

其实Google也有自己的手机品牌Nexus,只不过从来都是找其他厂家代工,好处是可以安装最新的Android原生系统,永远拥有最新的Android原生体验。但是死贵,不逊于苹果。

对于机型、厂家众多这个问题,我给出的建议:

买一个不是很高配的测试机,设置可以说买一个超级低配的测试机。只要适配了这种low到爆(从生产厂家,到设备硬件,到设备系统各种low,从外low到内的机子)的机型,才能确保减少适配问题。我记得我实习的时候那家公司买了一台测试机叫“红辣椒”,妈呀,红辣椒,多么“辣椒”的名字。

买一个系统紧跟潮流的机型,比如说Android最新的操作系统的8.0,那么你买一个7.0的,最次也要是6.0吧,这是为了测试一个比较新的接口或者组件,确保效果。


病2:ANR?OOM?what the f***?

听说Apple X(苹果:我这个X是牛X的X)最低配卖到了999美元,国内价格成功跨越10000元RMB。小米成功将智能手机的价格拉到了千元以下,苹果则成功将智能手机的价格带到了万元以上。

首先我们感谢小米确实为消费者带来了性价比超高的产品,但是另一方面,低价意味着低配,低配意味着bug,bug意味着...算了,我心痛。

在一些低端机,如红米,华为低端机等机子上,动不动来个OOM,ANR都是正常的。OOM其实很好解决,内存超限嘛,基本上能在日志中看到哪里报的错,问题很好排查。但是ANR这个问题很让人头痛,有一些ANR问题很难找到根本原因,可能看log或者trace很难找到自己的代码问题,费时费力不讨好。有时候觉得实在不行我们就千元以上吧,哈哈。

下面是一个OOM的例子:TopRadiusImageView第64行出的问题:图片资源转bitmap的时候内存超限。

下面是一个ANR,这个问题就很皮(微信也有哦,我很确定这不是我的问题),我提交小米商店的时候出现的,仅有的一个ANR,像这种我都感觉不是我的问题,看到就不想说话。

开发建议:

当处理图片等大资源,尤其是用到bitmap的时候,一定要注意,这里可能要OOM了。应用里的图片压缩,能使用jpg不要使用png,10K以下的图片最好。

耗时操作新开线程。


病3:小米市场提交不上?认领应用?360提示代码被混淆?阿西,什么鬼?

在提交各个应用市场的时候是各种搞笑啊。

先说小米,这个是我见过最严格的应用市场,首先它有个机器测试,你的APP要适配所有的小米手机,不然上传不了。要经过monkey测试,深度遍历测试。这个时候就要求你最好有一个小米低配手机了,像我这种没钱,公司又没给配测试机的开发者,就很无力,我两个机子跑N遍monkey测试都不会出现问题,上传的时候就很无奈。小米有一个云测,但是云测跟真实测试是有区别的。首先云测每一遍都可能不一样,因为是随机测试。其次,云测的问题不一定就是你的问题,有可能是小米自己的问题,这个时候你就要分辨是不是你的问题了,别揪着不放,到最后都崩溃了才发现原来不是自己的锅。小米也说了,测试报告中error中找自己包名的错。我觉得机器测试很难哦,我上传了不下10遍才通过审核。

机器测试完后,还有人工测试,这个时候就会要求你应用中没有恶意广告或者不好的东西,填写的资料要准确。比如下面的截图,就是说应用分类写错了。


再说说OPPO商店,有个认领应用,证明这个应用是你家公司的。给一个空包签名,然后上传。这个只是多了一个步骤。

360应用市场就很皮了。我喜欢百度加固,360提示你代码被混淆了,不能使啊。(360内心OS:劳资有自己的混淆工具,你必须用劳资提供的360混淆,百度等其他滴通通滴不行。) 解决方法很简单:用360混淆就OK了。但我发现360混淆后的应用比百度混淆的启动、运行要慢。


病4:没钱别做Android开发好不好......我靠,饿死我啊

你如果在小米云测报告中发现了其他应用的包,那么恭喜你,你是使用windows的开发者。小米温馨提醒:请使用unix系统打包。(小米内心OS:去装个linux系统或者买台MAC电脑,ARE YOU OK?)What the f***,像劳资这种月薪一二十万的人来说,怎么可能会使用MAC这种垃圾电脑(哇靠,再工作1年就可以买个mac键盘了,好开心)。没钱可以装个linux啊,谁让你买mac了,但是我要办公啊,linux没有QQ,没有office,真的有点痛。所以说你要么一台windows+一台linux(我总觉得双系统是对我宝贝电脑的一种伤害),要么一台mac。

所以富有的我选择了用同事的mac帮忙打包。

之前看过一篇文章,给Android开发者的20条建议,其中一条是:“花几百元买一台好点的电脑,mac电脑可以极大提高开发效率。”作者是美国人。当时感叹你几百搞定了,我们可要1-2万呢。而且我一直觉得windows没什么不好,没有大家说的那么不堪。这次我体会到我的生活中确实需要一台linux或者一台mac。当然windows还是很必须的。所以,正在攒钱中......


病5:听说小米不装手机卡不能测试哎......[脸都绿了]

小米手机现在好像第一次启动没装卡的话是不能装外部应用的,也就是没法测试。你得先给它装卡,装一次你的app,以后才能不装卡调试,很鸡肋。

这个是这没办法,只能装一次卡解决了。


综合建议:

  1. 使用unix开发。
  2. 买一部低配手机 + 一部紧跟Android潮流的手机。
  3. 开发中所有资源能小就小,图片要压缩,谨慎处理bitmap,使用图片缓存加载类库Glide等。
  4. 耗时操作新开线程。
  5. 使用先进的开发框架。

之所以标题是“Android开发深恶痛绝之小米们”是因为这篇文章很多问题是在小米应用市场发布的时候遇到的,并不是贬低小米。小米做的很好,但是却是最容易出现OOM的机型,也是APP问题最多的机型,而且还是大众机型。我两部Android智能机(共用过三部),没有一部小米,所以每次遇到小米机型出问题,我就感觉心慌慌。我发觉因为低端机的存在,让我们的开发更加艰难,但是却让APP更加高效和节省资源。

我发现每次开发最没有问题的总是自己的手机,每当给到别人测试就发现各种问题。这肯定是因为开发中使用的真机是自己的,遇到问题都调试好了,但是给我的感觉是为什么每次我买的手机都不适合做开发机,因为我买的手机每次开发完后测试都遇不到问题,要是所有问题都出在我的机子上多好,然而恰恰想反,问题都出在别人的机子上。

让APP尽可能地高效是我们每一个开发者的责任。

我觉得一款好的APP应该具有的特点:高效、漂亮、有趣。


  0