如何创作一款商业级的安卓独立应用

Android 专栏收录该内容
74 篇文章 9 订阅

由于分工越来越细,很多Android开发者并不知道如何做一款接近商业化的应用。这不只是初级开发者,很多中级开发者也未必能设计出像样的产品,原因很简单:让开发者去做一款独立产品就相当于让开发者一个人做了开发,美工,Ue/Ux设计师,项目经理,产品经理,后台开发工程师。这还只是分工上的区别,如果一个开发人员一直没有做过几个生命周期较长的产品(超过两年),他甚至都无法理解一个商业化的产品应该长成啥样;

于是这篇文章就诞生了,这篇文章可能不一定能够让你立马开发出一套商业化的应用,但是他绝对能让困扰在上述问题中的小伙伴做出的产品得到质的飞跃;

介绍

我自己从事安卓开发有9年的时间,从大学的时候参加竞赛开始做独立产品,一直想要做一款自己的应用。工作后纪念是一个积累的过程,一直没有好好打磨自己的产品。直到近几年,意识到作为一名开发人员,在这个职业生涯上总要留下一点什么东西,不管这个产品是丑还是美,是好还是坏,是不是会被很多人接受,是不是能够产生商业利益,总之,我的有这么一个产品,来证明我是一名称职的开发人员。这样,在某一天,我不做开发了,我可以和别人说,你看,这就是我当时做开发的时候做的产品。

几年前我也觉得程序员是一个很苦逼的工作,但是现在我不这么觉得了,程序员其实是一个很具有创造力的工作;

这篇文章从几个方面来介绍,涵盖编码,UI设计,产品设计,架构设计,进度管控;从各个角度介绍如何使用最优解来执行开发,得到尽可能好的产品;

标准化

由于我们开发一个人做了很多份工作,那么我们肯定不能像多人协作一样做很多低效的工作,需要尽可能的提高我们的研发效率,提高研发效率最本质的方法就是标准化(标准化是提高效率的本质,艺术除外);说到标准化,很多人就会想到个性化。这就像工艺品和手工业品,我们在看手工业品的时候会发现很难找到完全一样的两件手工艺品,比如玉雕界就有一句话:每一块手工玉都是独一无二的;标准化不是,使用5nm做出来的Cpu在放大镜下都发现不了两个的区别,因此他们能够实现量产,能够保证售后,能够降低成本,这就是标准化的魅力;

也就是说,标准化能够降低我们的研发成本,提高研发效率;要怎么实现标准化呢?简单来说就是用业内做成熟的框架,用业内最统一的风格,用业内最简单的设计来实现我们的产品;这里面必然涉及到使用一些标准化的工具,或者是一些标准化的规范,而对于这些工具和规范的使用,就是初级开发者和中高级开发者的区别;

选型

产品初级就会涉及到产品设计,产品设计就一定会涉及到选型,这里的选型不只是风格的设计,它还包括很多,我简单罗列一下:

  • 开发语言:选Java还是koltin还是其他的
  • 设计风格:选Android原生控件还是material-design还是用三方组件
  • 原型设计:选Mspaint还是axure还是墨刀
  • 文档设计:选Office全家桶还是Processon这种在线写作工具还是其他软件
  • 网络请求:选google原生还是okhttp或者其他组件
  • 异步同步:选Feature还是RxAndroid还是EventBus还是其他
  • 图片加载:选Glide还是Picasso还是UIL
  • 代码规范:用android studio还是用阿里巴巴规范

还有很多,你会发现你再开发的时候需要做很多选择题,但是很多人是一边开发一遍选择,于是出来的东西成了四不像(没有选型,什么产品都用,没有统一的风格);这是导致设计出来的产品一看就是开发人员做的本质原因;

因此,在开发前一定要做好选型,尽可能的不要往产品中假如选型以外的工具或者设计;接下来,我从开发的各个领域,给大家描绘一幅关于产品敏捷开发的全景图;

设计

对于开发来说,懂设计的并不多,实际上,美也是有标准的,就像艺术家画的名画,你从外行人看不出来什么,感觉不到什么高深的地方,但是艺术家在一起讨论的时候,就是用各种各样的标准来评判彼此的作品是好还是坏。一副其貌不扬的艺术产品,背后可能是上万道复杂工序,是各种各样的精巧设计才形成,而这些也只有入到里面西西了解你才能发现,这个就是所谓的外行看门道,内行看热闹;

统一性

有些开发人员在做设计的时候喜欢七拼八凑,从这里抄一点,那里抄一点;抄我不觉得不好,伟大都是从借鉴出来的,但是抄也有抄的水品,起码抄的时候要有统一的风格,不然抄过来的东西绝对是四不像的;

