一个2年安卓开发者的一些忠告

作者: MrTrying | 来源:发表于2016-10-19 14:41 被阅读5411次

    原文:What 2 Years of Android Development Have Taught Me the Hard Way
    译文:一个2年安卓开发者的一些忠告

    enter image description here

    我仍然记得2014年我决定做Android开发的那天,这是我一生中做出最好的决定。到现在已经有两年半了。

    最初的时候,并没有人告诉我如何做才是正确的。我犯了许多错,浪费了很多时间。

    一年半后,我有机会与以为很有才、经验丰富的Android开发者一起工作,他指导我,教我正确的做事方式。这期间我学到了很多东西,学会了该做什么不该做什么。

    我直接或者间接帮助其他开发者也有很长一段时间了。这里是我的StackOverFlowGitHub的简介。

    本文我讲分享这几年所收集的精华。也许可以帮助某人更快上手,避免重复我犯的错误。

    1.不要重复造轮子

    最初,我有一种不愿使用开源库的思想。不管需要什么,我总想自己去实现。这是一种非常可怕的思想。

    如果在开发app的时候遇到一个问题,而这个问题已经被别人很好的解决了,为什么不使用它呢?你可以节省大量的时间。

    把更多的精力花在app的业务逻辑上吧。如果你想在app中发起一个网络调用,是不需要自己去造一个Retrofit来的。

    Bonus:Android Arsenal maintains s database of almost all Android libraries ever made. Fo check it out.

    2.别盲目的选择library

    在Github上有许多免费使用的开源库,但是别因为太激动而盲目的使用

    检查library的star数目,越多越好。看看作者时候还创建了其他的一些受欢迎的库。查看issues(打开和关闭的都看),这可以让你对这个library的健壮性和稳定性有更好的了解。

    如果你时间充足,你应该深入这个库的代码,看看他到底是否真的值得使用。

    你只需要确保它的代码是可靠的、bug不多、高质量的。

    小贴士:使用Dryrun的命令行尝试任何lisbrary。

    enter image description here

    3.坐下来,喝杯咖啡,阅读更多的代码

    我们在阅读别人代码上花的时间比自己写代码的时间多得多,如果你不是的话,从今天开始做吧。

    不管你现在能写出什么样的代码,总是因为在耨年耨月你阅读和学习到了什么东西。它只是你已有只是的反映。

    Android的伟大之处就在于他是一个完全开源的平台。可以去深入研究这些代码看看他们是如何实现framework的。Github中有成千上万的开源库,只需要选择一个看看人家是如何实现的。

    福利:这里是一些最佳library的列表,这里是几乎所有开源Android app的列表。

    4.看在上帝的份上,维护一个恰当的编程规范吧

    如果把编码比作写作,那么编程规范就是你的书法水平。

    就跟你阅读别人的代码一样,别人也会阅读你的代码,我想你也不想把别人吓到是吧?如果你在一个公司,需要和同时协同工作,那么务必重视这个问题。

    编写简短,干净,可读性强的代码可以让你和别人读代码的时候很享受。代码应该读起来像是读故事一样。

    Code is Poetry.

    如果你写了一段代码结果你的同事几天都不跟你说话,怨不得别人。

    福利:你应该从通读这个这个开始。

    5.你需要ProGuard,是的,你真的需要

    绝对不要犯还没有使用ProGuard的情况下就在Play Store上发布app的错误。ProGuard不仅仅减小了你的代码,还混淆了代码,让逆向工程师更难理解和复制。

    它是Android SDK附带的,完全免费,因此没有理由不用。

    我曾见过几个开发者没有使用ProGuard就把app发布了。对于一个技术很普通的黑客来说破解你的app也就是几个小时的事情。

    小贴士:但是如果你需要顶尖的安全性,ProGuard就力不从心了,你需要DexGuard

    6.使用一个恰当的架构

    你永远都会庆幸自己从一开始就选择了一个恰当的架构。

    你可以使用MVP(Model-View-Presenter)架构,它可以把你的代码解耦成不同的层便于管理,从而提高代码的灵活性饼极大的减小维护时间成本。

    可以参考一个Demo项目。如果觉得很难掌握,可以看看这篇针对初学者的指南译文链接)。

    福利 :务必看看这里这里尤其是这里。她们将为你实现MVp提供极大的帮助。

    enter image description here

    7.用户界面就像笑话,如果还需要解释那就糟糕了

    如果你是在公司,做的事纯Android开发,你很可能不需要关心这个问题,因为有UI/UX设计师管这个问题。

    但是如果你是一个独立开发者,你就需要考虑它了。我曾经见过一些把app功能做得很好,当时用户体验很恐怖的开发者。

    要设计一个干净,简单直观的界面,你不要站在开发者的角度思考问题,而要挖掘自己内心中埋藏的设计师的潜力。

    尽量尝试设计一个漂亮的界面,让你的用户持续保持印象,这样用户回到你的app的次数就比别人多,从而产生更多的收货(也许是购买高级版本)。

    你应该乐于去减少元素,而不是增加。保持见解和小巧。

    福利:你可以从Dribble或者MaterialUp的热门设计师那里获得灵感。如果你对设计感兴趣,你很可能会喜欢这本书

    8.分析是你最好的朋友

    如果你想创建一个真正令人惊叹的app,你需要重度依赖分析工具分析app不同部分的性能和用例。

    对于分析,我借助于crash reporting和app usage tracking。

    不管你怎么做,永远无法做到完美。当真实的用户开始在各种各样的设备以及版本上使用你的app的时候,你会发现即使写得最好的代码也难以保证不出岔子。

    一旦发生奔溃,Crash reporting工具可以帮助你跟踪与修复它们。

    你必须学会向销售那样思考问题并分析app不同模块的使用。这样可以帮助你减小产品和用户时间需求之间的落差。

    小贴士:使用Firebase Crash Reporting以及Analytics tools。

    9.做一个营销专家

    如果你是一个个人开发者,你必须产出作为开发者的思维,去理解市场。

    我见过一些很好的产品因为缺乏正确的市场营销而失败,同时也见过并不怎么样的产品因为牛逼的市场营销而取得极大成功。

    如果你对你的工作是人真的希望它能获得可观的用户,你必须把在市场营销上话费必要的时间和金钱。但是在营销活动开始之前,确保app已经完全稳定,功能已经完善。

    花时间研究谁是你的竞争对手以及如何打败他们,确定一个可以立即打败的以及一个将来会打败的。

    小贴士:这里是一个价钱合理的市场分析工具,我比较喜欢用。

    10.是时候优化你的app了

    这是一个大多数人都不会去做的事情,但是你应该做。

    写代码与写高性能的代码之间有很大的区别。高性能的代码是指运行速度快,内存和储存消耗更少的代码。

    一个未经过优化的app也许在普通情况下运行良好,但是当方在各种压力情境中,它就原形毕露了。检查你app的内存使用情况看看有没有内存泄漏的存在。记住小漏不补沉大船。花时间弄懂Java的内存回收机制是怎么回事,创建分析你的活对象。

    小贴士:可以使用Leak Canary检测你的内存泄漏。他可以节省你不少时间。

    11.每周在Gradle编译上最少节省5小时

    你极有可能正在使用Android Studio开发app,编译系统使用的是Gradle。Gradle很棒但是也很慢,当项目显著增大的死后慢的跟蜗牛一样。

    有时候工作忙的时候我还需要在Gradle编译上浪费差不多一个小时。

    但是,总有加速的办法。

    你可以照着这篇以及这篇文章的做法显著提高变异速度。经过优化之后我的编译时间从4分钟降到了30秒。

    12.测试,测试,再测试!

    没有什么比测试更重要的了。它应该是你的首要任务。

    尽可能全面的测试你的app。花时间写自动化测试用例,创造各种极端的条件,看看你的app是否能经受住考验。

    我曾经犯过未经充分测试就发布app的错误。等用户报告bug然后修复。绝对不要那样。你可能通过砍掉测试时间而节省了一两天或者一周,但是以后你很可能会花双倍的时间。

    做任何事情都要不慌不忙,从容应对并长远打算。做一个有远见的人。此时播种,以后总会有收获。

    13.Android的碎片化是魔鬼

    碎片化可能是Android最大的问题了。而Google似乎并不愿意修复它,你必须适应。

    Android设备种类繁多,不同尺寸,不同硬件配置以及各厂商的自定义系统。

    除此之外,Google在不同版本上还莫名其妙的添加或者删除API,进一步 加重了你的工作量(这是一个例子)。比如,几乎每个开发者都需要使用SharePreferences API来完成一个app,它是如此常见,但是在Android 2.2版本的Samsung Galaxy S 上还是出问题了(bug报告)。

    花更多的时间为不同屏幕尺寸的设备创建不同的布局。在不同版本,不同定制,不同OEM厂商的设备上测试。

    永远别觉得某个东西看似可行就不去测试了。

    14.从今天开始使用git!

    如果你还有没有使用Git,从现在开始吧。

    当我开始Android开发的时候,悲剧的我并不知道git是什么东西。我每天都考被整个项目,一个备份在硬盘上,一个备份在云盘上。看起来很傻是吗?是的,的确很傻。

    Git可以极大的提高你的工作效率。如果叫我说出一个我每天都要使用并且离不开的工具名字,那就是Git了。

    在你使用几天之后,你很可能会爱上它,饼好奇Git的内部工作原理。建议你看看这个

    过一段时间之后,你可能开始一个大项目,对于如何维护一个分支模型感到困惑,那么可以看看这个

    福利:如果你刚刚开始,还付不起Github的私人仓库的月费,你可以试试BitBucket。国内用户的选择更多,oschina的git服务也不错 - 译者注。

    15.为黑客制造麻烦

    Android的开源 特性让其易受攻击。每个Android都可以轻易的被反编译,逆向分析。

    你不希望你的app发生这种事对吧?

    你需要知道如何安全的存储app中的API keys。如果你要处理用户的敏感数据,你必须知道如何加密,选择何种加密算法(安全且快速)。

    你还应该安全的把密钥储存在本地或者服务器上。应该防止app数据被人用ADB备份。如果你在数据库中存储敏感数据,要考虑做适当的伪装。

    如果你的app有高级版本,被别人破解免费发布就损失大了。有几种方法可以便面你的app被人篡改。但并不是100%安全。任何一个技术扎实,决心坚决的黑客只要有正确的资源,工具和耐心都可以破解你的app。

    你能做的就是尽量让黑客的破解变得困难,极其困难。

    福利:可以从阅读这个这个开始。

    16.在低端手机上开发

    每个人都喜欢使用一个高端Android手机,我也是。但是记得只作为个人使用,而不是开发的目的。

    高端机会隐藏app的许多缺陷。假设你在UI线程上做了导致卡顿的事情,但是因为手机过于强大可能导致你无法察觉。

    enter image description here

    17.学习设计模式

    这是一项终生受益的投资。

    在开发大型app的时候,你会遇到一些已经被比你牛逼的人所解决了的问题。

    从今天开始就花点时间去学习设计模式。Here是一个显示了所有一直设计模式的Github项目。

    可以从最常见的开始,比如单例,适配器模式,工厂方法模式,迭代器模式,依赖注入模式,事件驱动架构,建造者模式,回调,策略模式,外观模式以及生产消费者模式。

    看起来很多是吧?实际上并不多。一旦深入你就会爱上它们。

    小贴士:阅读一些数据,比如Gof的Design patterns , Martin Fowler的重构以及Joshua Bloch的Effective Java

    18.回馈

    你得承认,我们都曾从别人和互联网那得到许多帮助。

    enter image description here

    每当你遇到问题的时候,你会做的第一件事就是Google,返现第一条来自StackOverFlow的链接。有时候你很忙,结果直接拷贝粘帖得分最高的答案。

    你有没有想过Github上那些开源库其实也是别人花时间创建然后贡献给社区的。

    当你被一个难以理解的概念卡住或者遇到一个新的东西时,你发现一篇让你豁然开朗的博客,这个时候记住是没人牺牲了约炮时间而写了这篇文章。

    所以也该你回馈了。给予的越多,得到的也就越多。

    我们都忙于自己的工作,很难找到时间为别人做什么事情。但是尽量每周找点时间做点贡献让Android社区更丰富。

    我已经分享了自己短暂的Android生涯中所学到的一些东西。我将继续下去,学更多,分享风多。希望能为别人的生活带来微小的帮助。

    相关文章

      网友评论

      • Android戴勤学:没什么说的,点赞,收藏了
      • 038accd738f0:很棒的文章,很有用,加油
      • 小邪1214:营养不大,都是基础东西
      • sunshineliu:请问下,自动化测试这块,你是如何实现的呢?
        MrTrying: @sunshineliu 没事是用过自动化测试,不好意思
      • 键盘男:用Mac或者i7 8G内存以上的windows电脑😃
      • 尛坏蛋:可以,很秀
      • 大魔王蚩尤:文章很不错!看的出写的很认真,加油。
      • study_xiaozhang:从现在开始 !
      • 乘风破浪的程序员:我的是windows
      • e3b6bad1526d:666就是点进去看英文有些费力
      • 乘风破浪的程序员:楼主,为什么我用dryrun 显示Searching for devices...
        No devices attached, but I'll run anyway 怎么连接设备啊
        MrTrying:@hante window和mac用法不一样,你看看这个对你有没有帮助http://www.jianshu.com/p/9cc10563ab41
      • LinxsCoding:虽然不是做安卓的,但可以借鉴借鉴 小编赞一个
      • 尼诺和尼可:很有帮助,谢谢。
      • 大话程序:感谢您的分享
      • songdehuai:同两年,也是看到楼主说的从2014开始才意识到,哦,原来从2014到现在已经两年了。现在也很迷茫,一直在做一些机械式的工作。
      • 4c910dd6c6e7:一年的开发者, :grin: 大神 那你带带我把...
      • Dichael:点赞
      • 萌萌的白天:当你迷茫时,回到原点,想想最初的自己
        记得他很早之前也跟我聊过一次,说自己走到瓶颈了,现在特迷茫的那种,基本界面都能写也能独立开发APP,但是闲下来就不知道干什么了。什么新鲜东西都想学,但学到一半感觉原理都差不多又停下来了。细想一下,好像自己有一段时间也是这样的感觉。就是在刚刚读完cpp的时候,那个时候感觉C语言都会了,但是想写个东西出来却又写不出来。那种感觉真的很迷茫,想努力,却不知道怎么努力。后来一会学学DSL,一会学学ege,闲着无聊又去看看多线程和网络编程,现在回想一下,之所以能在java的道路上走的这么平稳,是因为自己经历过这些,感受过这些。在迷茫的时候,才是学习的时候,才是认知世界的时候,才是真正走出自己的认知面见到世界的时候。
        在此,我相信有这种感觉的不会只有我,肯定有更多的人会卡在这里。对于这些朋友,我只问你一个问题:你是因为什么走到现在的这条路?

        Android提高之道
        对于做Android的朋友,如果你也是现在能做一个app,但是停下来就不知道做什么的时候。
        那么我给你几个建议:不要去刻意学习自定义控件,不要刻意去学习Framework。
        再给你几个学习的目标:在网络图片显示的时候,如果是让你来处理,你会怎么做,会遇到哪些问题,要怎么避免;在用户登录的逻辑中,有哪些需要注意的,本地cookie应该如何保存才不会造成异常;在做网络请求操作中的细节有哪些,又有些什么需要注意的;Handle机制交互时,究竟做了哪些操作,这些和广播的原理又有什么区别。
      • 1d65221a9608:学习学习!收藏! :+1:
      • 苏易川:看起来我还需要继续努力
      • 072a387b6b3e:如果其他的好文章是干货的话,那这篇简直就是压缩饼干啊! :smiley:
        文章条理清楚,后面还有解决方案。最喜欢这类文章了。
      • netbanker:约炮的时间都被牺牲了
        小黑Swift:@翁岚敏的左边口袋 时间身体被掏空
      • Tsy远:6666
      • 沈敏杰:我也做开发两年半了,相比之下更多的是缺少对自身的总结,文章不错,翻译的辛苦了
      • 三季人:很棒很用心,谢谢
      • 飞云在天:有错别字
      • JellyCai:这是翻译的吗?
        MrTrying: @JellyCai 转载的翻译
      • 疾风Hua:很棒的分享
      • 白令海峡:mark一记,现在我在上厕所……沐浴更衣了在好好看一遍……
      • 一个冬季:学习了
      • 十方天仪君:跟着脚步
      • 晓峰残月:很详细

      本文标题:一个2年安卓开发者的一些忠告

      本文链接:https://www.haomeiwen.com/subject/bmjxuttx.html