Android攻城狮—全套必备神级工具(开发,插件,效率)

持续更新中
Github地址:https://github.com/xinghongfei
简书个人主页:http://www.jianshu.com/users/8ded1d219a79/latest_articles

开发


Android Studio

推荐理由:官方推出,高效,功能强大。

android studio

Genymotion

推荐理由:世界上最快的模拟器。需要注意的是在真机上出现的bug,在虚拟机上不一定出现,所以还是最终需要在真机上测试。

Genymotion

如何配置Genymotion地址:Android Studio中配置Genymotion

Sublime text

推荐理由:最美的代码阅读和编辑软件,功能强大。如果你想用它来编辑代码,安装AndroidImport插件,可以自动补全代码。我本人主要是用它来阅读源码。

Sublime text

设置Android studio 主题(下载jar)

推荐理由:统一风格,效率更高。为Android studio设置和Sublime text同样的风格,提高效率。

设置后效果

设置方法请看我另外一篇文章Android高级攻城狮-阅读源码的经验总结

Github Desktop

推荐理由:使用Github无需理由,只是很多人使用命令行来操作,感觉自己很高大上。但如果你还不了解命令行的使用,个人不赞同的你再去学,直接使用客户端程序Github Desktop就可以。既然它只是一个工具,能熟练使用就可以,没有必要花那么多精力去学,去记命令行。当多人协助,Github Desktop无法满足你的需求时,再考虑使用命令行。

Github Desktop.png

插件


Android studio 插件

Android ButterKnife Zelezny

推荐理由:注入框架,高效开发,省去很多重复,且没有技术含量的工作。

zelezny_animated.gif

Android Material Design Icon Generator

推荐理由:可以生成Material Design图标的插件。

capture.gif

GsonFormat

推荐理由:将Json自动转化成类,高效开发。

GsonFormat.gif

ECtranslation

推荐理由:可以在Android Studio IDE 内直接将英文翻译成中文。

ECTranslation.png

Android Parcelable code generator

推荐理由:高效开发神器,在类中插入实现了Parcelable接口的代码。

Android Parcelable code generator

Codota

推荐理由:最好的Android代码搜索工具,Codota 目前已经收录超过七百万精品代码实例。

Codota

JSONView

推荐理由:api接口一般都是默认返回json格式,想要查看具体返回哪些内容的时候通过Chrome查看全乱的,而且中文编码也不对,这个插件自动跟你排列出Json数据,不管返回数据有多复杂,你都可以很直观的了解他的数据格式,简直开发者必备。

JSONView

Chrome 插件

Octotree

推荐理由:直接在Chrome侧边栏向打开文件夹一样的查看别人的项目。

Octotree

Postman

推荐理由:开发者在调试网络必备,可以直接发送一个请求,自定义params、header,查看response状态等。

Postman.png

ChromeADB

推荐理由:可以控制你的手机,当然前提必须是你的adb已经连接上了,不管是通过USB也好还是通过Wifi也好,可以查看你的内存、硬盘使用情况,还自带一个Controller,可以远程控制你的手机。

ChromeADB.png

Vysor

推荐理由:这个插件的使用场景是这样的,假如你在做一个Android App的演讲,但是手机屏幕太小,这个时候安装了这个插件就可以让手机画面投影到电脑上来(在iOS系统实现这个很方便),而且延时几乎很小,这个插件一般用不到就把他禁用,一旦用到的时候会非常有用。

Vysor.png

HandShaker

推荐理由:安卓手机管理工具,安装了它,就可以在Mac上连接安卓手机读取上面的照片、文件了。手机需要打开 “USB 调试”。

handShaker.png

WiFi ADB

推荐理由:WiFi ADB 是一个通过无线网络来使电脑和手机连接,当我们做测试的时候,只需在手机上打开,只需在命令行输入 adb connect xxx.xxx.xxx.xxx:5555,电脑可以连接手机,就可以通过无线网络来调试开发的应用。

WIFI ADB

效率

CheatSheet

推荐理由:长按command键可以查看当前应用的快捷键,很方便。