设计必须保持同一种风格,这是设计最基本的原则,违背了这个原则,做出来的产品看上去就像没有灵魂的躯体;至于风格的选用,不同的产品会选择不同的风格,这个主要和用户群体而定的;比如老年人你就不能用扁平化设计,反而他们觉得那些圆圆的立体的好看,而年轻人你给他们看这个,就会被说丑,因此产品的设计一定要符合你的用户群体;

既然要选择统一的设计风格了,那么就需要找到这种风格的设计标准,这个靠猜是不行的,这太主观,而且也费事费力效率低下,这不是我们个人开发者应该做的,我们要做的,就是找到这套标准,然后照着去做设计,做实现;

那么我们可以使用那些设计风格呢?我这里列举两个,大家去找的时候思路是一样的,一个风格能成为一种潮流,必然是有一个牵头的地方,比如你用Google的风格,那么你只需要所有的控件都用Google原生的就可以了,其他额外的设计能去除就除去,总之原则只有一个,尽可能只用这个公司的设计来实现;

这篇文章是教大家如何做最佳实践,因此这个过程中我通常只介绍一种实现方式,大家可以自行组合自己的实现方式,只要遵循统一性原则即可;

App设计

我自己很推荐Google的原生组件,不为啥,就因为他是官方的,我找起来方便,我也不想花那么多心思去找各种非官方的设计;

原生控件

很多人觉得Google原生的设计很丑,实际上你现在再去看,真的不丑了,Google最新的design包中有大量的美观的控件可供使用,如果能做到只使用他们提供的控件,通常不会丑得离谱。

但是有小伙伴说了,我即使用了Google原生的控件做出来的应用界面也非常丑,怎么办?那就需要看Google官方提供的设计指导文档了;

Design Guide

谷歌设计指南在这个网址里面,他不仅会告诉你如何设计手机应用,还包括穿戴设备应用设计,TV应用设计,车载应用设计;
在这里插入图片描述

质量准则

如果你发现你按照设计指南失陷后,产品看上去还是那么差强人意,那么你就需要看看质量指南了,Google的质量指南会告诉你如何一步步优化出用户友好的界面,如何做好用户交互(UE),这不仅仅是用户界面(UI),当用户在操作的时候,良好的UE也是影响用户体验的关键;因此,在国外UI和UE有些公司是分开的;

在这里插入图片描述

Web端设计

如果你开发的应用比较轻量,我并不建议Web端做过多的设计,主要原因是大部分开发人员并不懂Web开发,而每一个岗位只有在摸索到一定阶段才能做出好的产品,就像武侠小说中的习武,你得先打通任督二脉,你才能成为武学大家;

如果你开发的应用是给国外用的,而且你自己不想买服务器维护,而且你得应用服务端的逻辑足够简单,只需要做远程存储,那我强烈建议你使用Google的firebase;

FireBase

因为FireBase是跨平台的,可以用于JavaScript/Android/iOS,这样只需要部署一次,就可以全部主流移动平台上都能使用了。FireBase其实是一整套的解决方案,解决了 Push/数据存储/用户标识/用户活动分析/Crash数据收集 等一系列问题。如果不用FireBase,这些功能几乎每个都要使用一个SDK。尤其是FireBase对Android的支持最为完善,比如:官方之前的GCM已经废弃,现在只能用FCM(FireBase Cloud Message)进行推送,来确保在App被Kill之后,仍然能收到Push通知。这也是目前唯一且最可靠的官方Push方式。Android Q(Android 10.0)以后,获取用户标识会非常困难且不可靠,通过FireBase获取是最合适的方式。

对于开发者来说,FireBase是免费的,你不用自己搭建服务器,不用搞服务器维护,不用做服务端应用开发,不用搞服务端设计,这些统统都不用;所谓最好的设计,就是没有设计,大概就是说的这个吧。

Material.io

其实Google最新的设计也是遵循Material设计的,只不过material设计是一套业内的标准,那么这套标准的源头正是material设计的官网material.io,他这里不仅仅包括了安卓设计,还有IOS,还有桌面应用,Web应用,可以说这是一套设计界的Material的统一标准,你照着这个做了,那就是Material设计;

在这里插入图片描述
关于如何做好Material设计,这个网站给出了相近的建议,大家照这他这个介绍来做设计就行了。当然,在交互设计的时候你可以参考Google的设计建议。

Material.io最人性化的一点是,它提供了Demo,也就是说,我们直接从上面抄代码就行了,这样省去了我们自己来做布局设计和相关编码实现,非常的方便;
在这里插入图片描述

ICON

如果开发来设计图标,那大概一个产品做到小孩长大都做不完,引用农夫山泉一句话;

我们不设计图标,我们只做图标的搬运工。

从哪里搬运呢?省事的方法是找那些已经做了一套一套的成品。当然还有更省事的做法,就是从我这篇文章里面抄咯;

  • Material.io
    你看人家多人性化,基本上你需要的素材,资源,在这里你都能够找到。你还在使用阿里巴巴的矢量图片库icfont?还在破解各种应用提取素材文件?还在自己画图标?太麻烦了,直接官网的用不是更香吗?

