毫无疑问,开发一款自己的App对于初学者来说,无论从技术学习,还是找工作,开发手机游戏而言,都是一大利器。那么如何才能快速上手,开发一款属于自己的app。本篇文章仅以自己的一些经验给更多的Android新手一些建议。
一、误区
在讨论如何开发应用程序之前,让我们先讨论一些必须避免的误解。
借鉴与copy
表面与原理
效果与深度
(1)借鉴是为了学习
借鉴与copy表面与原理效果与深度作为一名 Android 开发新手,在学习开发一款自己的 app 之前,参考一些大牛的项目,进行借鉴与参考是一个很好的捷径。
然而,一些初学者开始编写代码,看着代码面无表情,不知道为什么,认为不管3721,敲它都会理解。结果,最后一个错误*,项目的结构和框架根本没有被理解,更不用说技术上的困难了。
所以不要盲目地copy,磨刀不误砍柴工,要像看源码一样学习项目。首先澄清项目的结构,使用的框架,每个类的功能,以及所使用的技术要点,垦丁解决牛,逐个分解学习,逐一将它们变成技术问题,这样他们最终可以转化为自己的知识。
(2)从表面深入原理
对于具体的技术实现,不仅要实现目标,更不要因为一些酷的UI效果而沾沾自喜。
对于一些技术来说,知道正在发生的事情和原因是很重要的。例如,可以通过遵循一些模板来实现进程间通信aidl。例如,RecyclerView或ListView可以根据某些方法快速实现列表布局。
然而,这些实现不仅在一个项目或一个地方使用,而且经常被实现,而且将来还会遇到。因此,我们应该利用表面学习的原理来开发应用程序,同时鼓励我们自己以这种方式加深对技术的理解和实际应用。
例如,让AIDL了解binder机制的实现,并进一步了解android中的进程间通信方法。对于RecyclerView或ListView,了解重用机制以及如何自定义一些特殊效果以加深我们自己的技术深度。
(3)不盲目追求效果
Android开发的乐趣在于可以自己实现app的开发,用技术创造体验。
然而,正是这种乐趣可能会导致一些新手专注于UI实现效果并忽略他们自己的技术学习。有时,技术学习与效果并不冲突。然而,在自主开发应用程序和学习技术的过程中,我们可以把重点放在技术追求和学习上,而对用户界面效果的追求较少。
当然,完美主义者(强迫症)会在不知不觉中倾斜,但请平衡。
二、准备工作
在开发之前,我们应该做好充分的准备,这样我们就可以用一半的努力获得两倍的成果。
一般来说,新手正在开发第一款应用程序,站在巨人的肩膀上学习,然后如何选择你想做的应用程序,技术难度,以及更多的干货?
选择参照app
先选择自己想做的类型,比如:播放器,新闻类等,一些适合新手开发的app。然后在Github中搜索(一定要学会使用Github)。
了解当前流行的技术框架,选择一些你想要学习的框架,过滤掉使用它们的应用程序。
从满足上述需求的应用程序中找出更多的明星项目,因为大众的眼睛是明亮的,这意味着这个项目是可取的。
首先要了解项目的结构,不要盲目选择一些很酷的效果。要根据自己的技术能力来选择,初学者不应该选择太复杂的,而是一步一步地,为了得到两倍的成绩,付出一半的努力。
开发前奏
选择好了一款或多款参照app后,那么就要开始全面了解这款app。
项目结构:了解整个项目的结构,各种功能模块和使用的框架。一般项目结构将遵循以下结构。
框架使用:了解整个项目中使用的框架,然后了解其使用情况。首先阅读相关文章,了解基本用途,然后了解原理,最后根据自己的项目包装,这将有利于后续快速功能的实现。
三、开发app
关于具体的开发,只介绍一些一般性的东西供您参考。
项目构建 :一个优秀的Android应用从建项目开始,创建项目的一些规范。
com/Blankj/AndroidUtilCode,所有你想用的工具类,都可以从中抽取。
基类:构建项目中基类,如Activity,Fragment等,可以参考网上的一些实现,但是大而全不一定好,适合自己的才是最好的。
四、个人经验
(1)动机
四、个人经验作为一个 Android 新手,我也是在今年2月份才开始想学习做一款 app,增加自己各方面的能力。
在刚开始,想学习一些流行框架的使用,如Retrofit,RxJava,Glide,EventBus以及MVP模式。
当我构思整个项目时,我想要变得更加充实,我想实现太多功能。但是,我终于实现了新闻浏览和图片浏览的功能。虽然这个项目不完整,但我还是学到了很多东西。
(2)过程
因为功能的实现相对简单,整个项目周期约为20天左右。实际上,开发周期超过10天。在前10天左右,我一直在学习每个框架的用法和原则。
Readthefuckingsourcecode,这个过程虽然很枯燥,不过也是一个积累与沉淀的过程。
在我的博客中,我可以在准备这个项目时看到学习过程。博客写作真的是一种很好的学习方式,你可以把很多东西变成你自己的,不再是表面上的。