cheatsheet.png

CHROME插件 Save to Pocket

推荐理由:看到好的文章点击就可以收藏,多设备同步。

Pocket.png

知识管理工具


说到知识管理,要想成为一个高级工程师,必须要建立自己的知识体系。知识体系的建立一个是知识的收集,另一个是知识的输出整理。以后我会写写我个人知识体系建立方法,如果你很期待别忘了给我点赞哦。

  • 知识收集:印象笔记
  • 知识输出:Macdown+有道云笔记+简书(for Mac)
    FarBox+简书(for Windows)

知识收集使用印象笔记本,将自己认为今后会用到的知识归类整理。到了中高级水平,就可以写一些技术文章,经验总结,去发博客。鼓励大家写博客,但是不要浪费太大的精力。既然写博客,首先学会Markdown语法,再选择一个博客平台。我个人推荐使用简书作为博客发表平台,界面美观,编辑简单,文章更新修改快捷,无需编辑审核,唯一的不足就是没有草稿箱,不过你可以把不想发表的文章,使用Macdown和有道云编辑存储在本地,windows用户使用ForBox。选择简书的另一个原因是,对于新作者更加公平,没有博客级别,只要你的文章写的好就可以获得很多关注。当然这里也有很多学问,如何写出好文章?如何提高点击量?我以后再给大家总结一下我的经验。使用Macdown编辑,特别爽,极简,美观。使用有道云笔记是为了支持多设备同步,云端储存,因为印象笔记不支持Markdown。

印象笔记

推荐理由:免费,功能强大,现在只可以2台设备同步。强大的知识收集,记录工具。

印象笔记

Macdown

推荐理由:编辑Markdown最好的工具,极简,美观,高效。

Macdown

FarBox

推荐理由:Windows上最优雅的Markdown编辑工具。

ForBox

有道云笔记

推荐理由:支持markdown,云端存储,多级目录,多设备同步。如果你想在电脑,手机,平板上同步,就使用它。

有道云笔记

XMind

推荐理由:思维导图工具,在易用性和灵活性方面引人瞩目。将脑中的源源不断涌现的想法完美的展现出来,其思维导图与其他导图图表等更是简单易用,吸引着人们的眼球。

xmind.png

简书

推荐理由:友好,美观,编辑修改简便。没有令人讨厌的广告,都不知道简书是怎么盈利的。现在国内某知名博客平台,越做越烂,广告、限制太多,用户体验极差。很多大牛都陆续离开,在Github或简书上开博客。我认为对于我们大多数普通人来说在简书是一个很好的选择。

简书

翻墙

Lantern

推荐理由:打开应用就可以Google了,完全免费。唯一的不足就是不稳定,偶尔连不上。

Lantern.png

更多

假设你是个勤奋的同学,你总有一天会强烈需要它们,上帝保佑他们吧。
ShadowsocksX – 一个快速的隧道代理,可以帮助你绕过防火墙。
云梯 – 在圈内小有名气的VPN服务提供商。
二师兄VPN – 提供无限流量、无限续期免费VPN账号。
GreenVPN – 注册激活送免费VPN加速流量。
风驰VPN – 无限流量、无限续期的免费VPN加速服务。
ShadowsocksX-NG – 一款ShadowsocksX客户端软件。
鱼摆摆 – 科学上网。
Tunnelblick – OpenVPN的免费软件。
GoAgentX – 科学上网。
Surge – 科学上网。
开眼 – Chrome插件免费的科学上网利器。
GTX加速器 – 每天签到领取500M流量

优质视频资源


慕客网

推荐理由:绝对良心企业,基础视频全部免费,视频质量非常高。如果你是个初学者,看这里的视频可以让你少走很多弯路。刚开始千万不要看书,进度太慢,还云里雾里的。刚开始学的时候我只知道极客网,免费的视频比较老,看的很不爽。每个月还收30元的会员费,为了学习嘛,我就买了一个月的会员,后来去了慕客网,就再也没买了。后来我发现一个不用花钱就能看视频的小秘密。在Ipad上下载极客学院的app,里面的所有视频都可以免费看啦。可以挑一些自己感兴趣的看看。