你看吧,要圆角有圆角,要直角有直角,你要png有png,要drawable矢量文件有矢量文件;
在这里插入图片描述

  • Google
    谷歌热心的很,在github上开源了一系列的图标,包括android,ios等;

啥?你听说都没听说过?你说安卓开发人员吗?
在这里插入图片描述

原型设计

原型设计有很多软件,国内做的好的比如墨刀,比如国外的axure还有很多其他的工具。但是我自己的话更喜欢用windows自带的白板(mspaint)。不为啥,就因为它简单,我又不是专门搞产品的,我整那么复杂的原型图给谁看;

开发

开发自然是开发人员的强项,咱做了这么多年不一直做的开发吗?

开发同样是开发,但是有多少开发人员到现在还在盲目往自己项目中引用不熟悉的三方库呢?然后又花大把的时间帮助这些不成熟的第三方库找bug;

既然是做安卓开发,为啥不都用Google原生Api来实现呢?对于绝大部分独立开发者而言,Google提供的原生+扩展Api已经足够我们使用了。我不是说国内的那些三方库不好,只是我们真没那么多精力啥都去了解,最高效的方法自然是用已经做了很久了的,有大团队在优化的Api嘛。这就像你买手机,小厂也有做的好看的,但是好不好用,咱有没有深入了解就往自己项目上招呼,使不得啊。

关于开发,能讲的就多了。从技术栈的选型,到IDE再到辅助插件,有很多优秀的工具可以供我们使用,但既然是最佳实践,我们就不要把精力太过于分散,还是那句老话,能够用Google官方实现的就尽量用官方的。能够统一方式的就不要用多样的方法来实现;

IDE

Android Studio,这个不需要我多少了,大家基本也都使用的这个,没啥歧义。区别在于大家对于这款IDE的熟练程度。我这里不是说的打开Android Studio然后导入项目运行,着大家都会,我这里主要介绍里面一些使用的插件,之所以使用,那肯定是能帮我们解决实际问题;

编码规范

推荐使用阿里巴巴Java规范,规范是死的,人是活的。我们没有必要把IDE提示的黄块都解决掉,至少我们需要尽可能让一个类中的黄块尽可能的少;这个标准你在自己开发的时候感觉没啥用,等到你的代码有人和你一起维护的时候,他写的都是黄块的时候,你就很抓狂了;
在这里插入图片描述在这里插入图片描述

性能调优

  • Profile
    可以实现很多的优化,包括Cpu线程优化,内存调优,网络调优等。你可以跟踪到代码级别,并进行实时调试,老开发从Eclipse转过来之前在老的IDE上有类似的工具,但是显然新版的profile用起来更好用;
    在这里插入图片描述

具体的用法,这里不多少大家可以自行百度,在这篇文章讲一时半会讲不完;

布局优化

Android Studio有一个Layout Inspector。他其实也是Eclipse上叫做HyperView的插件升级过来的,也是使用体验比HyperView好很多;可以通过Tool->Layout Inspector调出来;

在这里插入图片描述

上面这两个都是在调试的时候使用的优化工具,我们还能借助一些辅助的工具来跟踪我们的应用性能。
比如Bug跟踪,可以用腾讯的Bugly,但是这不是这篇文章的重点,大部分国内做的辅助工具我都不是很推荐;

技术栈

由于开发人员对于开发需要用的工具如数家珍,如何编码是各位的拿手菜,我就不在这里班门弄斧了。惟一能拿出来讲讲的就是三方库的使用;

网络请求+图片加载

对于网络请求相关的,我推荐使用squareup全家桶,主要是因为squareup公司专门做http请求相关的东西。包括大家熟悉的okhttp,Picasso,RxJava,RxAndroid,Retrofit。square公司还为谷歌的其他组件提供了连接组件,典型的如retrofit:converter-gson;

图片加载框架的花我自己喜欢用Glide多一些,至于用Picasso还是Glide我觉得都没多大广西,只要你的项目中不是用了Glide,又用Picasso又用UIL等,那就本就没事,咱精力有限,千万别引入重复的三方组件。(原则上来讲三方组件谨慎引入,能不用的就不用,这样为以后维护埋坑也会少很多);

  • okhttp
    网络请求框架,比google的httpUrlConnection更强大更便捷;
  • Picasso
    图片加载框架,一行代码加载网络图片(自动封装了图片优化缓存管理等)
  • RxJava
    异步框架,Android版本的叫做RxAndroid,做线程切换很管用,但是你可以自己写一个线程切换管理器,不一定要用他这个;
  • Retrofit
    Restful服务器请求神器,增加一个访问接口一行代码的事情;

国际化

