您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
一个 2 年 Android 开发者的 18 条忠告
 
 来源:jcodecraeer 发布于: 2016-11-29
  1713  次浏览      16
 

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

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

一年半之后,我有机会和一个真正有才而且经验丰富的安卓开发者一起工作,他指导我,教我正确的做事方式。这期间我学到了很多东西,学会了该做什么不该做什么。

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

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

1. 不要重复造轮子

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

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

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

Bonus:Android Arsenalmaintains a database of almost all Android libraries ever made. Go check it out.

2. 别盲目的选择library

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

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

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

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

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

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

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

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

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

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

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

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

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

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

代码是诗。

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

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

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

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

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

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

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

6. 使用一个恰当的架构

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

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

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

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

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

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

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

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

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

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

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

8. 分析是你最好的朋友

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

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

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

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

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

小贴士:使用FirebaseCrash 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. 安卓的碎片化是魔鬼

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

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

除此之外,谷歌在不同版本上还莫名其妙的添加或者删除API,进一步加重了你的工作量(这里是一个例子)。

比如,几乎每个开发者都需要使用SharedPreferences API来完成一个app,它是如此常见,但是在Android 2.2版本的Samsung Galaxy S 上还是出问题了(bug报告这里)。

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

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

14. 从今天开始使用git!

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

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

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

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

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

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

15.为黑客制造麻烦

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

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

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

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

如果你的app有高级版本,被别人破解免费发布就损失大了。

有几种方法可以避免你的app被人篡改。但并不是100&安全。任何一个技术扎实,决心坚决的黑客只要有正确的资源,工具和耐心都可以破解你的app。

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

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

16. 在低端手机上开发

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

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

17. 学习设计模式

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

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

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

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

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

小贴士:阅读一些书籍,比如GoF的 Design Patterns,Martin Fowler的重构以及Joshua Bloch的Effective Java。

18. 回馈

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

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

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

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

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

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

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

 

   
1713 次浏览       16
 
相关文章

手机软件测试用例设计实践
手机客户端UI测试分析
iPhone消息推送机制实现与探讨
Android手机开发(一)
 
相关文档

Android_UI官方设计教程
手机开发平台介绍
android拍照及上传功能
Android讲义智能手机开发
相关课程

Android高级移动应用程序
Android系统开发
Android应用开发
手机软件测试
最新课程计划
信息架构建模(基于UML+EA)3-21[北京]
软件架构设计师 3-21[北京]
图数据库与知识图谱 3-25[北京]
业务架构设计 4-11[北京]
SysML和EA系统设计与建模 4-22[北京]
DoDAF规范、模型与实例 5-23[北京]

android人机界面指南
Android手机开发(一)
Android手机开发(二)
Android手机开发(三)
Android手机开发(四)
iPhone消息推送机制实现探讨
手机软件测试用例设计实践
手机客户端UI测试分析
手机软件自动化测试研究报告
更多...   


Android高级移动应用程序
Android应用开发
Android系统开发
手机软件测试
嵌入式软件测试
Android软、硬、云整合


领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...