屏幕快照 2016-09-10 下午4.29.51.png

菜鸟窝

推荐理由:如果你基础的都会了,但是项目做不了,也没有方向,那我推荐你去这里买一套课程,NND就是有点贵。跟着老师把一个项目从头到尾走下来,这套流程打通了,一切就OK了,剩下的就是坚持了,知识的深化和拓展。都是大牛录的视频,最值推荐的是菜鸟商场这个项目,里面都是常用的技术,对将来面试也有很大的帮助。

屏幕快照 2016-09-10 下午4.58.42.png

其他


Licecap

推荐理由:最简单的屏幕录制工具,生成gif。这就是用它录制的。

looklook元素共享.gif

Dash

推荐理由:大到你无法想象的API离线文档软件

dash-s1-thumb@2x.png

矢量图库

推荐理由:开发过程中,需要用到的矢量图,这里应有尽有。

矢量图库

网友推荐


为知笔记 (文钦233推荐)

分析:多平台支撑,功能强大。个人认为和有道云类似,可以根据个人习惯使用。

为知笔记

Typora (meunicorn、MarcoWong共同推荐)

分析:非常棒的Markdown编辑工具。配合Pandoc使用,可以转化成PDF,word,HTML等多种格式,特别棒。

Typora.gif

iPic(for Mac) (谢三弟推荐)

分析:优秀的图床工具。使用这个软件上传图片会获得一个Markdown格式的地址,放在任何Markdown中都会自动加载。一次上传,处处使用。

iPic

Charles(for Mac) (风行网mydistiny推荐)

分析:Mac上最优秀的网络调试抓包工具,收费,需要下载找破解版。破解版下载地址http://xclient.info/s/charles.html

charles-macosx.png

Fiddler(for Windows) (风行网mydistiny推荐)

分析:Windows上最优秀的网络调试工具,免费。

decrypt-and-decompress-web-sessions.png

Quiver (风行网mydistiny推荐)

分析:专为程序员量身定做的笔记本。代码高亮,支持Markdown,你需要的他都有。下载地址(提取密码 vdij)

屏幕快照 2016-09-08 上午7.49.54.png

推荐阅读

Android高级攻城狮-阅读源码的经验总结
Android高级工程师回忆录:我是如何用一年时间从菜鸟成为高级工程师

如果你有用的很酸爽的软件,请在下面留言,我会持续更新…..