如果你的应用要出海,国际化是避免不了的,最必要的国际化自然是语言了,不进行国际化的后果是,别人用你的应用象释看天书一样。这里我推荐一款非常实用的插件,他来自伟大祖国的开发者编写,当然还有其他一些类似的插件,大家也可以尝试;

AndroidLocalizePlugin

使用很简单,在Android Studio的插件库中搜索并安装该插件,安装完成后提示重启,重启后我们就能直接右击string文件选择生成其他国家语言了;

在这里插入图片描述

  • 在线安装
    第一步:打开 AndroidStudio 或 IDEA。
    第二步:打开 Preferences -> Plugins -> Browse repositories。
    第三步:搜索 AndroidLocalize 并安装,然后重新启动 IDE。
  • 本地安装
    第一步:下载 AndroidLocalizePlugin.zip 文件。
    第二步:打开 AndroidStudio 或 IDEA。
    第三步:打开 Preferences -> Plugins -> Install plugin from disk。
    第四步:选择 AndroidLocalizePlugin.zip 文件安装,并重新启动 IDE。
  • 使用
    第一步:选择 values/strings.xml 文件。
    第二步:右键选择 Convert to other languages。
    第三步:勾选上需要翻译的语言。
    第四步:点击 OK。

其他

Google原生和Java原生。Google的AndroidX提供了很多组件,Jdk8以后Api也很完善了,每一次更新都是有必要的,提供的新的Api也都能解决很多实际问题,总之,能用原生Api就不要用三方,当然这是权衡了开发性和实用性的结果;

迭代和运营

做产品不能一蹴而就,特别是独立开发者,最好是现出一个最小原型(Mvp)。将核心功能坐在V1.0,然后将1.0推出市场,看看用户反馈和使用情况,及时调整产品的研发(当然也不能随便调整,调整前要问问调整是不是违背了产品设计的初衷,因为用户的需求是无穷无尽的,而我们的精力是有限的,如果尽可能的让我们的精力实现最大化效益,就需要对用户的反馈进行筛选和取舍)。

在MVP做出来之后,就是快速迭代的过程了,独立开发者比不上公司,没有那么多的精力去做运营推广。运营的本质是维护和推广,而维护这块基本没多大问题,主要问题在于推广这块;

如果说设计对于开发人员来说勉强能搞定,那么推广对于绝大部分开发人员来说就有点头大了。推广又和市场有关系,市场对于开发人员来说真就是非常陌生的领域了,毕竟开发和市场基本属于平行世界的人,平时都很难有交集。

因此在做一个产品之前一定要想好,这个产品做出来给谁用,自己能不能用,如果自己不能用,谁可以作为你的测试用户。这样做的目的自然是避免做出来产品没有人用,导致白忙活。

个人开发者由于资源有限,不能像公司那样砸钱运营,而是需要计算好如何做才能实现效率最大化。个人认为可以从两方面入手:

做小众产品

小众产品,需求小,人群却相对集中,对产品的需求也相对明确。在做产品研发的时候也不容易跑偏;但是,小众产品天花板低,无法大规模推广(实际上我觉得天花板高的行业基本被剧透垄断了,没啥搞头了,有也早被他们占领了,咱没必要趟这个浑水);

产品可以小众,但是一定要和自己或者周边的人有关联,脱离了应用场景做出来的产品,一定是没有市场的,那就功亏一篑了;

做早期市场

这个很好理解,在一个产品刚流行的时候,应用市场上就那么几家软件,你把你做的产品上上去,曝光率自然会上去。打个比方,现在的智能手表,国内不像国外一样发展的那么好,很大程度是因为国外有Google Service,国内用不了。因此小米推了小米手表,华为推了华为手表,Oppo推了Oppo手表,这确实是一大块市场,但由于国内各大手机厂商分化,都想从丁志忠获得一杯羹,导致各家的手表之间的兼容性并不太好;

但是大家也不需要沮丧,因为即使是这几大巨头垄断了这些应用市场,我们仍然可以把我们自己开发的应用上的这些应用市场上去。毕竟,现在愿意把自己开发的应用上到各大手机厂商App Store的并不多,我们能看到的也是了了几款应用,那么我们现在上上去,能够分到的流量就会越多,产品的曝光率也会越高。等到他们把生态做起来了,我们在想进去,就没那么划算了;

这个很好理解,App Store的流量就像是蛋糕,一个蛋糕10个人分每个人能分一份。如果1000个人分,那么塞牙缝都费劲了;

总结

如果你要做一款应用,我主要给这几条建议:

  1. 尽早行动;
  2. 尽量简单;
  3. 尽量明确;
  4. 尽量可控;

当然,这篇文章我也会根据自身经历,把自己学习到的干活更新到文章中,欢迎小伙伴们关注和收藏;

  • 0
    点赞
  • 2
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值