(未来还想把常用软件加进来。我们“开源社区”一起努力,发现互联网中最美好的东西,大家推荐一下自己用的顺手的软件吧,每个类型推荐一款(格式如下“浏览器Chrome最好用”或者“Genymotion是最好的模拟器”)


结尾:每当我看到你的点赞、评论、或打赏都会感觉特别激动和高兴,真希望正如你看我的文章一样。让我们共同努力,Be kind one another。

 

文/maat红飞(简书作者)
原文链接:http://www.jianshu.com/p/0911efbf8009
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

Android架构系列-基于MVP创建适合自己的架构

0 Android架构系列文章

该系列文章会不断更新Android项目开发中一些好的架构和小技巧

系列一 Android架构系列-基于MVP创建适合自己的架构
系列二 Android架构系列-如何优美的写Intent
系列三 Android架构系列-开发规范
系列四 Android架构系列-封装自己的okhttp

1 为什么选择MVP

MVP架构是当前比较成熟的Android架构,还有其他架构比如最初始的MVC和MVVM。MVC相对于较为落后,MVVM使用DataBind,普及性不如MVP。所以最终决定自己设计的框架是基于MVP思想进行总结的框架。

选择MVP框架的原因之一也是google官方的示例中MVP sample已经是完成,证明google官方对于MVP的承认度。

官方项目地址:
https://github.com/googlesamples/android-architecture

一个较为详细的官方项目源码解析的文章:
http://www.infoq.com/cn/articles/android-official-mvp-architecture-sample-project-analysis

2 MVP简介

具体的MVP架构相关文章网上已经非常多了,具体的可以自行查找。MVP的存在主要是由于普通MVC架构会导致项目中activity过于臃肿,当项目越来越大后,代码可读性大大降低。

MVP的思想是将activity作为view层,只负责与xml的渲染和监听事件,具体处理数据逻辑放到一个新定义的Present层。减少了activity负责的事情。并且可以强迫开发者养成分模块功能开发的思想。开发前设计好功能模块,而不是像以前一样写流水账一样写代码。从头写到尾。

MVP

3 我的总结

自己根据MVP的思想和一些好的源码总结了一套适合字的框架。真正的架构是依赖义务存在的,所以建议大家能总结出适合自己项目的代码。

3.1 目录分配

在目录分配上决定采用根据功能模块进行划分,而不是所有activty在一个目录的方法。类似google的例子:

目录

原因几点:

  1. 功能模块划分更为清晰,对于以后代码阅读和新人接手更好
  2. 适用于模块化开发,比如以后又是一个新项目,老项目的登录模块、用户模块、论坛模块等待可以整个复制出来重用
  3. 虽然网上提过按照多个模块划分可能会有公用的页面。我认为复制一份也没什么,不会造成很大的冗余代码,并且对于页面来说万一以后某个模块页面有自定义修改不会对其他影响。(毕竟页面的灵活性要求很高,不适合架构抽出来通用的)
  4. 需要抽出来的独立于功能模块的应该是common_util 和 common_widget,分别是通用工具层和通用自定义控件层

具体例子分配如下:

Sample目录
  • GloabApp 全局Application
  • RootAct 启动页面
  • Base目录 基础activity fragment存放
  • util目录 通用工具
  • mywidget 通用自定义控件
  • SampleModule Sample功能模块。里面包含独立的MVP的接口

3.2 Model层

Model层中又可以分为Api层和Cache层。

3.2.1 Api层

主要是网络获取数据信息等接口。

使用了自己二次封装过的Retrofit+Okhttp+Gson组合。详细可以参见文章:http://www.jianshu.com/p/283d1a7a0aff

示例SampleApi:

public class SampleApi extends BaseApi {

    private static final String mBaseUrl = "http://192.168.3.1/";

    private ApiStore mApiStore;

    public SampleApi() {
        super(mBaseUrl);
        mApiStore = mRetrofit.create(ApiStore.class);
    }

    /**
     * 获取xxx数据
     * @param uid
     * @param callback
     */
    public void getSampleInfo(String uid, ApiCallback<GetSampleInfoRet> callback) {
        Call<GetSampleInfoRet> call = ((ApiStore)mApiStore).getSampleInfo(uid);
        call.enqueue(new RetrofitCallback<GetSampleInfoRet>(callback));
    }

    public interface ApiStore {
        @FormUrlEncoded
        @POST("test_retrofit.php")
        Call<GetSampleInfoRet> getSampleInfo(@Field("uid") String uid);
    }
}

3.2.2 Cache层

本地缓存部分数据。

使用了ASimpleCache缓存开源代码。详细可以参见文章:http://www.jianshu.com/p/25c107ed7348

示例SampleCache:

public class SampleCache  extends BaseCache {

    private final String KEY_NEWEST_SAMPLE_INFO = "sample_newest_info";

    public SampleCache(Context context) {
        super(context);
    }

    /**
     * 保存sample信息
     * @param serializable
     */
    public void saveNewestSample(Serializable serializable) {
        mCache.put(KEY_NEWEST_SAMPLE_INFO, serializable);
    }

    /**
     * 获取sample信息
     * @return
     */
    public SampleInfo getNewestSampleInfo() {
        return (SampleInfo) mCache.getAsObject(KEY_NEWEST_SAMPLE_INFO);
    }

    /**
     * 移除缓存
     */
    public void removeNewestSampleInfo() {
        mCache.remove(KEY_NEWEST_SAMPLE_INFO);
    }
}

3.3 Data层

实体化数据类。

3.4 Presenter层

Presenter层又可以分为Contract协议接口,和具体的Presenter处理

3.4.1 Contract层

负责约定view层和presenter层的接口,view和presenter实现相应接口,最终达到解耦的目的。

SampleContract示例:

public interface SampleContract {

    interface View {
        void showSample(SampleInfo sampleInfo);     //显示sample

        void errorGetSample(String msg);    //显示错误信息
    }

    interface Presenter {
        void getNewestSample(); //获取当前最新的xxx
    }
}

3.4.2 Presenter层

负责从model层获取数据、整理数据、行为处理等。处理后调用view显示数据。

SamplePresenter示例:

public class SamplePresenter extends BasePresenter implements SampleContract.Presenter {

    private SampleContract.View mView;
    private SampleApi mApi;
    private SampleCache mCache;

    public SamplePresenter(SampleContract.View view) {
        mView = view;

        mApi = new SampleApi();
        mCache = new SampleCache(GlobalApp.getInstance().getContext());
    }

    @Override
    public void getNewestSample() {
        //先从缓存获取
        SampleInfo sampleInfo = mCache.getNewestSampleInfo();

        if(sampleInfo == null) {
            //从网络获取
            mApi.getSampleInfo("uid", new BaseApi.ApiCallback<GetSampleInfoRet>() {
                @Override
                public void onSuccess(GetSampleInfoRet ret) {
                    //缓存
                    mCache.saveNewestSample(ret.data);

                    //页面显示
                    mView.showSample(ret.data);
                }

                @Override
                public void onError(int err_code, String err_msg) {
                    //服务端返回错误码
                    mView.errorGetSample(err_msg);
                }

                @Override
                public void onFailure() {
                    //网络请求或者解析错误
                    mView.errorGetSample("服务器请求错误");
                }
            });
        } else {
            mView.showSample(sampleInfo);
        }
    }
}

3.5 view层

即平时所说的activity、fragment等。继承自SampleContract的view接口,只负责UI相关显示刷新等。由于拉出了presenter层,view层的代码变得极为清晰

SampleActivity示例:

public class SampleActivity extends BaseActivity implements SampleContract.View {

    @BindView(R.id.txtName)
    TextView txtName;

    @BindView(R.id.imgAvatar)
    ImageView imgAvatar;

    private SampleContract.Presenter mPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sample);
        ButterKnife.bind(this);

        mPresenter = new SamplePresenter(this);
    }

    @Override
    public void showSample(SampleInfo sampleInfo) {
        txtName.setText(sampleInfo.sample_name);
        Glide.with(this)
                .load(sampleInfo.avatar)
                .into(imgAvatar);
    }

    @Override
    public void errorGetSample(String msg) {
        //错误信息
    }

}

4 总结

以上代码Github地址:
https://github.com/tsy12321/BaseAndroidProject

注:该项目会做成一个基础的项目框架,包含各种封装好的工具,底层库和MVP架构,还在不断更新中,欢迎关注提Issue!

 

文/Tsy远(简书作者)
原文链接:http://www.jianshu.com/p/2ca7767df08c
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

如何开发一个App(Android)

前言

本篇博客从开发的角度来介绍如何开发一个Android App,需要说明一点是,这里只是提供一个如何开发一个app的思路,并不会介绍很多技术上的细节,从整个大局去把握如何去构思一个app的开发,让你对独立开发一款app的时候有个理解,如果有说的不对的地方,欢迎大家拍砖留言讨论。

开发环境

Android应用层使用的开发语言是Java,自然需要用到Java运行环境,无论你在Window是系统还是Mac系统都需要安装JDK,并且配置它的环境变量,不懂什么叫环境变量的或者不知道怎么配的,请利用好自己的百度技能自行学习。

JDK下载

开发工具

开发工具,Android因为历史原因,前面很长一段时间使用的是Eclipse,我们要开发Android应用的时候需要另外安装Google为它开发的插件ADT,Eclipse这个开源软件很优秀,也很专业,但仅仅只是使用它来开发Android就显得有点鸡肋了,如果没有对Eclipse进行优化的话,会很卡很卡,后面Google实在不愿意寄人篱下,就专门为我们开发者开发了目前很受广大开发者推崇的Android Studio,现在2.0预览版也出来啦,大伙赶紧去下吧。

Android studio

模拟器

Android自带的模拟器一直广受诟病,实在是太卡太慢了,对比人家IOS模拟器是那么的流畅,Android开发者直喊好苦逼啊,不过还好后面出了第三方比原生流畅n倍的模拟器Genymotion,大家可以去下一个个人版的够你平时开发测试用了。最好的办法还是使用真机测试,毕竟真机才是真实的环境。

Genymotion

Android核心基础

前面是准备工作,想开发一款Android app,你最起码要掌握Android的核心基础知识,针对初学Android的童鞋,想一口吃掉一个胖子是不可能的,还是得把基础打牢之后才能完成独立的开发,Android入门不难,学完基础你只是具备开发app的基本条件,想做一个优秀的app还有很长一段路要走,经验是靠不断实践堆出来的,找一套系统的课程去认真学习一下,在线教育的资源很多,比如慕课网,极客学院都有很多不错的学习资源,童鞋自己择优来学习即可。

推广:http://edu.csdn.net/course/detail/545(笔者的课程)

产品开发流程

正常的互联网开发app的流程大致如下:
– 产品规划,定产品方向
– 需求调研,产出需求文档
– 需求评审,修订需求文档
– 产品狗画app线框图提供给射鸡师
– 射鸡师根据线框图设计视觉稿
– 程序猿根据视觉稿搭建UI框架
– 程序猿根据需求文档开发功能
– 测试媛编写测试用例,根据排期进行测试
– 程序猿修复回归测试反馈的bug,提交beta版
– 测试通过,提交给运营喵发布到渠道上线

上面是笔者的经验总结,可能有不太准确的地方,但大致整个流程是这样,我们开发者要清楚自己在整个产品中充当的角色,明白自己的工作职责即可。

快速搭建项目

Android比没有想象那么难,只是刚开始要学习的东西多,一下子消化不了才会比较茫然,笔者写这篇博客就是想帮助大家整理一下开发思路。

快速搭建项目也算是一项技能,而这项技能只能由你自己来完善,刚开始做开发的时候一定会有很多重复性的工作,如果没有意识去提高自己的开发效率的话,可能你的十年工作经验代表的只是一年的经验用了十年而已。

那要怎么做,笔者提供一个自己总结的,仅供参考:
– 定开发规范
– 搭建UI框架
– 选用开发库集成(或自造轮子)
– 第三方服务集成(视情况而定)

定开发规范

一个项目一般不会只有一个人独立开发,就算是独立开发,我们也应该定一下开发规范,一般会有什么样的规范?
– 命名规范
– 代码规范
– 代码管理规范

命名规范

命名规范包括:
– 项目命名
– 包命名
– 类命名、成员变量命名
– 资源文件命名
我们做每一个产品都会有相应的命名,不要用中文来命名,最好用能表达中文意思的英文来表示,例如CSDN客户端,可以用CSDNClient作为命名,我们创建项目的时候可以以它作为Application name。
可以看看以前写的这篇文章:
http://blog.csdn.net/wwj_748/article/details/42347283

代码规范

代码规范视语言而定,开发android使用的是Java,自然要按照Java的编码规范进行编码,比如命名采用驼峰命名法,编码的时候也要符合Android的开发规范,比如UI线程不做任何耗时的操作,像网络请求、数据库操作都需要放到子线程中去做,只有UI的刷新才在UI线程中做,像这些规范,可以根据自身在项目遇到的问题来定,定规范的好处就是减少踩坑的几率,提高开发的质量。

代码管理

对于一个经常更新迭代的产品,不可能由头到尾不变,这个时候我们需要对代码进行分支管理,最好使用git代码仓库对代码进行管理,作为一个合格的开发者连git都不用实在说不过去,还用svn的童鞋赶紧放弃它投入git的怀抱,它的好处是不言而喻的,自己去体会。

搭建UI框架

搭建UI框架需要我们根据产品的导航模式来设计,市场上常用的导航模式有如下图几种:

app导航

我们的app如果不出意外一定是其中的一种导航模式,一般线框图出来我们就应该知道即将要开发的app长什么样子,开发者不必等视觉稿和素材出来才开始动工,我们先大致搭个架子,等视觉稿出来之后我们再做调整。

选用开发库

一般我们app涉及到的库会有:
– UI框架(比如下拉刷新PullToRefresh、侧滑菜单Slidingmenu)
– 网络请求库(比如okhtttp、AndroidAsyncHttp、Volley)
– 数据操作库(比如GreenDao、Ormlite)
– 图片缓存框架(比如Universal-Imageloader)
– 数据解析库(比如Gson)

之所以要选用这些库,肯定是为了避免重复造轮子,在开发效率的角度来说,选用优秀的开源库能大大缩短开发周期和提高开发效率,但从个人提升角度来看的话,我们可能就成了一个只会用API的程序猿了,如果想提升的话,造轮子或者分析这些优秀的源代码是一个不错的途径。

第三方服务集成

我们开发app的时候,肯定会遇到一些需求,比如推送的需求、自动升级、数据统计、社会化分享、用户反馈等等,然而对于一个刚起步的企业或者个人开发者的话,全都要自己去开发的话,那岂不是累死,像推送这种有一定的技术门槛,能做好都能成立一家公司了,所以选用一些第三方服务是一个可选之举。如果说你以后做大了,用第三方怕不好控制,那就自己做呗,有钱任性招兵买马就自己做,谁叫咱有钱呢。


前面这些东西开发一个app够了,开发出来能不能用还得有靠谱的测试,有没有crash,操作流不流畅,体验好不好才会有用户去用。这里不从产品的角度去评判一个app的好与坏,程序员要考虑的是从代码层面、性能层面去让我们的app变得更好。

云测

我们开发完毕之后,需要给测试工程师进行基本的功能需求测试,他们传统的做法就是根据事先写好的测试用例来做回归测试,再把测试出来的bug反馈给工程师,工程师再去修bug,但这样实在是太不靠谱了,有时候我们太在意功能而忽略了一些更重要的东西,那就是体验,给用户最直接的感受就是你这个app够不够惊艳,够不够流畅,用户可能根本就不在乎你这个功能做的有多牛逼。所以我们更应该从非功能性方向去做测试,我们的目的是让用户用的爽,而不是加一些乱七八糟的功能。那怎么测非功能性的一些因素,这里就要提到『云测』这个东西,因为现在设备太多了,如果公司要买一堆设备来做测试,那得多少成本,况且设备更新得太快,你根本就跟不上,所以就有了云测这个东西,它是一个云测试平台服务,提供了一大批主流机型,我们就直接省去购买设备的成本,还能得到完善的测试报告。

再来说一下它的好处:
– 终端云,省去测试设备购买租赁成本
– 高效率 节省测试人员成本及时间
– 包含兼容性测试、性能测试、功能测试
– 操作简单、详细测试报告生成

这么多好处,你在缺少测试工程师的时候,不去尝试那实在说不过去。

打包上线

前面的开发环节、测试环节都没问题之后,你离实现一个app的完整开发就不远了,正常的互联网公司,会把签名打包的apk给到运营,交给他们去写文案,上传到应用渠道,让渠道给我们去首发和推广。如果是个人开发者,这些工作就得我们自己做了。

总结

本篇博客从整个app开发流程上去给大家梳理了一遍,没有讲太多技术上的东西,但理解app流程对自己把握产品很有益处,虽然我们只是一个小小的开发者,但如果你有追求,哪天轮到你去负责一个产品的时候,你就应该对开发的每一个环节都了如指掌,因为出了问题,你也知道怎么针对性的去解决。笔者虽然只是一个小小的开发者,但也乐于思考,很多时候不太愿意被别人牵着鼻子走,因为我们的人生就应该把握在自己手里。