只接受发布货源信息,不可发布违法信息,一旦发现永久封号,欢迎向我们举报!
1064879863
16货源网 > 餐饮行业新闻资讯 > 软件开发 >  一个人如何开发一款 App?


一个人如何开发一款 App?

发布时间:2019-07-06 20:02:57  来源:网友自行发布(如侵权请联系本站立刻删除)  浏览:   【】【】【
生孩子不是难事,重要的是把他教育好,并茁壮健康成长。
一个人如何开发一款 App?生孩子不是难事,重要的是把他教育好,并茁壮健康成长。直接贴作品吧。

http://emojiii.com
http://haiwaihuo.com

为什么可以一个人完成?
嗯,答案是我用了leancloud。

@江宏从创意到产品到交互到设计到前端到客户端到后端到服务器到运营到市场,我都喜欢自己搞,哈哈。

做过三个比较拿得出手的作品:

1. 颜文字输入法 一个app,卖出的时候有60W+用户。
2. 前端乱炖, 最专业的前端技术内容社区 一个前端垂直社区,每年大概覆盖100W+UV。
3. 二十一点睡前故事:在 App Store 上的内容 一个我老婆讲故事的app。

都是业余下班时间搞的。

所以说,一切皆有可能,别瞎BB直接干,需要学习的东西很多。

补充:
1. 年轻的时候我耗费了很多精力学习各种技能,动力就是做一个自己的产品出来并且让他活下去。经常通宵熬夜学习练习试错。现在很少有时间这样为自己拼命了
2. APP卖了白菜价,对钱没有太大感觉,只求安心,东西做到一定规模要操心的太多了,没那精力,毕竟只是业余项目。
3. 有时候,我会回忆以前为毛折腾这么多东西,有时候觉得就是为了存在感吧,告诉大家,我能做出不太一样的东西来,我跟身边人略有不同,然后最后并没有卵用。
4. 以前做过很多东西,工具,类库,插件,做过很多失败的尝试性项目,想想以前真是爱折腾。不过这些都是铺垫,没有这些事情也不可能做出一个拿得出手的东西来。
5. 有一段时间对设计特别在意,研究各种设计哲学。有一段时间对技术非常热衷,技术栈贯穿前后端客户端等等。有一段时间对产品非常热衷,每天晚上都在河边散步构思产品路径。感觉人生的路很长很长,不要急,一个一个来,只要肯花时间,可以学很多东西。

有不少同学问我如何学app开发,这事太难说了,编程其实说容易容易,说难也难,看你能不能静下心来学习了。建议去京东随便买几本书看,因为没有编程基础,所以推荐看一些比较初级的国产书,如果是正儿八经学习,还是看评分买吧,进口翻译的书,不过会稍微深奥一些,链接:ios开发 - 商品搜索知乎第一答。介绍一下个人背景,iOS 程序猿,从业经验不到两年。
个人觉得,题主这个问题,可能需要细分一下几个问题:
1.首先最需要搞清楚的就是你是出于爱好在做,还是希望靠这个 APP 作为一个媒介来吸引别人的关注,最终达到创业的目的。
2.预算时间和预算金钱。
3.需求是否已经有足够清晰。

先从第三点说吧,需求。你想要的 APP 针对的人群是哪些?是为了你针对人群解决什么问题?这些针对人群他们的常用 APP 有哪些,他们喜欢如何的设计风格?这些如果都想清楚了,那么你可以开始着手 UI 设计。UI 设计包括了整体框架设计 和切图,你需要非常娴熟的掌握 Photoshop~所以这里就迎来了第一个技术性问题,你是否会……是否娴熟,然后如果答案是否定的,你可能需要至少一个月来掌握基本的使用(可能不需要,这个应该是看个人了。)

预算时间和预算金钱,如果你真的贯彻了你只有一个人的思路,那么预算金钱可能就不用很多,你可能需要一台 Mac Pro ~ 或者更进一步降低预算 装一个双系统 windows + 黑苹果。然后负责自己的起居饮食就可以了。预算时间多长,因为里面包含了 iOS 前段(需要你会 objective-C 或者 swift 并且熟练掌握 xcode 的使用),安卓前端,PHP 的后端数据和接口等等~ 当然,前面很多人提到了leancloud ,可以为你省下很多的时间(这个提问真的不是硬植入广告吗!!!!!)

然后~是最重要的,在你一个人承担如此多的工作的时候,你要如何来合理规划你的时间和进度,在有挫折的时候,你要怎么调节自己的心情……等等一系列的心理问题。

所以 我已经扯不下去了……除非这个 APP 简单到极致,否则……一个人还是算了吧。10月9日更新内容:
国庆期间一直没有上网,没想到回来后居然看到这么多赞和评论。
总结一下给我的评论,就不一一回复了。

1. 我的职业是啥,是不是学这个专业的?
我大学学的确实是计算机,正规的科班出身。
虽然也是985+211,但是平心而论,整个大学我都玩了,各种网游从来没断过。
基本上我就是混个60分,而且你们懂的,大学怎么可能教你android,教你iOS,连PHP都不会教你的好不好。。。
所以其实是不是科班出身我觉得问题都不大,关键看你有没有兴趣,我职业生涯有4年的时间是在做嵌入式开发,不一样最后回到互联网了。

2. 推荐入门书籍
我觉得这个因人而异。
我的套路是:随便找本差不多的书(找书的原则是越薄越好,千万不要看什么xxx大全,xxx内核分析,对新手来说,这种书唯一的用途是消磨你的斗志),然后大致翻一遍(千万不要背,没有任何意义,用到的时候再翻书,知道有这回事儿就可以了),再然后就开始上手做demo。
前一阵因为公司有项目要用到cocos2d-x,我也是用的这个套路,大概一周时间写了个demo,剩下的边干边学。

3. 前后端技术是啥
前端是android+iOS这个就不用废话了,如果你不想以此谋生,但是又想写点app赚赚钱或者实现人生价值什么的,我建议你可以用Facebook最近发布的React Native for Android,学一样东西,两个平台都可以用。
或者你可以用html5啊,几大电商用的貌似都是这个吧(淘宝最近好像部分换成React Native for Android 了)
后端技术我建议用PHP,因为简单,搭环境也是分分钟的事儿。
美工还是用ps吧,网上资料会多一点。

4. 求基础准备,入门什么的
平常心一枚。
想做app发财的,现在已经不是5年前了,加个广告骗个点击可以挣出点饭钱来问题不大,想一夜暴富我觉得做app不是个太好的选择。
想以移动端开发为职业的,目前这个行业还是向你敞开了大门的,因为创业和风投的缘故,今年各个公司还是各种缺人,但是还是那句话,你会不会技术,只是一个敲门砖,能决定你走多远的,还是你的情商

5. 求加联系方式的
乃们看我都匿名了,会让乃们加嘛!
我目前不换公司,不创业,因为公司里带一堆人,也不想下班了还做别人的人生or职业导师,所以不约,叔叔真的不约。

6. 为啥说学美术没有卵用
因为重要的是你有没有审美观,而不是你会不会画个鸡蛋或者石膏头像啊~~~

7. 我的app叫什么
我都可耻的匿了,也不打算给我的app打广告,因为我也有2,3年的时间没有更新app啊。。。
我人不在江湖,但江湖上留有我的传说,哇哈哈哈哈哈哈

---------------------------------------------------------------------------------------------------------------
原帖内容:
都闪开,让我来!

可以开发,我就是。
基本上,你要是开发一款app,需要如下几个基本技能:
1. 有想法(废话)
2. 会画设计
3. 会前端技术
4. 会后台技术
5. 有时间运营

说一下我的情况。
我初中高中为了高考能加分,去学了美术(然而并没有什么卵用)。但是我在找工作的时候,把这个技能写简历里了。然后我第一份java web的工作,就在美工紧缺的情况下,被拉去画photoshop了。
这段时间我一直在做jsp。
工作4年后,我去做了android。
然后公司并不怎么忙。
然后我突然发现我可以一个人开发app了!

那是几年前的事儿了,我现在偶尔得空还会自己写点东西,不为了赚钱,纯粹是兴趣。

放个umeng的截图,乃们感受一下。

我看下面有答案说个人开发者成功率很低,现在iOS开发哀鸿一片,这个应该才是主流声音。还有应用的成功需要推广能力和运气。


怎么说呢,首先我这款应用并不能算成功,靠应用开发买房买车迎娶白富美的码农不在少数,我这款应用的收益一定比各位想到的要少。任何事情,能做成功的人都是小部分,但那部分人是真正努力的人。但是他们成功都有一个共性,就是做了一款好产品。大部分开发者失败的地方不是在于会不会开发,会不会设计,而是在于不知道如何做一款好产品,甚至很多人不知道什么样的产品才叫好产品。所以应用火了之后就是运气,不火了就是因为自己竞争不过大公司,没有推广能力。但始终不去思考自己的产品哪里有问题,哪里可以做更好,而这才是成功的关键。App Store到现在为止,总体来说还是很公平的,审核团队也很认真负责,一旦你的应用不错,获得推荐的几率还是很大的,所以大家不要泄气。


说到如何做一款好产品,除了自己的技术和综合能力需要不断提高之外,多看看人家的出色应用,使用的时候去推敲一下产品背后的思路,截图下来做一下笔记。自己做应用的时候别着急写代码,先把想法写下来,多整理推敲一下。也别操之过急,给自己足够的时间不断打磨一款产品。


====================================================

过千赞了,谢谢大家。说到做到,5COINS限免一周(2015年10月5日起)。


========原答案=======

三年了,说一下自己的经历吧。累,真心很累。。。但是一切都很值得。


我做的第一款应用是一款叫5coins的记账应用,初衷是学会iOS开发。却没想到能经历这么多,当然自己也学到了很多, 分享给大家吧。


我做iOS开发之前,一直做的是Web开发,不断游走于PHP, Python,HTML,JS, Flex之间。09年底购入一台Macbook Pro之后,一直想搞iOS开发,但每次一看到Objective-C那种奇葩的语法,心里就有马在奔跑,反复折腾几次之后,终于在12年底下定了决心开始钻入iOS开发。


自己虽然不是设计师,但有一些基本的审美素质,所以在国外网站上20美元买了一套UI后,自己做了设计。交互也是自己画的,太拙劣了,就不晒出来了。


看上去是这个样子的

和大多数应用一样,上线后就没动静了,每周偶尔有几个人购买,对!是收费的,0.99美元。之后更新了2、3次,添加了小功能和修复了BUG,但始终没有任何起色。


转机发生在一年以后,也就是iOS7发布后。看完13年的WWDC,当时被Yahoo天气等惊艳到后,我决定要重新设计一下我的应用了。在一个设计师同事的帮助下,应用就变成了这个样子,图标也重新设计了一下。

因为支持了64位,当9月份iOS7正式开放下载前一周的时候,我收到了苹果给开发者的邮件说可以开始提交iOS7的应用了,我便于当天就提交了。没有想到的是几天后接到了苹果打来的电话(美国的号码),说我的应用在iOS7上面闪退,这个应该是当时系统的一个BUG,如果你的应用同时支持32位和64位的话就会在64位设备上闪退,因为iPhone5才发布,所以开发过程中并没有机器可以来测试。对方告诉我有两个选择,要么只支持64位系统,那么就不能支持iOS6;要么放弃64位的支持,这样iOS6和7上都能运行,让我决定后重新上传,他会尽快审核。我最后选择了仅支持iOS7和64位并当天就重新提交审核并把价格改成了1.99美元,想着反正没人下,也不在乎这个价格了,苹果很给力,第二天审核就通过了。也正是因为这一次改版,彻底改变了这款应用的命运。


iOS7正式发布后,每周的下载量略有提升,但还是非常少,完全没有任何办法啊,没钱刷榜只能力求苹果推荐,当时听说支持新特性什么的就更容易获得推荐,所以在13年底的时候花了时间增加了用户呼声最高的iCloud功能,结果是给自己挖了一个大坑,后面详说。反正就这么一直不死不活的样子直到14年1月份。某天晚上睡觉前,我突发奇想把应用改成了免费几天(传说中的限免)。结果第二天早上,收到了一封AppsGoneFree发来的邮件,说他们推荐了我的应用。因为老婆一直用AppsGoneFree下限免应用,所以这个消息让我兴奋了起来,一直在期待统计数据的更新(因为没有加第三方统计库,而苹果的数据统计是一天一更的),晚上看到数据的时候把我乐坏了,1.4万的下载量,看来用户还是喜欢免费的啊。这个结果直接导致了应用的评分也大量增加,并且90%的都是5星评分。而大量的下载也会提升应用在市场上的排名,并带来更多的下载。而且限免结束后一段时间内的购买也会有提升,我猜想应该是用户基数上去了,知名度更高的原因。总而言之,这次限免让我尝到了甜头,因此每次更新的时候我都会顺便限免一次。


14年3月份的时候限免又被AppsGoneFree推荐,那次日下载量突破了3万,并且在各大(小)应用市场中的排名蹭蹭往上窜。


然后3月27日早上收到了一封用户邮件,他说他在新闻里看到我的应用,里面说有安卓版,但是他没有找到。我马上问他在哪个新闻看到的,于是他把地址给我了。是美国Fox6台的一个地方新闻中的一个栏目叫做What’s Appening,主要是向用户介绍最近流行的应用,节目中他们还特意准备了5张1美元来作为开场白的道具,略带喜感。下面是视频截图,可以看到主持人手中的手机中运行着5coins。


14年9月,被中国市场首页推荐


15年1月,被Product Hunt推荐,当天日下载量达到近13万


期间,网站也改版了好几次,下面是新版后的第一个网站(Landing Page)


第二次改版


现在的样子 5coins - The simplest expenses tracking app for iOS



================= 但是,出来混的,迟早是要还的。==========


由于自己的失误,加上陷入iCloud的坑,一次更新后出现大量用户数据丢失的情况,每天都会收到几十封来自用户的邮件,问数据怎么没了,我要一封封回,并且要尽量帮用户找回数据,要问用户的系统版本,要问iCloud设置,要告诉用户可以通过哪些方法将数据弄回来。同时你要去想办法重现这个问题,接触过iCloud的开发者应该明白,CoreData(本地数据库)+iCloud是噩梦般的存在,现在应该好一些了,特别是CloudKit出来之后。总之,我需要一边安抚用户的情绪,一边努力找到BUG,提交新版本,向苹果申请快速审核(苹果很给力,两次申请都通过了,提交24小时内就通过了审核)。


但用户是没有耐心的,特别是丢失了数据的用户。所以App Store出现了很多一星的评价,给大家看两个最让我难受的:


LOVED it until data was deleted


This was a very useful app... I used it daily to keep expense reports in check. Until the latest update 3.4.4. Everything has been deleted. 6 months worth of data. GONE. Fix or app is getting deleted like my data.

简单翻译一下:你特么不修复这个BUG我就删了你这个应用,就像你删了我的数据一样!


Thanks for the horrible update


This was a pretty cool program when I got it in January. I really liked the way my spending patterns changed when I could visualize where my money went. But this is also an archival app for your expenses. Today they released an update and every single expense I had on the app prior to the update disappeared. I uninstalled and will avoid this app developer in the future.

简单翻译一下:数据全丢,太失望了,删应用,以后离这个开发者远远的。


那几天,心里非常难过,也非常后悔,后悔自己的错误给这么多用户造成了损失。


==========================================

以上就是我作为一个独立开发者做一款应用的过程,有机遇,也会有挫折,但真正能让你坚持下去的是还是内心的那份喜爱。以下是一些心得,回答题主的问题,希望也给各位想自己做应用的开发者一些启示。


1. 认真对待每一个功能

不稳定,bug多多的功能还是别上了,那是给自己找罪受。要支持一个系统的新特性?别着急上线,仔细阅读一下官方文档,网上看看人家的经验,争取找一个最合理的方案(Best Practices)。你今天心急随意上了一个功能,说不定哪天就会给用户带来不可挽回的损失。独立开发者意味着你需要承担更多的责任。


2. 时间总是有的

没时间不是理由,说自己时间不够的有两种人,一种是真时间不够,还有一种是懒,仔细想想你属于哪类?我家在无锡,工作在上海,5coins的大部分代码都是我周末在往返动车上完成的,周末时间不能用,因为要约会,哈哈。什么?程序员也有女朋友?当然有!而且还很漂亮!已经成为老婆了。


3. 不要停止学习

做独立开发者的最大的一个好处就是你可以不断学习你想要学习的东西,新的技术,新的平台特性,新的编程语言,你的全职工作很多时候并不会允许你有这么多机会自己去完新的东西,所以开发者利用自己的项目去学习是非常必要的。


4. 如何成为设计师

有设计师朋友一起做当然是最好,不过很多时候设计师都要你自己来当,但要记住一个原则,交互设计大于视觉设计。首先要好用,其次再是好看。至于如何把交互设计做好,这里的学问就多了,我也只是在学习过程中,除了对设备本身的特性要熟悉之外,最重要的是站在用户的角度去思考问题。视觉设计的话,自己实在没感觉就去买一套UI吧,也不贵,比你自己瞎整更省时间。现在老婆在我的引hu导you下也正在转行学设计的过程中。这是和她合作的第一款应用(大姨妈管理应用, 名字叫Lunaria,免费的哦),怎么样?还是有点感觉的吧。我做这款应用是为了学习swift。


5. 需要累积什么经验么?

你经验越丰富,走的弯路也就越少。但丰富的经验不是前提,因为作为独立开发者这个过程本身也是经验积累的过程。


好了,先到这里吧,这是我知乎最长的答案了,也不知道有没有人看。能看到这里的同学看在我辛苦的份上也点个赞吧,赞多了,开心了,我直接把应用限免了,哈哈。

学javascript吧,web前端页面能搞定,再学点node.js+mongodb,服务器端也搞定了,然后学react native,移动app也搞定了。于是你就能搞定一切了。

然后,要注意锻炼身体,不要经常熬夜。先回答题主的问题:可以的


其实能自己做一款APP很多时候是一件很自由的事。自己定需求,自己做交互、UI,自己写代码……当然也是一件很累的事。


先贴截图:
1.0版本
2.0版本


下载链接:「Corner」安卓版免费下载
它叫Corner,为什么会实现它呢,只能说脑洞开得大,经常会冒出一些奇怪的点子,但很多时候都是因为没能力实现而觉得很遥远,但慢慢的你会发现,并不是没能力,而是没毅力。
(具体想知道Corner是干嘛的,请移步这两个帖子:
北邮人论坛-北邮人的温馨家园
北邮人论坛-北邮人的温馨家园)

我就说说题主的提到几个点吧。

定需求:
怎么去定需求,我算是野路子,没写需求文档(也用不着写),更谈不上市场调研、需求分析什么的了,正如乔布斯说的,如果不是真正把一款产品摆到用户面前,用户是不知道他到底想要什么的。所以全部需求都是照着我的初衷和直觉来定的,好像也只能这么做了。
1.0版本在原来“教室吐槽”和“自习室反馈”的基础上,爬了教务处的空教室数据(数据是每天更新的,只显示当天),增加一个空教室查询功能。
2.0版本在原来的基础上增加“宿舍楼聊天”和“身边的人”的功能。
一开始我觉得定需求so easy,直到这个暑假实习后才发现,一个需求是要需要经过好几番讨论、分析……才能确定的。产品经理,技术人员,谁都有谁的不可替代性。

服务器:
看到这么多人都说这个题是leancloud的广告贴,好吧,其实我用的就是leancloud == ,起初还不知道leancloud的时候,感觉要自己搭一台服务器的话,学东学西的,做完这个APP也得一年半载吧,还好有个舍友跟我说了leancloud,同时他也说了其他的,比如:阿里云,京东的什么什么,新浪的什么什么……但leancloud的学习成本相对小一些,于是就选了它,虽然时不时服务器维修什么的,但还是不错啦~当然类似平台也有很多,像环信、友盟……

Android开发:
大一的时候看到上铺自学Android开发,于是暑假也跟着凑热闹自学了两个月,之后因为别的事停了一段时间。所以代码开始写时,Android就没学几个月,自然地,一些现成的优秀的轮子都没用,比如网络请求,图片缓存……如果当初用了那些成熟的轮子,或许开发会更顺畅些,但是,你始终不知道人家里面都写了什么,比如一开始就使用Fresco,可能我就不知道怎么用线程池、建立二级缓存、避免OOM……了,所以,塞翁失马,焉知非福,开始学的时候,建议还是自己亲自去体会一些内在的基本的东西为好。顺便一说,Java也是自己看了一些语法就开始写了,很多人在纠结学Android需不需要先把Java学好,我只能说想把Android学好,一定要把Java学好,别问我是怎么知道的~
另外,开发环境也是很重要的,不要再问Eclipse,IDEA,AS哪个好了,选AS吧~


交互、UI:
对于交互,我相信每个人使用任何一款APP的时候,都会多多少少有一些吐槽,至少我是这样的。所以在设计交互的时候,我能做的也只是尽量避免那些自己认为很反人类的设计了。
而至于UI,身为一个通信工程的大二狗除了上课、写代码、做实验,实在无力去学习怎么作图了~ == ,扬长避短,既然不会P图,那就直接用现成的好了,在纸上把大致UI图画好后,具体图标在网上找,偶然在github找到了整套Google Android 5.0 的icon,于是APP里的那些icon都用的这套图标。另外,一个很重要的技能就是配色了,在1.0版本的时候,会去纠结各种配色,为此还去看了一些配色的知识。比如当初就很纠结要选下面哪种方案好。
到了2.0的时候,就往MD风格靠了,借鉴很多他的配色,当然,这只是表面上的MD,我觉得MD的精髓还是在其动画,也就是他的交互。


题主在纠结是否要自己去做一款APP的话,如果是创业的话,毕竟是要将其商业化,还是三思后行为好,如果是为了学习的话,劝你赶快行动吧,制作过程是一个痛并快乐着的过程,比如我那段时间就经常上课画大致的UI图,这是个会让你上瘾的过程。且不论成功与否,有没有人用,能让一个idea落地生根的变为现实,这本身就是一件很有成就感的事,在外人眼里,他们也许觉得你的APP没人用,很失败!对此,只能说:冷暖自知。别人始终不知道你从中学到了什么,体会到了什么。管他的呢,follow your heart!


共勉!既然有人有做广告的嫌疑,那就让搬运工来给大家科普一些baas服务一 一+
适当的使用第三方服务确实是能快速开发。

原问题:BaaS服务平台有哪些? - 移动互联网

后台数据存储

1. StackMob Product | StackMob

2. Parse Products

3. Bmob Bmob移动后端云服务平台

4. Leancloud LeanCloud


应用数据分析

1. 友盟 友盟-专业的移动开发者服务平台

2. TalkingData TalkingData-专业的无线互联网数据服务平台

3. 魔方 魔方-移动应用服务平台

4. AVOS Cloud Analytics 功能 - AVOS Cloud


移动终端测试

1.Testin Testin云测

2.班墨云测试 全球首款智能云测试系统

3.DroidPilot Android自动化测试工具DroidPilot

4.摩测 e世博,e世博注册首选平台


应用发布

1.一键云 关于我们

2.抓猫网 抓猫移动广告聚合优化平台


消息推送

1. 极光推送 JPush极光推送

2. 个推 个推开放平台



信息识别

1.语义云 首页 (自然语义)

2.慧眼开发平台 http://smarkeye.mongtx.com/ (图像)

3.AngelEyes http://www.angeleyes.it/ (图像)

4.Face++ Face++ 最好的免费人脸识别云服务 (人脸)

5.Face-API http://faceapi.cn/ (人脸)


应用内广告

1.掌淘联盟 http://appgo.cn/

2.抓猫网 抓猫移动广告聚合优化平台


未分类

1.短信宝 短信宝-为中小网站提供专业的短信服务 (短信开放接口)

2.亲加 亲加 | 移动应用沟通解决方案 (实时语音)

2016.6.18最新更新:终极更新
2.5版本已经不算是我个人独立开发的了,所以本次更新是这个回答的最后一次
新的一版手杀2.5上线了
增加了互动性与游戏体验优化:
战报系统、杀友圈、夜间说话、评价系统、配音系统
玩游戏的同时可以交朋友,和朋友聊天可以玩游戏
总下载已经超过9W+
今天我来谈谈从个人开发者进化到团队开发的过程吧
个人觉得组建创业团队,与公司招聘搭建创业团队有本质区别
创业团队的组建,更注重的是目标与理想的一致性,我会问每一个合伙的小伙伴,如果一年内没有收入,或很低的收入,你是否能够坚持住呢?这其实是我决定一个人做独立开发时的决心,我也有家庭要生活,但我可以给自己一年的时间,来验证我的理想有没有机会实现,我希望合伙人也能做好同样的打算。
个人开发时,每天的焦虑在于好多工作任务没有精力去完成,所以当初一个人2,3点睡觉属于常事,有了团队了,即使很小只有3人,工作上的焦虑就会缓解,现在只需要正常上班,回家后加加班就可以了。身体上有了一定的缓解,但精神上又有了新的焦虑点,那就是创造营收的问题
回到本问题“一个人如何开发一款 App?”,以我个人的经历来看,是完全可行的,找准了用户的需求点,持续改进打造优秀体验的产品,一个人是完全可以开发app的,并且有可能通过这个行为,为自己创业组建团队,打下坚实的基础。
当然,问题也提到了需要什么经验积累,这个还是有一定条件的,毕竟我做独立开发者时,已经是一个有7年多经验的程序员,带领团队做过10+个app,ui也是求助于前同事帮忙的,但目前我总结,最大的要求,还是要有一颗坚韧的大心脏,如果没有,在出现一丝迷茫的时候,很有可能就无法坚持下来了,具体战术措施,可以查看下面以前回答的内容。
最后列出一些最新的app数据
总下载量:9W 月活跃:3W 日活跃:2400 微信公众号粉丝:1.1W qq群人数:1100 每月游戏局数:1.6W 人均每日使用时长:1.5小时
虽然还是很简朴的数据,但程序员已满足,多少个日夜的辛劳,得到了用户的认可^_^
中间的插图我都删除了,最后留下最新版的app截图吧,喜欢玩杀人游戏的同学可以下载哈

2016.3.9最新更新:差异化竞争
最新的手杀2.4ios版上线了
增加了双身份8人局的玩法
优化了很多细节体验

今天我来聊聊个人开发者如何去与其他团队竞争
同样的一个类型的游戏,作为独立开发者,如何扬长避短吸引用户呢?
1.定位和方向上不要重叠
别家界面华丽,玩法简单,吸引普通休闲玩家
我方界面简洁,玩法专业,吸引相对专业一些的玩家
2.更新频率与策略
别家注重网站,试图多点开花
我方专注移动,定点突破,高频更新app
3.营销策略
别家做硬广,竞价排名
我方引导用户口碑传播

以上这些简单的差异化,决定了独立开发者的生存问题

有时我们不需要赚很多的钱,只怕自己千辛万苦的打造的产品石沉大海

下一阶段会研究并试错一下,独立开发者如何去做运营,大家期待我的好消息吧

ps:目前在努力脱离独立开发者的孤寂旅程,希望更多的伙伴们努力奋斗吧
国际惯例广告就不加了,往下翻翻就看到啦
来张2.4版本双身份的截图
2016.2.4最新更新:真的可以还记得我吗?
我是那亲爱的蘑菇啊,不认识我的可以先看下下面我的原答案,进行的事才有趣
目前手杀已经积累了2W+的下载量啦,每日新增稳定在300左右,官方群也加了900+的忠实杀友啦
那么如何才能取得这样的进步呢
首先再次明确,我还是一个人!
是的,还只有我一个全职的开发在做,而兼职的两位伙伴也因工作事多而很难帮上忙。
那么在这段时间我都做了什么呢:
1我改进了整体的app稳定性,
2推出了更多社交功能,
3优化了细节体验,
4完善了付费渠道,
5顺便还开发了个简版的web版手杀,
6建了个有500粉丝的手杀官方订阅号,
7新建了一个微信群,
8又运营着一个客服微信号,
9鼓励大家去给app加了些好评,
10还配合组织了一次手杀平台的邀请赛,
11上线了一波新头像,
12不记得其他的了
一个人要做这么多,可能吗?能做好吗?
答案是可以的
方法是少睡觉,多干活。
要说累不累,真累!
值不值呢?我们来看看
经过这波辛勤劳作:
1手杀基本稳定了,
2杀友们玩的更开心了,
3都在圈子里找到了能玩到一起的伙伴,
4有了家族圈子,没事发个红包抢个金币更有乐趣了,
5有了漂亮新头像,果断通过支付宝买金币换吊呆男头像了,
6看着杀友们玩通宵,我代码敲的也有力多了,
7大家不在为月均6块钱的vip而纠结是不是值得冲了,
8土豪也果断砸金刷魅力了,
9玩家认可支持度持续上升中……
我觉得值了,感谢杀友们的支持,蘑菇还会持续努力,也许有一天这个答案会变的不适合用于一个人开发app,但那也是手杀真正崛起的一天,是杀友们将被世界所关注的起点!
未完待续……
惯例的广告差点忘了
手杀官方微信号:shoushaquan
手杀微信客服号:killershome
手杀qq2群:527161135
各大市场搜索:手杀,下载app
—————原答案—————
可以
点好技能点,付出时间与精力,没理由不可以!
正如题目所说,一人需要考虑负责的事情很多,但为什么会这样呢,一个字:没钱!
那么又想追寻梦想,让自己的idea不缺程序员,只能靠自己,否则网上夸夸其谈怨天尤人的那么多,何必泯然于众人。
做独立开发者,个人以为最重要的是要从自身精神层面坚定不移。一旦动摇则根基不稳,内在心理与在外环境势必会将自己压垮。
我目前算不上完全的独立开发者,因为有两个小伙伴兼职帮忙,但个人的感受与体验应该可以分享给大家。
作为背景稍微介绍下我的个人资料,本科毕业7年,3年web,4年安卓+2年ios,3年项目管理,以及多年的服务器开发优化经验。作为主力程序员与项目管理分别大大小小做过10+个app。
好了以上是背景介绍,算是对后面发表感慨的一个基础,本人才疏学浅,个人感受仅供参考

我要创业!我要实现我的梦想,要实现我的个人价值,我要赚大钱!
以上是我最终决定辞职的内心活动
因为注册的公司名叫蘑菇网络,暂时称故事的主人公为蘑菇吧
蘑菇辞职后,全身心投入了杀人游戏online的开发中,蘑菇先是给安卓开发的小s,苹果开发的小z分享的自己的远大理想,成功忽悠到了两位得力的帮手,还记得蘑菇45°朝上的抬着头,口中说着:我觉得这个能赚钱,我带哥几个一起发财(脑补画面)。
晚上八点开搞,这不是约团开荒,而是约着搬砖,鉴于蘑菇对产品深思熟虑已久,加上和小s小z默契的配合,功能进展很快,因涉及支付,及其他一些原因,这之间蘑菇花了一个多月才把公司手续办好。
眼看着第一版程序日趋成熟,蘑菇继续急忙再次找人求援,这次是找到了ui设计师小w,“帮忙做几个页面啊,回头请你吃饭。”接着就把原型发了过去( ????? ),积极配合完成了所有页面,然后开始准备安卓上线事宜。
此时app有了更犀利的名字:手杀
一上线才发现,所有大一点的市场都不让带支付的游戏app上线啊(? ??_??)?不给人活路,在此吐槽巨头收购后的渠道,明显强势很多,记得11年发布我的一个小应用的时候,还有很多市场来拉我上传的,现在,哎。。。
最终结果只能妥协,加了百度的游戏sdk,上了百度的渠道(虽然跟没上一样)
与此同时,蘑菇与小z还在废寝忘食的开发手杀ios版,首版因为各种原因被拒绝了5+次,你敢信?近两个月的纠结终于上去了,情况一般,每天ios平均在50左右下载,最多也就100个,可是app开始闪退了!人一多语音就不稳定,哎,只能暂时推出文字房解燃眉之急。
在此感谢这一个月下载手杀app的杀友们,你们的支持是我们团队的动力!目前在手杀官方群有200+忠实杀友了,我爱你们
官方群号:175556705
最近蘑菇一边在忙着开发2.0版本的手杀,一边再考虑推广的事,准备11月初开始大规模推广,还望众多杀友们支持。
是的,蘑菇的故事是进行时,还没有结束。
以上是我作为一个准独立开发者的故事,暂时总结一下有下面几点
1、如果没钱,请节约一切成本,可以减少内外压力,除了必要成本(服务器、劳务费),能省则省,2.0版本ui是蘑菇自己做的,你敢信?
2、有规划、有计划的实施项目,不要认为独立开发了就无目的,无目标了,除了代码版本控制,还有产品文档和技术文档,你敢信?
3、量力而为,很多事情别人能做未必你也能,所以切忌假大空,脚踏实地一步一步来,当然蘑菇是全栈程序员,程序员万岁!
最后,国际惯例
广告来啦:
欢迎大家下载手杀app,appstore搜索:手杀
或直接复制链接下载:http://51shousha.com/mafia_download.html
来一起烧脑吧,没有调查研究没有发言权,下载了的可以无限喷我

四个月,一个人,苹果APP STORE精品推荐!


2015年6月18日首版产品苹果商店上线,2015年10月16日,洋葱数学被推荐到首页优秀新APP,教育分类第一,精品推荐!这样的成绩当然是整体团队的功劳。作为其中唯一的ios开发,是的你没看错!只有我一个ios开发,一个人!!被苹果上榜推荐喜悦和欣慰稍许沉淀,不觉百感交集。

2015年5月加入洋葱数学的时候,整个技术开发team还是刚从web端转向移动端(主要是andriod)拓展。讲真,心里挺没底,ios开发就我一个人而且产品零起步,大家对移动端产品是否能给予web端同样优秀的学习体验也并不是很确定。不过没底归没底,一方面是一直被团队和诺哥(CTO)对教育本身情怀所打动,另外andriod端上线后的好评反馈也开始坚定大家打磨移动端产品的决心。那我所要做的,就是Just do it!在ios端开始追赶安卓版本。


开发之前,我用了近两周的时间去了解我们的产品设计思路,了解服务端架构,了解schema的设计——反复研习PC端和Andriod产品。之间遇到有疑惑的地方,一定及时找对应的同事沟通,在此之后才正式进入开发。为什么要花近半个月的时间了解这些呢?我觉得有以下几点益处:首先,熟悉产品的前因后果,设计思路和理念能帮助我们更深入的了解产品,更快的融入团队(举个栗子:我们每天会开每日站会(Daily Scrum),每个成员用很短的时间介绍自己当天的工作内容,有无延误,接下来的计划,在这个时候,很多成员会说些内部术语,例如“内循环”、“外循环”、“学习主线”、“教师线”等等),如果不事先对产品有所了解,就很难去理解大家说的是什么。这些前期不知道的事,在开发过程中一定会极大增加大家的沟通成本;其次,只有对产品足够的熟悉,才能理清产品脉络,开发起来会更加得心应手,磨刀不误砍柴工。


6月18日,iOS端第一个版本终于上线。我用了一周的时间去重构,如果把重构分成三个级别:代码级别、组件级别以及系统级别,那这次重构主要是系统级别。大家可能会奇怪,为什么会第一个版本后就需要系统级别重构?这也是由创业公司背景决定的,产品思路是——小步快走,快速迭代。所以产品本身就一直在变,我们第一个版和当前的线上版本,完全可以看成两个不同产品。

洋葱数学iOS第一个版本是MVC模式,为追求快速上线,并未将业务逻辑从Controller中分离出来。随着对产品认识的不断加深,产品在UI上不会太复杂,但是在业务逻辑上,相对比较复杂。这种情况下,iOS中MVC的一些弊端就会被放大,例如Controller层的复杂度会不断提升,未来维护以及测试会越来越麻烦......如果在产品迭代几个版本后再改,代价就比较大了。


最终决定采用MVVM+ReactiveCocoa(RAC)来改进项目架构,ReactiveCocoa是在iOS中使用MVVM模式的利器,极大的方便了MVVM的iOS实现(对iOS开发感兴趣的可以多了解)。在这次重构过程中,我也并没有冒进。从项目稳定性角度来看,技术太新,生产实践案例几乎没有。因此,采用了渐进式重构方案,只对一些相对简单地页面做了彻底的重构,剩余的功能,只是将业务逻辑分离,这样可以在第二个版本上线后观察一段时间。针对重构,我的想法是,稳步前进,逐步优化。毕竟需要动大招的频次必须得低。另外,千万不能想着一次性根治所有问题,因为永远会有新的问题。得益于求稳的迭代方案,经过逐步优化,目前从统计数据看,洋葱数学错误率一直稳定在平均0.09%左右。


一个人的战斗,除了技术上。其实更多精力会被对接需求蚕食掉,工作的复杂性体现在:一般的工作时间,那就是我一个人要和产品、测试和后端等对接需求。还要筛选简历,和面试候选人。感谢我所在的团队,让人在公司体会到了校园的感觉——学习氛围浓厚、同事之间关心友爱(好基友,一被子!)。大家都会照顾到我一个人面对ios开发的困难,Andriod开发的同事会特别提醒我之前他们在移动端开发遇到的坑。我们有自己的技术博客,不论是上面说的对于新技术的尝试还是技术的深度反思和总结,都会写在上面,同时实习生为团队做了个微信机器人,任何人写的任何一篇文章,都会在第二天的午饭时间,通过微信公众号准时推到自己的手机上。另外无论是Google I/O,苹果WWDC,还是罗胖子的单口相声发布会,我们也会一起在会议室上边吐槽边看现场直播。


苹果商店对产品的推荐,也让我觉得压力更大,随着产品功能的复杂性加大,仅仅靠我一个人肯定无法实现和其他平台版本的同步。如果你是一个对技术有热情,希望完备科学的方法论和持续进取精神的iOS开发。快来和我并肩作战吧!我们一定又能实现一个又一个的精品推荐!!

看到这个问题不免一颤,哈哈 这不就是自己这几个月开发App一步步走来的过程么。在此跟各位分享一下如何从零开发一个App以及后续。笔者也是初出茅庐~但也是从零自己奋斗上来,所以有些经验可以分享,高手大大轻喷(′?_?`)

笔者还在读书,本科。两个学期前我对于App开发还是一无所知,从零起步。多从零呢,大概就是谭浩强的C语言教材我都看的云里雾里吧。先分享一下我的个人经历。今年3月我有一个好的App创意,而且想来应该是非常简单的开发过程。于是开始自学App开发。一个月后基本熟悉了C语言及苹果Swift语言,略微了解苹果的应用开发框架,便哐当哐当开始自己的第一款应用开发。实践便是最好的老师!于是今年5月个人第一款App上架。一个很简单的GPA计算器:

虽然在很多人眼里只是很简单的事,但对自己鼓励很大!于是完全没有休息,在不停继续学习必要知识的同时开始开发自己的第二款App。过程大概就是发现新需求,学习如何实现,然后真正实现到自己的App。第二款App Morse Input于今年6月上架。是一款用莫尔斯电码
做输入方式的输入法:


然后呢?然后就放暑假啦……… 学生党伤不起摊手( ̄▽ ̄)
暑假期间回了两周的老家。老家没网,没wifi… 对我简直折磨(╥﹏╥)… 于是抱了两本苹果2D游戏开发框架SpriteKit教材走。准备闲来翻翻。结果一开始看就停不下来了。这不是很简单嘛!比开发App还简单。而且很有意思嘛开发游戏什么的!笔者此前对游戏绝不算发烧~ 痴迷过经典掌机游戏Pokemon,喜欢主机大作GTA,其它游戏几乎没玩过ORZ…… 但开发游戏真的很吸引人。可以制定一个小小世界的规则,所有Sprite的生死都在我手上吼吼吼吼吼。于是暴走看书两周看完了SpriteKit基本知识并开始开发自己第一款游戏,游戏于今年10月上架(游戏开发周期真是长啊… 伤不起)有人可能会问美工怎么解决的?这个也让笔者头疼好久… 最后还是决定自己画。在pad上下了个叫Dots的像素风绘画App:

自己手绘素材。因为都是像素风的所以还是比较容易画的… 然后等游戏完成后又觉得略单薄,于是找自己会画画的朋友给自己的游戏画了另一套手绘主题。现在游戏类似涂鸦跳跃一样可以切换主题。


游戏上市后一周,自己开发的几款App用户破千~ 小小成就 撒花

现在正与同学合作开发第二款游戏,所以自己的经历差不多就是这样啦。
至于收入问题,自己做的App和游戏一直都是完全免费的。上周开始尝试过每个App收取0.99美元。一周下来收入大概是6.几美元吧。人民币不到40元。很微薄,很微薄,很微薄!但毕竟刚刚起步~ 相信以后采用广告的方式以及做出更好的App,会有更有成效。

一些建议:
1. 选择平台很重要。我选择苹果的iOS平台是因为它学习成本较低,有非常易学的Swift语言以及成熟的开发环境。再者苹果设备专一,目标设备就那几款都数得出来。而且对于想获取收益的人来说也比较适合,只有一个应用市场。
2. 学习的步骤大概是 有兴趣》选平台》学语言》学框架》实战开发!实战开发!实战开发!
3. 自己一个人开始是很可能的,因为自己没有点基础也没人会跟你合作。后期的话一个小团队就很重要了。做一款App或者游戏工作量很大,而且还有美工,配乐等很多很多事情… 坑坑坑坑
4. 英语很重要!英语很重要!英语很重要!

一些干货,因为都是互联网的免费资源或者可以轻易购买到,不发链接啦

1. 学习Swift语言,建议看CocoaChina翻译的苹果官方文档


2. 学习完语言后要对开发App有一个基本概念~ 建议看这本小册子 - Become an Xcoder


3. 一本APPCODA出的Swift开发应用的实例教程。整本书会带你开发一款完整的App。

用react native 和nodejs开发一款app,开发机为mac

基础环境配置

  • jdk:编译Android
  • node:服务器开发
  • mysql:服务器数据库
  • brew:软件包管理
  • npm:node包管理工具
  • yarn:Facebook提供的替代npm的工具(最好不要npm和yarn混用)

IED

  • xcode:配置库,打包,真机运行
  • Android Studio:配置项目
  • Atom:编写rn
  • SublimeText:编写服务器node

辅助软件

  • Sourcetree:代码管理
  • FileZilla:部署正式环境上传文件
  • 有道翻译
  • 有道云笔记:记录隐私数据
  • 百度网盘
  • 科学上网工具:AndroidStuido更新 查阅资料
  • Google Chrome:debug rn
  • Photoshop
  • Xmind:头脑风暴
  • MWeb:编写文档

开发语言

  • linux基础操作
  • sql 基础操作
  • javascript语言
  • git基础操作:代码管理
  • Android开发
  • ios开发
  • ps基础:ui制作
  • html, css:后台开发

常用网站

  • react native中文网
  • yarn
  • https://github.com
  • 站酷

个人认为一般一款app开发时间大概3到5个月,前半个月到一个月一般都是基础框架的搭建,这个在开发第二款的时候可以缩短到半个月以内,复杂的功能2到3周,简单的一周以内,最后一个月基本收尾修复bug,发布到各个平台。


以下是我在开发过程中的一点点感悟。


1.rn的优势很明显,一套代码支撑,当然前提是纯rn项目不涉及混编,但就目前来看在开发时间成本上并不会比原生的少,因为在开发中会遇到很多问题去花时间解决。


2.不太建议零基础直接从rn开始,最起码要了解android跟ios的环境搭建与发布,理想状态就是有人专门去维护rn环境,其他人专心做逻辑。


3.做rn一定要学习redux,我在最开始的时候看了下redux由于觉得难懂,就绕开了,但是当我开发到中途的时候发现这是绕不过的,所以不得不又花时间硬着头皮重构。


4.遇到问题一定要沉住气,几乎都可以在网上找到答案,大部分在GitHub里,所以英语最好过得去,我就是在这个是吃的亏,几乎每句都要用翻译软件,浪费了很多时间。


5.在项目的一开始就使用flow,对于代码质量很有帮助。


6.最好从一开始就做记录,写笔记,博客,任何方式都可以,但是请记录下来,后边你会发现有些问题会经常出现。


7.如果你也是一个人开发,忘记自己之前是做什么的,因为从开始你就什么都得去做,能帮你的只有你自己。


8.这个过程中心理变化会很复杂,心理波动会很大,最好从最开始就把预期的困难放大5倍以上,给自己一定心理建设。


9.时间是固定的,任何额外因素都会影响你的周期,放弃一些你能舍弃的东西。比如卸载手机上你觉得没有营养却占用时间的软件,给自己制造一个专注工作的空间。


10.结果只有0和1,这是一个很残酷的现实,不同于其他,没有中间值,并且绝大多数是0。


其实当结果是0的时候我还是希望能留下点什么


[写诗人]rn客户端工程

[写诗人]服务器工程

[写诗人]后台工程

个人博客

ReactNative开发之疑难杂症

ReactNative开发之打包发布

------2017-12-28-----

bb漂泊:一个人如何开发一款app?

-----2017-12-03------

时间真的经不起记录,它会让你回头看的时候感到陌生,恐慌。

没想到一年过的真的这么快,回想下了这一年发生的事情,在我还没有鼓足勇气辞职的时候项目组被动的解散了,所以最终还是结束了北漂生活,那段时间我对精酿啤酒产生了兴趣,打算回家尝试下,再写一个关于精酿啤酒的app,但是当我真正回到家里的时候,似乎与预期有了很大的偏差,最终还是没有做。在家里带了几个月的孩子,这期间写了一个精酿啤酒的app,发布后石沉大海,后来经亲戚介绍来到一家白酒企业做互联网,做了3个月,我发现开发的事情几乎没有,这样下去我怕自己丧失编程能力,所以辞职了。然后开始在哈市找工作,感觉互联网环境不是太好,找了几份,没有合适的,就又一个人在家写app,直到现在。再有两个月还找不到什么生存方式的话,我就还得去找工作,因为有孩子,有房贷。

关于[写诗人]


------2017-07-31-----

单从开发上来讲,一个人开发都需要哪些准备,ui设计切图,这个我放弃,我觉得没有几年功底做不来,那就直接山寨一个别人的ui,服务器,水太深,功能实现还好,到做到产品级别也得几年功力,Android,ios开发,很多人说学几个月就可以写了,这个我承认,是可以写了,但是还得把趟坑的时间算进去,产品类型,社交类工具类还是其他,社交类肯定得有推送,这个就算用三方吧,是否涉及视频播放,还是用三方,但是三方肯定满足不了你的全部需求,如果工具类是否涉及专业技术,图片处理,复杂算法,自己写算法库,又涉及app底层,是否需要官网,又需要网站技术,是否需要公众号,又涉及公众号开发,好吧,我不敢算了,算不出来,最可怕的是我打算辞职在家用一年时间做这事

2015年4月份辞职 至今1年半 终于有资格回答这个问题了。我的作品是一个OCR类的app

流水账如下: 2015 4-8月份搞算法 回来发现算法不对 要推倒重来 识别100字要一分钟 完全受不了 2015 9-2月份放弃原来的 转搞神经网络 过年前后撸版面分析 2016过年后搞iOS界面 毫无疑问,我走了一些弯路…… 然后折腾硬件 折腾caffe 倒腾了各种算法 发现还是不稳定 后面终于发现并不是算法的问题……关键并不是算法,关键是样本。大样本+简单算法效果远胜于小样本+复杂算法。这个是泪与血的教训啊~! 2016年5月份没钱买米下锅了,又去屈辱地工作了2个月。这两个月里面,看公司大楼就像监牢;看同事都像狱友。这个时候已经完全没有为人工作的心态了(或者说心态已经极其不正常了)。帮人搞一个推送;每天挤地铁想死,去了公司看万恶的后台日志想死,跟嚣张跋扈的某前端部门leader联调bug想死。 进某创业公司,第一个月,加班89点是常态,但是公司产品上线前一天身体不舒服没有留下来加班,然后被推迟转正。CEO屌道:为什么没有主动留下来?我心想特么你又没在公司正式通知某某留下来,前面我加班都被狗吃了,你有哪怕给过我一分钱,甚至讲过一句好话?原来免费加班就是义务,你不通知我我还不能按时下班了? 坚持工作了2个月,拿到工钱,找借口走人;解脱之。 7-10月份继续来回折腾识别库和iOS界面。 一个做累了就做另一样。这段时间应该是最惨的。因为已经进入了创作疲劳期。这就是黎明前最黑暗的时刻。 iOS开发中最蛋疼的就是遇到无法复现的文件管理的bug:一旦启动时枚举app目录下文件就有一定概率crash;个把月出现一次。根本没法整。后面就决定先把文件管理的功能砍掉,以后找到病根了再说。 11月末,买开发者账号,准备上线。心得就是上线的前夜bug特别多,这也不行那也不行。


其他tips: 注意锻炼身体和交朋友 否则迟早得有抑郁症 搞app的一年半里玩过摔跤 散打 长跑 (体重也减轻了几斤 =_=)认识了一帮二货 不然整天没人说话 app没出来 自己倒憋出病来了


尾声:

故事到这里,就告一段落了。一般小说或者电视的末尾男主角都是出任CEO,赢取白富美,走上人生顶峰——然并卵。然而我的app并没有成功,然后我也只能就这么坚持下去。“坚持下去不一定能成,但是不坚持肯定就不成”。也就是这样安慰一下自己而已。然后我也不需要什么人给我加油鼓劲;只是来这里说出来而已。以上。

==========================2017.4.6===========================

还是安利一下自己的app吧;在app store搜“OCR”,现在排名第二的就是我的app;虽然还是全免费没钱赚的阶段,但是至少有人点赞好评了。还是有点成就感的。


一直都是一个人搞,下面这些是我的部分作品,所有作品都是我独立完成的近乎所有工作,其实没什么,有点编程经验就可以起步,钻进去就好了。
Awesome Ruler – Windows Apps on Microsoft Store
SkyD Regex – Microsoft 官方商城上的 Windows 应用
PandoraPassword – Microsoft 官方商城上的 Windows 应用
Windows手机与平板电脑客户端下载 - 大电玩时代 - www.vg66.net
Android手机与平板电脑客户端下载 - 大电玩时代 - www.vg66.net
Buddhism Om Mani Padme Hung – Windows Apps on Microsoft Store
佛教大悲咒 念佛机 莲花版 专业版—在线播放—优酷网,视频高清在线观看http://v.youku.com/v_show/id_XMTgxODIwMzgzMg==.html
Android超级水平仪App使用演示http://v.youku.com/v_show/id_XMjM0ODA5NDUy.html
砸乌龟 for Androidhttp://www.tudou.com/programs/view/ro9Y97PZ_Mo/幸运转盘 - 我的原创Android小工具—在线播放—优酷网,视频高清在线观看http://v.youku.com/v_show/id_XMjI3MTEyNzM2.htmlAndroid 极致拼图http://v.youku.com/v_show/id_XMjQ4ODY1MTMy.htmlAndroid 马赛克晶格动态壁纸(原创新作)—在线播放—优酷网,视频高清在线观看http://v.youku.com/v_show/id_XMjM3ODk1NzYw.html

今年六月的时候,萌生了开发一个记账 app 的想法,想去用自己的 app 记账,管理收支。那时正好在英国是考试周,放假后,我回到了国内,准备去实现我的计划。没想到这暑假很快就结束了,在这个暑假中经历的太多的事,准备了要去美国读研的考试,遇到了生命中的另一半,同时,也将 Costuary for iPhone 带到了这个世界。

说道为什么要开发这样一个 app ,因为笔者在UK读书,市面上很少有记账 app 能够实现实时汇率的换算,带有这个功能的 app 也是操作繁杂。所以要自己开发一个,功能并没有那么复杂的,并且能够满足自己在国外和国内生活需求的App,所以自己编写了 iPhone 的客户端,为了获取汇率和 Excel 导出,又用 Java 设计和编写了 Costuary 的后端服务器。

比起今年年初开发的 Flat Weather,这个项目的代码量大约是他的十倍,需要实现众多的功能和模块。

这篇文章将会介绍一下 Costuary 的功能与我开发过程中的一些心得。

设计

说到设计,两年前,我还是一个 Android 开发者,Google 的 Material Design 是我的最爱,所以,Costuary 采用了 Android 5.0 之后采用的 Material Design 设计。其中掺杂了一些我自己的设计,因为 Material Design 的控件有时候操作繁琐。

早在5月份的时候已经零零总总的用 Sketch 画出了这个产品的 UI 和图标,之后开始了漫长开发的过程。

交互

与去年开发的 Android 版不同,iPhone 版的 Costuary 采用了底部导航栏的设计,相比于 Android 通常使用的 Navigation Drawer 的抽屉布局,底部导航栏的设计即使在右手操作 iPhone 的时候都不会太费力。

功能

  • 多币种记账

Costuary 支持世界上主要货币的实时汇率转换,所有外汇在统计时会转换成主货币的数目,方便查看花销。

  • 日历视图

日历视图能够很直观的反映出哪一天有消费和收入。

  • 图表

说到记账软件,量化消费的图表无疑是重要的一环,Costuary 提供了饼状图来视觉化一段时间的花销。

  • 多账户

可以建立多个账户来表示自己的银行卡,支付宝,现金等等。

  • 月预算

可以看出本月的预算还有多少。

  • 导出到 Excel

如果想要进行更加详细的分析,可以使用导出功能将账本导出到 Excel。

  • 备份与还原

允许备份账本内容到 iCloud。

开发

去把一纸设计变成真正的产品,这是一个独立开发者应该具有的能力。只会写代码不只是我唯一掌握的,能够去设计出来自己想要的应用并且将他实现才是我在做的事情。

这款应用的开发并没有想象中的简单,需要自己去实现大量 Android UI 控件,很多圆角,阴影,字体,要慢慢的去调整,让控件适合 iPhone 的屏幕。整个应用的背后有 3 个关系型数据库来储存账户,账本与各种汇率。与以前开发的 Flat Weather 不同,Costuary 会产生大量的用户数据,所以整个软件架构的稳定性变得异常重要,需要设计一些机制来防止数据丢失与损坏。

为了实现 App 获取每日的汇率,并且在 iPhone 上能够实现账本导出到 Excel ,我设计了一个服务器后端来处理这些繁杂的实物。每次 App 启动后会与我的服务器来更新最新的汇率。当用户选择导出时,账本会被发送到服务器上并处理为 Excel 发送到用户的邮箱里。

说到服务器,就不得不提到用户隐私了,因为导出到 Excel 功能需要将账本传到我的服务器上做进一步处理,很多人会觉得我侵犯了他的个人隐私。对此,为了保护我的权益与用户的权益,我撰写了 Costuary 软件许可及服务协议与 Costuary 隐私政策,这是我作为独立开发者这么多年后第一次去写许可协议。

资费

与我的其他产品一样,这款 App 依旧是免费供大家使用的,作为独立开发者,我们都知道,绝大多数用户不会去珍惜一个免费的产品。就像 Flat Weather 一样,虽然获得了很多人的支持,但是也收到了很多人的吐槽。在 Costuary 中依然设计了一个的捐助按钮,如果大家使用之后喜欢这个应用,请支持我将他维护下去。

尾巴

Costuary for iPhone 是我开发出来过最大的软件体系。我相信,能够独立开发出来产品的人懂得不只是编程。一个人要去经历项目的全部生命周期:规划,设计,开发,运营,维护,营销,这些是我开发这么多产品所学会的。

现在的 Costuary 只是第一个版本,还有很多 iPhone 的特性没有来得及开发,以后会跟上的,比如 iPhone X 的适配,3D Touch、Today Widget、Touch ID 等等。

以前在少数派撰稿的时候,很多读者会来问我如何学习开发,我也特地去写过如何去学习编程,但我相信,真正想去学习的,想去为这个生态贡献出自己的一份力的人,自己都会找到学习的方法。我的专业是电子电器而不是软件工程,但是我不后悔当年去学习编程。

最后,还是感谢在背后默默支持我的人,我会不断地改进与提升,如果 Costuary 真的在记账方面给予了你便利,这是我莫大的荣幸。


如果想要了解我的更多作品可以访问我的个人博客 MikeTech,或者在少数派中阅读我以前写过的文章。今年年初也在 iPhone 上写过一个天气 App,天气应用 Flat Weather 的设计历程

对了,关于记账有什么用,如何记账,如何养成记账的习惯。为什么每个月末都捉襟见肘,除了没钱,很可能是对财务管理的能力不强。想了解这一方面的知识,不妨看一看我派的付费阅读栏目:从零开始做好个人记账

根据问题,可以归纳以下重点:(可略过)


前提是”我“并非行家,或者我懂其中一行(可以在知乎寻找以下每个重点的回答)

1、互联网 「从0到1 创业 」

2、开发app的流程 「项目开发流程、注意事项」

3、学习成本、经验 「成本」

4、团队、资源「费用成本、时间成本、人员成本」

5、自营团队和云端组队模式

6、靠谱众包平台,快速低成本创业


我们先来看一看开发一款App有哪些环节?



1、我们需要有一个好的idea、因为感觉对了就成功了一半。

真正有长久生命力的产品是从用户的需求出发,满足用户一个未能得以解决的需求、以及是否有一个清晰的商业盈利模式。

这个阶段在开发项目中,又叫做需求梳理的阶段。这个时候是将自己的想法变成开发语言的阶段。要记住在这行,想法是不能直接实现的,可以直接实现的只能是需求。

所以光有了创业想法是不够的,我们需要一份完整的需求清单,这样才能使开发进入一个闭环。从想法到需求的一个需求梳理的过程也是真正了解自己想要做什么的过程。需求越完整细致确定,越便于开发~

需求梳理过后需要拿出三样东西:项目需求说明文档、产品结构图、模块功能梳理清单

具体包含如下:

  • A、项目需求说明文档

a、文档结构说明部分

封面
项目说明
产品架构

b、产品需求描述部分

产品结构图
核心业务流程图
功能模块及需求说明


  • B、产品结构图以及核心业务流程图
  • C、模块功能梳理清单

这是重点核心,必须细致到所有功能点。 细致到每一个功能的最细节,分哪几块,一级二级三级等菜单。(可参考示例)


2、需求梳理过后进入原型的设计阶段

原型设计阶段需要我们画出产品的基本草图,其中包括:产品原型页面交互/产品功能说明文档

  • 产品结构脑图/表格
  • 核心业务流程 ——用户核心任务流程,核心功能状态转化流程图
  • 原型线框图,包括前端,后端——线框图,静态说明,交互说明

具体输出产品原型我们作为行业规则的制定者,已设置了规范的产品原型交付标准说明(示例)


3、前期是很重要的阶段,是寻找核心功能。以及确保后期正常开发关键的步骤,这个阶段,自己可以做,但是要逻辑细致,走得通。

此外,产品经理也是负责梳理需求和原型流程的:他们是能将你好的想法变成研发能懂得逻辑图。

切记不能贪多,想到什么功能就去完善,这样不利于初期创业。1.0的产品,不需要做太多大而全的功能。我们应该关注在最核心以及跑通主干即可。这样可以赢得时间,能去更多的思考运营和拿更多的精力成本去推广,即使失败也可以快速回血。


4、至于ui、前后端开发、以及测试没什么太大说的。一个人重视协调性,以及时间把控上。一个团队就在于配合协作了。

这里建议先做个好用的产品后再做个更美的应用。在开发阶段,需要考虑到准备东西的时间成本:例如注册域名、买服务器、备案、苹果开发者账号、安卓市场开发者账号、短信服务等等。不然中途会影响工期,影响上线,比如网站备案都得1个多月...还有测试阶段等等都是很细小的问题但是也很重要,需要详细了解的可以私信我。

创业开发一款app,基本的流程就是以上想法—需求—原型—UI设计—前后端开发—测试。在1.0后,就可以优化用户体验、迭代开发创新改进功能了。


以上介绍了搞APP的实现路径和环节,那么由谁来实现,就是接下来要讲的了。切题了没?

这个时候,需要点题一下:「创业搞 App」

既然是创业,就必然考虑互联网这个大环境以及新出现的种种应用和技术,在高速发展的如今,你的一个好的idea随时都会被其他人赶超,别提你还自己一个人,去完成那么多不擅长的领域和事情了。

还记得上面说开发一款1.0App流程吗?一个有产品经理、项目经理、设计、前后端、测试的专业团队再快也要在三个月内上线完毕(在需求、原型不怎么更改的情况下)。想一想,互联网瞬息万变,三个月做出来都保不准能被市场接受,或者不被淘汰。

题主还想要一个人,在没有任何支持、创业合作伙伴的前提下独立开发一款app并实现自己的创业之旅?

出来混的认真点,不然怎么对得起“创业”二字呀?

现在我们看一下创业团队的配置吧:

专人专事,需要最低5人,若包括全栈。他们分别对应的开发阶段是:

组建团队是创业最常见的,但是择人又是一件极其困难的事情,尤其是产品经理,让他与你契合,那是可遇不可求,需要时机与运气。

此外团队中的每一个成员都是很重要的,你能在一周内找到?即使找到了,你也不敢用啊。那你会花一个月、甚至两个月去组建团队吗?在开发三四个月,那你们这将近一年怎么办?时间、金钱...各种压力纷沓而至。创业不易,且行且珍惜。

除却时间成本、还有场地、工资以及后期的运营成本。如果找到一个大咖,但是月薪过万,初创的你能负担几个月的花销呢?

那遇到这个情况应该怎么办呢?


可能大家会不自觉的想到众包:

众包模式是把传统由企业内部员工承担的工作,通过互联网以自由自愿的形式转交给企业外部的大众群体来完成的一种组织模式。在这一过程中,企业只需要为贡献者支付少量报酬。


就如同上面忠告大家的创业不能单打独斗,众包模式也是一种整合利用资源的好手段。它可以填补我们自身的缺欠,外包是把不具有核心竞争力的业务转移出去,而通过众包可以加强公司的核心竞争力。我们可以通过众包,用低成本获得最大的成效,相较于普通的公司雇佣,更能加快开发速度。


简单推荐一下此类平台吧,为您创业的路上助力一把:


网站


程序员客栈 互联网远程工作中心 程序员的经纪人

「推荐远程雇佣,也可以发个项目体验一下快速匹配专业BAT级人才」

快码众包 http://www.kuaima.co

英选http://linktion.cn

大鲲 https://pro.lagou.com 「设计师居多」

oschina众包https://zb.oschina.net

码易众包平台http://www.mayigeek.com

SXsofthttp://www.sxsoft.com

人人开发http://rrkf.com

厘米脚印 http://www.limijiaoyin.com

开发邦http://www.kaifabang.com

一早一晚http://yizaoyiwan.com/

远程.work https://yuancheng.work/


好用的工具和服务


Toggle 免费的工作计时器 https://toggl.com/

Focus Timer for Mac 简洁的番茄计时工具https://itunes.apple.com/cn/app/focus-timer/id880565132?mt=12

Trello - 轻量级团队流程协作和列表管理平台 https://trello.com/

Tower - 简单,好用的团队协作工具https://tower.im/

风车 - 简单高效的团队协作工具 https://fengche.co/

worktile -更好的企业协作平台 https://worktile.com/

tita - 企业级的工作计划管理平台 http://www.tita.com/

I Done This - 基于邮件的团队日报工具,小巧实用https://home.idonethis.com/

Coding- 一站式云端开发协作平台 https://coding.net/

零信 - 零负担聊工作 https://pubu.im/

zoom -视频会议和Web会议服务 https://zoom.us/


希望采纳~觉得回答的还不错,就点个赞吧~翠花码字不易,且听且珍惜 :)

今天看了这个题目,真的非常非常非常有感触,因为我自己就是在软件开发外包公司工作,目前为止也已经工作了将近8年的时间,期间遇见各种各样的问题,下面来说说我的经历。为了让大家看的更明白,我将会按照题主的几个问题逐个回答(我想说的太多了,我想几天时间内肯定是回答不完的,所以我决定有时间的时候就来更新一点,咱们慢慢聊)。

题主的第一个问题:一个人如何开发一款 App?,接下来,我不会告诉你一个人如何开发app,我会告诉你,“开发一个APP有多难?”,看完之后你自然就知道了,app这种产品到底是不是一个人可以做出来的!

回答如下:作为一个从业近8年的APP开发人员来说,做个app本身不难,难就难在前期客户方和外包方的沟通和对于需求的梳理和把控,个人觉得只要前期的功能点梳理清楚了,加上这家公司不是个坑壁公司(找个靠谱公司),那么做好一个APP的成功率就已经上升到了90%的可能性。

这个问题里面,我将会拆分进行回答两个问题“如何沟通好需求”和“如何找到靠谱的公司”。那么作为将要做一个app软件的你如何和外包公司沟通好需求呢?我觉得这个是你和外包公司双方的事情,如果你全部指望外包公司替你想到,这个是不可能的事情,其实需求也很好把控,只要说清楚就行,举个栗子来说,比如你要做一个商城,就算你不懂技术,你自己也可以看看其他人的商城是怎么做的,比如你的商城规划是有登陆功能,登陆功能采用那么方式来做(比如常见的登陆功能有联合登陆(微信登陆、微博登陆、QQ登陆)、还有输入用户名密码登录、还有手机号码登陆),你必须想好有哪些登陆方式,因为一般定制开发的项目,你说了外包公司才会做,你不说一般都是不会做进去的,同样的,你说的越细致后期的问题会越少,同样费用也会越多,因为外包公司的价格的评定标准就是根据你的功能来计算的,具体如何计算的,我后面再和你们说。

我在来回答这个问题里面的第二个小问题“如何找到靠谱的公司”。其实我对我的客户一贯的说法就是“一看二查三聊”,这个怎么说呢,所谓“一看”就是你一定不要怕麻烦,既然想做好APP,那么不管你选择的公司在哪个城市,你自己一定要亲自的过去看看这家公司,看看他们到底有多少人,有几个办公室,有几个做技术的,有几个做销售的 ,有几个做运营的。大部分只要你过去看看,你自己心里就有个底了,不是说所有的大公司都靠谱,但是大部分的大公司都会比小的团队会更加的有保障,出了问题他们基本都会给你解决,因为比起开发商的损失来说,开发商的信誉是他们更加看重的东西。“二查”就是从网络上面各种渠道去查查这家公司,看看整个网络媒体对于这家公司的侧面评价如何。“三聊”,这个就比较重要了,多和你的目标的外包公司对接人员聊聊,当你聊了几家外包公司的对接人员之后,你基本上就能感受到他们专业程度的差距了,从中选择一个你认为比较专业的公司即可。

那么说了这么多,你们知道了,开发一个APP真的不难,你只需要做好我上面说的2点,把握好需求和找到一家靠谱的外包公司,即可。是不是很简单? 那么就这样完了吗?项目就能做好就能做成功?当然不是,我还么有说完,今天事情太多了,一会还有一个客户从南京做高铁来我们公司验收他的app开发项目,我是项目负责人,得准备准备了,现在不和你们扯了,有时间再聊。写于2018年1月26日下午五点半。

今天下午事情不是很多,快过年了,过年的年味也越来越浓了,咨询的客户少了,原来着急上线的客户也不着急了,都各自忙各自的了,我也难得清闲,可以好好整理下思绪回答下题主的第二个问题“开发APP需要经历哪些流程”。

第一步:)需求方(也就是你自己),确定了自己的立项之后,一定要多看看竞品公司的app产品,看看他们是怎么做的,有哪些流程,细节做的怎么样,先做到自己的心中大楷有个数,然后再去网上找对应的app开发的外包公司,至于怎么找这个app开发公司,在我1月26号下午的回答中已经说过了。这个环节我姑且称它为“找公司”。

第二步:找到中意的app开发公司之后就和他们开始洽谈项目的细节(在我1月26号下午的回答中也已经说过了),并且一定要把这些细节明确到合同里面,因为如果你的项目是独立无二的,是需要这家app开发公司独立定制和开发的,那么你的需求一定要明确在合同里面,因为软件开发公司最终也只会按照这些合同约定的功能和条款来制作。也一定要明确每个功能的实现方式方法,同一种功能有很多不同的实现方法,就像我文章开头所说过的那样,同为登录,却有用户名密码登录、第三方联合登陆、手机号码登陆等几种不同的方式。如果这些方式开始没有明确,最后外包商又没有做,那肯定就是双方扯皮的事情,下面有张图是我们之前为其他客户做的一个需求分析的原型图,可能和你要做的APP不一样,但是大部分都是这个逻辑,发上来仅供参考。这个环节我姑且称它为“细需求”。

第三步:需求也确定好了,那自然就是合同了,合同也是要注意的事情,有几个点,我认为作为客户的你应该需要知道。

需要注意的A点:如果你的项目案值高于5万元,那么预付款不能高于60%,应该实行分阶段付款,建议的分阶段付款应该为合同签订支付30%,效果图全部确认之后支付30%,安卓端完成测试上线支付20%,苹果端完成测试上线支付20%。

需要注意的B点:就是软件所有权的问题,大部分正规的软件开发公司在合同中都会明确的表达该软件的知识产权是属于他们所有的,如果你作为需求方,你的软件开发完成还需要申请软著等等一系列其他的内容,那么我建议你还是和软件公司协商一下,争取把软件所有权或者知识产权谈成你们双方共同所有。当然你也可以谈成归属你自己所有,但是据我所知,如果这个项目开发完只归属你自己所有,那么你将会付出较多的代价(主要是金钱上面的代价)

需要注意的C点:此项目各阶段双方约定的交付时间以及截点,以及当前截点下双方各自的权利和义务,这个也一定要约束清楚,也是在后期双方责任不明容易出现问题的地方。

需要注意的D点:之前你和外包公司沟通确定的需求文档一定要做为合同的附件添加在合同里面。后期最容易扯皮的就是需求问题了。

这个环节我姑且称它为“定合同”。

第四步:接下来你只需要在不同的环节及时督促外包公司按照合同的约定交付当前应该交付的内容,并且对这个交付给你的内容进行审核即可。

第五步:项目验收

OK,以上五步就是开发一个APP大楷需要经历的流程,不管你是谁,你找哪家外包公司给你做合作,都摆脱不了我上述所说的五大步骤。

未完待续,后续有时间的时候我会继续分享题主提出的其他几个问题。(本段写于2018年1月29月下午)

现在我将要回答题主的第三个问题:“难点都在哪里?在哪出现的?”,其实从我这么多年的经验来说,在软件开发中,假设双方都是靠谱的人和靠谱的公司,那么这个项目是肯定会做好的,也会完美完工的。难点出现在哪里,大部分的难点都出现在外包公司的不负责任和需求方对需求的不理解上面 在我回答这个问题的时候,我想了很多天,应该怎么回答,现在我觉得,如果我以需求方的角度来回答这个问题可能会更好,你们也更加的容易理解(虽然我所在的这家公司做开发已经做了很多年,但是有时仍然也会需要把部分项目做外包,或者项目中的某个技术点做外包,人无完人,公司的技术也是一样,不可能有公司是全能,什么都会,所以这是正常的)。

失败的外包案例一:

1:项目名称:XXXAPP开发双版本

2:项目案值:10万左右

3:项目时间:2017年9月份

4:外包方公司名称:重庆诺XXX科技有限公司

5:大体经过:这家公司我们之前去实地考察过,也有几十个人,只不过注册时间很短(2017年1月份注册,事后证明当时没有考虑这个重要因素确实太大意了!愧疚中···),这次合作的是一款游戏的全新定制开发,上面我也说过,定制开发需要根据需求方的要求从原型图开始,再做UI效果图,给需求方确认之后再开始程序。但是可惜的是这家公司对我们纯忽悠,直接从淘宝上面买了一款类似的游戏源码,在他们的服务器上面安装好之后直接手机截屏了几张图片发给我们,说这是他们单独为我们量身设计的,并且不予修改,在我们多次要求修改的情况下,直接失联(不接电话、不回信息、不给任何回复···)。然后就没有下文了,后来才知道这家公司就是专门骗首付款的。(这个案例可以说是我们最失败最最屈辱的案例,明摆着被人抢了,如果你们也碰到这样的公司,那真的是只能自认倒霉了,我写再多的经验对于这样的公司来说也是无计可施···)

6:得出的经验教训

一定要看外包公司的注册年限,一般注册在5年以上并且你也实地考察过的公司不会太差。

失败的外包案例二:

1:项目名称:XXX功能的A商城系统

2:项目案值:3000元左右

3:项目时间:2012年5月份

4:外包方公司名称:未知

5:大体经过:曾经有过一次,在某宝上面买过一套APP商城的源码,因为当时看了店家的介绍,感觉很不错,很牛的样子,而且价格非常的便宜(现在看来那时候还是年轻啊,事实证明便宜没有好货··· ),于是就很开心的和店家达成了交易并且支付了费用,当代码安装到我自己的服务器之后并且结合后台进行使用的时候我懵B了,总共居然有307个BUG····,你知道这意味着什么吗?意味着这套源码是垃圾中的战斗机,根本无法使用···

后续和店家进行协商,刚开始还积极协助修改,当改了三天之后慢慢的就不行了,到最后就皮掉了,也不理我们了,当然项目肯定是失败了。

6:得出的经验教训

A:你一定要相信“好货不便宜便宜没好货”的道理

B:在某宝购买软件类的源码如果金额过高,还是建议你去对方公司进行实地考察,并且在现场对代码进行审核。

失败的外包案例三:

1:项目名称:某某APP的某个功能的人力资源外包

2:项目案值:3万元左右

3:项目时间:2014年

4:外包方公司名称:非公司,是个人

5:大体经过:当时我所在的软件外包开发公司技术部排单太满,有个项目客户非常着急的要求我们提前2周上线,完全打乱了之前的开发节奏,公司没有办法的情况下,只得将此项目中的某个功能进行人力资源的外包,当时找的是一个在其他软件开发公司任职程序员的童某某,也和对方洽谈好了外包的金额和功能点。刚开始这个小伙还行,随着项目的不断深入,问题越来越多,主要问题是:

A他的时间和我们对接不上,我们白天上班就要对接,他白天要在公司工作,不能做私单,只能晚上对接,晚上对接了又不能搞到太晚,他第二天还要上班。

B要求他使用我们公司的架构和技术框架,但是由于他不熟悉,导致前期对接花费了很多的时间,并且增加了很多的沟通成本

C由于不在一起办公,无法做任何的约束,对他全凭信任,他干事当然也全凭心情了。

最终这次外包也是失败了,我们公司当时只得还是自己做开发,经过和其他客户的协商,抽调了一部分开发人员加急开发,也算是如期如质的在交付了项目

6:得出的经验教训

A:和个人合作真的要谨慎,除非你对他非常的了解。

B:和个人合作一定要找好自己的备选方案,万一项目失败你该怎么做?如何及时调整开发策略。

今天下午事情不是很多,突然想起知乎上面还有这个回答了一半的问题等着我来回答,下午我们就来聊聊题主的“需要哪些人员进行开发?”。

A、APP开发-产品经理,负责分析需求,提需求,整理需求文档,提出低保真设计原型,并协调以下几类人。
专门负责产品管理的职位,负责调查并根据目标用户群的需求,确定开发何种APP,选择何种技术、商业模式等。并推动相应产品的开发组织;还要根据产品的生命周期,协调研发、营销、运营等,确定和组织实施相应的产品策略,以及其他一系列相关的产品管理活动。
B、APP开发-UI组,可分为平面设计和交互设计,负责对产品经理提出的需求设计app高保真原型,设计web页面,或者海报。
UI用户设计基础(UI行业发展及UI设计师职业规划,美术基础,平面设计基础,图形与创意设计,网页设计基础,交互式网站),软件:Photoshop、Illustrator
移动界面设计(图标创意思路与方法,图标的创作设计,主题图标设计,Ios系统Android系统Windows phone系统,UI设计实训课程)
交互类(UCD,交互设计高级技术)
流程设计(界面开发对接,流程管理,移动媒体综合开发实训)
综合项目实训及就业阶段(根据所学内容,选择一种移动平台(IOS/Android/Winphone),软件界面,WUI类型设计,完成初稿设计。
C、APP开发-后端开发人员,接管服务器数据,维护服务器性能,为app前端人员提供接口。
下面我们通过两个场景来说明下app后端的作用:
场景一:
  用户a平时是很喜欢用qq音乐app听歌,他的qq音乐app保存了他平时最喜欢听的歌曲列表。
  如果歌曲列表只保存在手机上,万一,他的手机被盗了,就算他买了台新的手机回来,那歌曲列表也会丢失的啊?
  为了解决这个问题,其中一个办法就是qq音乐app可以把歌曲列表放在远处的一台机器上,当用户a买了新手机后,把放在远处的机器上歌曲列表重新搬回到qq音乐app就行了。
场景二:
  相信很多有都人寄快递的经历吧。
  假设有两个人a和b,当a向b寄一样东西的时候,会叫来快递,把东西寄给b。
  当查看物流时,可以看到类似这样的描述“到达xx中转站”。只有经过中转站,东西才会到达b的手上。
  在app上的情况也差不多。假设app上的a用户需要向b用户发信息,这条信息也需要经过app后端这个中转站,才能到达b用户处。
总结:
  从以上的场景1和场景2,可总结出app后端的两个重要作用:
1). 远程存储数据
2). 消息中转
D、APP开发-前端开发人员,这里分web和app,app分安卓和ios,web的前端也分后台系统和前台系统等,大型公司还有isv和osp。
把UI的设计图按照w3c标准做成html页面,并且用javascript脚本语言实现页面上的前端互动。互动效果包括,弹出层,页签切换,图片滚动,ajax异步互动等。
  高级前端工程师还要承担前端优化的工作,优化的知识就会更多一些,比如文件过期Expires,缓存,异步缓存,js和css以及图片的压缩等。
  前端开发是一项很特殊的工作,前端工程师的工作说得轻松,看似轻巧,但做起来绝对不是那么的简单。在开发过程中涵盖的东西非常宽广,既要从技术的角度来思 考界面的实现,规避技术的死角,又要从用户的角度来思考,怎样才能更好地接受技术呈现的枯燥的数据,更好的呈现信息。简单地说,它的主要职能就将网站的数 据和用户的接受更好地结合在一起,为用户呈现一个友好的数据界面。

E、APP开发-运营团队人员。
初级运营每天做什么?
对于一个刚入门初涉运营的人来讲,所有的脏活、累活,完全不用怀疑,确定、一定、以及肯定都会是你的。
编辑几篇伪原创的文章,开着官微到新浪和腾讯转转微博,每天收集信息准时发布公众号,遇到公司哪个部门出了稿件,你还要注册一堆ID发稿子,若不是这几年玩BBS、贴吧的人比较少,让你捡到了个便宜,如若回到那几年,哪个运营专员不是牛逼轰轰的在主流论坛开着几个大号ID?这叫啥?水军号!
那么中级运营呢?
其实搞运营就和玩游戏一样,入了门到了一定级别就要开始分门派了,当然这是大公司干的事,初创公司、小团队是没有这个门派之分的,吃喝拉撒都要跑,所以我这里还是要根据一定规模的团队来进行分工的。
运营团队大概分成了三大门派:
1)、内容(社区)运营
这个应该是大家见的最多的,微博写段子、论坛回帖子、公众号写文章、做医疗的经常要去发百度知道的贴,当然现在的“互联网公司”还有个新任务,就是到知乎答问题!不管对不对,反正要说的有理有据,让看到的人能够感同身受,觉得好像很有道理的样子,默默地帮助你传播那就对了!
相比初级运营做的事情,内容运营负责人要对结果负责,也就是你不但要制造内容,还要让别人帮你扩散并且传播你的内容,这里对内容运营人的文字功底还是有很高的要求的。所以之前我在的招聘里写过这样一个标准“资深吐槽帝,趣味屌丝男,出口成章,七步成诗,有超前的临时工精神。”
2)、产品(用户)运营
之前有好几个小伙伴搞不清产品运营,在大的定义里,产品运营的本质其实是围绕用户,你会经常看到招聘产品运营的介绍上有着这样一句话“负责XX网站/社区/应用/软件等产品的运营策略制定,提升产品用户基数。”其实就是对产品或用户运营的最佳释义。
你不但要充当在线客服一马当先的在一线整理需求,还要到社区反馈论坛、QQ群内与用户建立互动,了解用户需求,对产品团队进行反馈,你是一个桥,如果你的公司没有“用研”这个岗位,那么你就要干他一切该干的活!分析数据?用户增长值?这都是你该总结并且策划的事儿,当然有的时候你还要充当制造事件的PR。
最苦逼的就是做WEB2.0内容类的产品运营,尤其是产品早期,很多时候你不但要做为一个管理员去回答用户的问题,你还要反过来看着小号给自己问问题,建立X个ID在BBS里优雅的和自己的官方ID聊天,自问自答,想想都觉得醉了。
当然你一定要注意好自己的身份,别搞的官微问问题,用户来答,这不是开玩笑。
3)、市场(商务)运营
这个其实是最好解释的,平时的工作很多都是要靠庞大的人脉积累来完成的。这里的工作无非是两种,要么赤果果的做个销售,优雅的靠近客户在客户面前打广告、卖产品;要么就优雅的从合作共赢品牌曝光出发,与合作伙伴互换资源,与边缘产品建立合作进行产品对接用户共享,这里最初级的可能工作就是换友链,网站友链是两个产品公司一切友好的开端。
市场运营其实是很练嘴皮子的,你要谈客户、你要讲沙龙、你要不断的告诉别人你的产品,从大的方向来讲很多公司的销售都可以放到市场运营里来归类,你要建立很多渠道关系、广告联盟、行业会议、商业圈子,这些都将是你将来发展的舞台。
高级运营做什么?
高级运营一般都是运营总监级别的了,主要的工作就是调配公司整体资源,制定全盘布局规划,建立完整运营方案、规划,引入资源,最终交给初级、中级运营人手里,监督他们把事情落地,你所做的一切只为了一件事,对产品及品牌的结果负责!

(未完待续···)


其他说明:

(虽然,对于这个问题的回答还没有结束,但是最近也收到了不少乎友的共鸣,很多人给我私信,问什么的都有,由于工作比较忙,我很多没有回复,在这里我做个统一的说明,我本人从事APP开发也已经8年有余,如果你们想做app开发开发或者在app开发的过程中有任何的问题都可以私信给我,目前以下几类问题的私信我会回复你们。

1:自己想做个app的开发,但是不知道该如何下手,不知道如何规划,你可以找我。

2:在学习app开发的过程中遇到了无法解决的问题,你可以把详细情况描述一下,给我私信,我有时间的时候会回复你。

3:找软件外包公司在做app开发的过程中碰到了难以解决的问题,可以找我,我可以给你对应的解决方案。)

根据问题,可以归纳以下重点:(可略过)

前提是”我“并非行家,或者我懂其中一行(可以在知乎寻找以下每个重点的回答)
1、互联网 「从0到1 创业 」
2、开发app的流程 「项目开发流程、注意事项」
3、学习成本、经验 「成本」
4、团队、资源「费用成本、时间成本、人员成本」
5、自营团队和云端组队模式
6、靠谱众包平台,快速低成本创业


我们先来看一看开发一款App有哪些环节?


1、我们需要有一个好的idea、因为感觉对了就成功了一半。


真正有长久生命力的产品是从用户的需求出发,满足用户一个未能得以解决的需求、以及是否有一个清晰的商业盈利模式。
这个阶段在开发项目中,又叫做需求梳理的阶段。这个时候是将自己的想法变成开发语言的阶段。要记住在这行,想法是不能直接实现的,可以直接实现的只能是需求。
所以光有了创业想法是不够的,我们需要一份完整的需求清单,这样才能使开发进入一个闭环。从想法到需求的一个需求梳理的过程也是真正了解自己想要做什么的过程。需求越完整细致确定,越便于开发~
需求梳理过后需要拿出三样东西:项目需求说明文档、产品结构图、模块功能梳理清单
具体包含如下:

  • A、项目需求说明文档
  • B、产品结构图以及核心业务流程图
  • C、模块功能梳理清单

这是重点核心,必须细致到所有功能点。 细致到每一个功能的最细节,分哪几块,一级二级三级等菜单。(可参考示例)

2、需求梳理过后进入原型的设计阶段
原型设计阶段需要我们画出产品的基本草图,其中包括:产品原型页面交互/产品功能说明文档

  • 产品结构脑图/表格
  • 核心业务流程 ——用户核心任务流程,核心功能状态转化流程图
  • 原型线框图,包括前端,后端——线框图,静态说明,交互说明

具体输出产品原型我们作为行业规则的制定者,已设置了规范的产品原型交付标准说明(示例)

3、前期是很重要的阶段,是寻找核心功能。以及确保后期正常开发关键的步骤,这个阶段,自己可以做,但是要逻辑细致,走得通。
此外,产品经理也是负责梳理需求和原型流程的:他们是能将你好的想法变成研发能懂得逻辑图。
切记不能贪多,想到什么功能就去完善,这样不利于初期创业。1.0的产品,不需要做太多大而全的功能。我们应该关注在最核心以及跑通主干即可。这样可以赢得时间,能去更多的思考运营和拿更多的精力成本去推广,即使失败也可以快速回血。

4、至于ui、前后端开发、以及测试没什么太大说的。一个人重视协调性,以及时间把控上。一个团队就在于配合协作了。
这里建议先做个好用的产品后再做个更美的应用。在开发阶段,需要考虑到准备东西的时间成本:例如注册域名、买服务器、备案、苹果开发者账号、安卓市场开发者账号、短信服务等等。不然中途会影响工期,影响上线,比如网站备案都得1个多月...还有测试阶段等等都是很细小的问题但是也很重要,需要详细了解的可以私信我。
创业开发一款app,基本的流程就是以上想法—需求—原型—UI设计—前后端开发—测试。在1.0后,就可以优化用户体验、迭代开发创新改进功能了。


以上介绍了搞APP的实现路径和环节,那么由谁来实现,就是接下来要讲的了。切题了没?
这个时候,需要点题一下:「创业搞 App」

既然是创业,就必然考虑互联网这个大环境以及新出现的种种应用和技术,在高速发展的如今,你的一个好的idea随时都会被其他人赶超,别提你还自己一个人,去完成那么多不擅长的领域和事情了。


还记得上面说开发一款1.0App流程吗?一个有产品经理、项目经理、设计、前后端、测试的专业团队再快也要在三个月内上线完毕(在需求、原型不怎么更改的情况下)。想一想,互联网瞬息万变,三个月做出来都保不准能被市场接受,或者不被淘汰。

题主还想要一个人,在没有任何支持、创业合作伙伴的前提下独立开发一款app并实现自己的创业之旅?出来混的认真点,不然怎么对得起“创业”二字呀?

现在我们看一下创业团队的配置吧:

专人专事,需要最低5人,若包括全栈。他们分别对应的开发阶段是:

组建团队是创业最常见的,但是择人又是一件极其困难的事情,尤其是产品经理,让他与你契合,那是可遇不可求,需要时机与运气。


此外团队中的每一个成员都是很重要的,你能在一周内找到?即使找到了,你也不敢用啊。那你会花一个月、甚至两个月去组建团队吗?在开发三四个月,那你们这将近一年怎么办?时间、金钱...各种压力纷沓而至。创业不易,且行且珍惜。

除却时间成本、还有场地、工资以及后期的运营成本。如果找到一个大咖,但是月薪过万,初创的你能负担几个月的花销呢?

那遇到这个情况应该怎么办呢?

可能大家会不自觉的想到众包:

众包模式是把传统由企业内部员工承担的工作,通过互联网以自由自愿的形式转交给企业外部的大众群体来完成的一种组织模式。在这一过程中,企业只需要为贡献者支付少量报酬。

就如同上面忠告大家的创业不能单打独斗,众包模式也是一种整合利用资源的好手段。它可以填补我们自身的缺欠,外包是把不具有核心竞争力的业务转移出去,而通过众包可以加强公司的核心竞争力。我们可以通过众包,用低成本获得最大的成效,相较于普通的公司雇佣,更能加快开发速度。


简单推荐一下此类平台吧,为您创业的路上助力一把:


首先推荐自己:最靠谱


程序员客栈 互联网远程工作中心 程序员的经纪人
「推荐远程雇佣,也可以发个项目体验一下快速匹配专业BAT级人才」

英选http://linktion.cn
大鲲 https://pro.lagou.com 「设计师居多」
oschina众包https://zb.oschina.net
码易众包平台http://www.mayigeek.com
SXsofthttp://www.sxsoft.com
人人开发http://rrkf.com
厘米脚印 http://www.limijiaoyin.com
开发邦http://www.kaifabang.com
一早一晚http://yizaoyiwan.com/
远程.work https://yuancheng.work/

好用的工具和服务

Toggle 免费的工作计时器 https://toggl.com/
Focus Timer for Mac 简洁的番茄计时工具https://itunes.apple.com/cn/app/focus-timer/id880565132?mt=12
Trello - 轻量级团队流程协作和列表管理平台 https://trello.com/
Tower - 简单,好用的团队协作工具https://tower.im/
风车 - 简单高效的团队协作工具 https://fengche.co/
worktile -更好的企业协作平台 https://worktile.com/
tita - 企业级的工作计划管理平台 http://www.tita.com/
I Done This - 基于邮件的团队日报工具,小巧实用https://home.idonethis.com/
Coding- 一站式云端开发协作平台 https://coding.net/
零信 - 零负担聊工作 https://pubu.im/
zoom -视频会议和Web会议服务 https://zoom.us/

觉得回答的还不错,就点个赞吧~


程序员客栈-领先的中高仿程序员自由工作平台

来了。手把手教你做一个吧。

前言

从零开始,手把手带你实现一个「专注睡前的 APP」。睡觉之前如果能有一个 APP,能让我们写一写这一天的见闻或者心得,同时又能看一会段子、瞄一会好看的妹子,放松一下疲惫的身心那该多好,这也是我完成这个 APP 的原因。APP 的全部代码我已经分享到 Github 上了,需要的直接 点击这里,如果喜欢的话,麻烦给个赞,谢谢啦。

在开始写正文之前,先来一波效果的展示,看看五天过后我们能实现怎样的效果


本次的教程分为 5 天,内容分别为:

  • Day one,准备
  • 功能需求
  • 可行性分析
  • Day two,UI 及公共类的封装
    • 界面的设计及实现
    • 公共类的实现
  • Day three,日记模块
    • 日记的展示
    • 悬浮菜单的实现
    • 日记增删改的实现
  • Day four,妹子模块
    • 图片的获取
    • 图片的展示
    • 详情页面的展示
  • Day five,段子模块
    • 段子数据的获取
    • 段子的显示

Day one

俗话说,万事开头难,在开始敲代码之前,先让我们来做一些必要的准备,这样才能事半功倍嘛!

一、功能需求

既然要做一个 APP,那我们首先还是得把 APP 的功能都列出来,有了方向才能更好的努力,因为我想做的是一个专门给睡觉前用的 APP,所以我觉得应该有以下的这些功能

  • 1、日记的增删改
  • 2、显示一些有趣好玩的段子
  • 3、瀑布流展示漂亮的妹子
  • 4、保存日记的内容以及缓存妹子图片

虽然说需求不多,但是却要运用到网络、数据存储、图片缓存、UI 设计等内容,相信整个 APP 完成下来,必定能巩固我们的 Android 基础。

二、可行性分析

我们这个 APP 主要有三个模块,日记模块主要是运用到了数据库的知识,难度不大。但是,段子模块和妹子模块的数据要从哪来,这便是要好好考虑的了。幸好现在是个开源的时代,很多的数据,网上已经开源出来了。

我们先来看一下数据的内容

group: {
        text: "教授在河边,常常看到两只龟,缩着一动不动。有天忍不住好奇,问一农      
        民:这两只乌龟在干吗?农民说:他们在pk。教授不解地问:动都没动过p什么    
        k。老农说:他们在比谁寿命长。教授说:可是壳上有甲骨文的那只,早就死了埃
        这时,另一只猛然探出头来骂到:md,死了也不吭一声!有甲骨文的那只也伸
        出头来:“专家说啥你信啥1",

        user: {
              user_id: 4669064575,

              name: "馒头啊",

              avatar_url: "http://p3.pstatp.com/medium/6237/7969345239",
},

          content: "教授在河边,常常看到两只龟,缩着一动不动。有天忍不住好奇,问        
           一农民:这两只乌龟在干吗?农民说:他们在pk。教授不解地问:动都没动过
           p什么k。老农说:他们在比谁寿命长。教授说:可是壳上有甲骨文的那只,早
           就死了埃这时,另一只猛然探出头来骂到:md,死了也不吭一声!有甲骨文
           的那只也伸出头来:“专家说啥你信啥1",
...  
}


{
          id: "56cc6d1d421aa95caa7076df",

          type: "福利",

          url: "http://ww1.sinaimg.cn/large/7a8aed7bgw1esxxi1vbq0j20qo0hstcu.jpg",

          used: true,

          who: "张涵宇"

}

上面那两段代码分别是段子和妹子模块的 json 类型的数据,我已经将一些没用的字段去掉了。剩下的都是我们想要的数据。可以看到段子数据中,有着段子的内容,以及发布者的头像和名字。而妹子数据中有着图片的 url、id、以及图片的类型。相信有了这么丰富的数据,我们想要完成这个 APP 也是有底气了。

Day two

一、界面的设计及实现

既然我们想要完成一个好看的 APP,那么好看的界面便是必不可少的,这里我强烈推荐 APP 界面的设计必须尽量遵从 Google 提出的 Material Design,在这个推荐一个能够让我们实现 Material Design 变得更加简单的网站 material design palette,我这个 APP 的配色就是用这个网站完成的,贴几张图片,让你感受一下它的强大。

借助这个网站便能让我们完成 APP 的配色以及图标的收集,为下一步功能的实现,先打好了基础,至于界面的设计就仁者见仁智者见智了,篇幅有限,我就不多讲了。

APP 的最终设计效果如下:

二、公共类的实现

因为这个项目有三个模块,有一些东西其实是可以通用的,如果我们先把这些能够通用的东西,封装起来,供给所有的模块调用的话,相信会大大提高我们的开发效率。

1、网络工具类的封装

这个 APP 中,很多地方都要用到网络请求,因此也就很有必要将网络请求封装起来,因为这个 APP 的规模比较小,因此我选择了 Volley 这个网络框架作为我们网络请求库,把网络请求封装起来,哪个地方需要,调用一下就行了。对于网络请求,我觉得每个程序员都该懂点 HTTP,这里附上一篇有关 HTTP 的文章程序员都该懂点 HTTP。

先让我们来写个将网络请求进行回调的接口

public interface VolleyResponseCallback {
    void onSuccess(String response);
    void onError(VolleyError error);
}

然后将网络请求封装起来

public class VolleyHelper {

    /**
     * 用于发送 Get 请求的封装方法
     *
     * @param context Activity 的实例
     * @param url 请求的地址
     * @param callback 用于网络回调的接口
     */
    public static void sendHttpGet(Context context, String url, final VolleyResponseCallback callback){
        RequestQueue requestQueue = Volley.newRequestQueue(context);
        StringRequest stringRequest = new StringRequest(url
                , new Response.Listener() {
            @Override
            public void onResponse(String s) {
                callback.onSuccess(s);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                callback.onError(error);
            }
        });
        requestQueue.add(stringRequest);
    }

}

2、Json 解析的帮助类

因为我们这个 APP 中,获取到的数据都是 Json 格式的,因此也就有必要将有关的 Json 解析封装成一个工具类,传入一个 String 类型的数据,直接得到数据实体类的 List。

public class CommonParser {

    /**
     * 用来解析列表性的JSON数据
     * 如:
     * {"success":true,"fileList":[{"filename":"文件名1","fileSize":"文件大小1"},
     * {"filename":"文件名2","fileSize":"文件大小2"}]}
     *
     * @param result     网络返回来的JSON数据   比如:上面的整串数据
     * @param successKey 判断网络是否成功的字段  比如:上面的success字段
     * @param arrKey     列表的字段            比如:上面的fileList字段
     * @param clazz      需要解析成的Bean类型
     * @param         需要解析成的Bean类型
     * @return
     */
    public static  List parseForList(String result, String successKey, String arrKey, Class clazz) {
        List list = new ArrayList<>();
        JSONObject rootJsonObject = null;
        try {
            rootJsonObject = new JSONObject(result);
            if (rootJsonObject.getBoolean(successKey)) {
                JSONArray rootJsonArray = rootJsonObject.getJSONArray(arrKey);
                Gson g = new Gson();
                for (int i = 0; i < rootJsonArray.length(); i++) {
                    T t = g.fromJson(rootJsonArray.getJSONObject(i).toString(), clazz);
                    list.add(t);
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }
}

3、HomeActivity(主页面)的封装

主页面我用的是 TabLayout + ViewPager + Fragment,也是现在主流 APP 主页面的显示方式。主界面底部是我们三个模块的图标和名称,通过左右滑动能实现界面的跳转。

底部图标的实体类 CommonTabBean

public class CommonTabBean implements CustomTabEntity{

    private int selectedIcon;
    private int unselectedIcon;
    private String title;

    public CommonTabBean(String title){
        this.title = title;
    }

    public CommonTabBean(String title, int selectedIcon, int unselectedIcon) {
        this.title = title;
        this.selectedIcon = selectedIcon;
        this.unselectedIcon = unselectedIcon;
    }

    @Override
    public String getTabTitle() {
        return title;
    }

    @Override
    public int getTabSelectedIcon() {
        return selectedIcon;
    }

    @Override
    public int getTabUnselectedIcon() {
        return unselectedIcon;
    }
}

ViewPager + Fragment 通用的 Adapter

public class CommonPagerAdapter extends FragmentPagerAdapter {

    private List mFragments;

    public CommonPagerAdapter(FragmentManager fragmentManager, List mFragments){
        super(fragmentManager);
        this.mFragments = mFragments;
    }

    @Override
    public Fragment getItem(int position) {
        return mFragments.get(position);
    }

    @Override
    public int getCount() {
        return mFragments.size();
    }
}

Day three

关于日记模块的实现,其实我是复用了以前写过的一个日记 APP,具体的思路和做法,可以参考我的这篇文章 Android 一款十分简洁、优雅的日记 APP

Day four

一、图片的获取

1、根据返回的数据来编写图片的实体类

public class MeiziBean {

    @SerializedName("_id")
    private String id;
    @SerializedName("url")
    private String imageUrl;
    @SerializedName("who")
    private String who;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getImageUrl() {
        return imageUrl;
    }

    public MeiziBean(String imageUrl){
        this.imageUrl = imageUrl;
    }
}

2、图片的展示

可以看到我是用瀑布流的方式来实现图片的展示,效果还不错,但其实实现起来也是很简单的

先写个图片的布局作为 RecyclerView 的 Item



                

可以看到我在 ImageView 的外面加了一个 CardView,这个一种卡片式布局,能让图片看起来就像一张卡片一样,相当的优雅、美观。

接着编写 Adapter,将数据和界面进行绑定

public class MeiziAdapter extends RecyclerView.Adapter {

    private List mMeiziBeanList;
    private Fragment mFragment;

    public MeiziAdapter(List mMeiziBeanList, Fragment mFragment){
        this.mMeiziBeanList = mMeiziBeanList;
        this.mFragment = mFragment;
    }

    @Override
    public MeiziViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_meizi, null);
        return new MeiziViewHolder(view);
    }

    @Override
    public void onBindViewHolder(MeiziViewHolder holder, final int position) {

        Glide.with(mFragment)
                .load(mMeiziBeanList.get(position).getImageUrl())
                .fitCenter()
                .dontAnimate()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(holder.mIvMeizi);

        holder.mIvMeizi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ArrayList resultList = new ArrayList();
                for (MeiziBean meiziBean : mMeiziBeanList) {
                    resultList.add(meiziBean.getImageUrl());
                }
                DetailActivity.startActivity(mFragment.getActivity(), resultList, position);

            }
        });

    }

    @Override
    public int getItemCount() {
        if(mMeiziBeanList.size() > 0){
            return mMeiziBeanList.size();
        }
        return 0;
    }

    public static class MeiziViewHolder extends RecyclerView.ViewHolder{

        ImageView mIvMeizi;

        public MeiziViewHolder(View itemView) {
            super(itemView);
            mIvMeizi = (ImageView) itemView.findViewById(R.id.item_iv_meizi);
        }
    }
}

最后在 Fragment 进行数据的获取,以及布局的初始化就行了

public class MeiziFragment extends Fragment {

    ......

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_meizi, container, false);
        ButterKnife.bind(this, view);
        initView();
        refreshMeizi();
        return view;
    }

    /**
     * 刷新当前界面
     */
    private void refreshMeizi() {
        mRefresh.setColorSchemeResources(R.color.colorPrimary);
        mRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                initView();
                mRefresh.setRefreshing(false);
            }
        });
    }

    private void initView() {
        VolleyHelper.sendHttpGet(getActivity(), MeiziApi.getMeiziApi(), new VolleyResponseCallback() {
            @Override
            public void onSuccess(String s) {
                response = s;
                meiziBeanList = GsonHelper.getMeiziBean(response);
                mRvShowMeizi.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
                Collections.shuffle(meiziBeanList);
                mRvShowMeizi.setAdapter(new MeiziAdapter(meiziBeanList, MeiziFragment.this));
            }

            @Override
            public void onError(VolleyError error) {
                Logger.d(error);
            }
        });
    }

3、详情页面的展示

干巴巴的,整个模块只能显示妹子的图片怎么行呢!!!怎么着也得能查看大图,根据手势放大缩小,以及浏览下一张图片才行嘛,说干就干。

因为图片需要有根据手势来放大缩小的功能,因此我便想到了 PhotoView,这是网上一个大神写的,继承自 ImageView 的一个自定义控件。图片加载我用的是

Glide,如果没了解过这个库的,强烈推荐,一行代码就能搞定图片加载,你确定不研究一下。

public class DetailFragment extends Fragment {

    public static DetailFragment newInstance(String imageUrl) {
        DetailFragment fragment = new DetailFragment();
        Bundle bundle = new Bundle();
        bundle.putString(IMAGE_URL, imageUrl);
        fragment.setArguments(bundle);
        return fragment;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_detail, container, false);
        ButterKnife.bind(this, view);
        Bundle bundle = getArguments();
        String imageUrl = bundle.getString(IMAGE_URL);
        Glide.with(this).load(imageUrl).into(mPvShowPhoto);
        mPvShowPhoto.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {
            @Override
            public void onPhotoTap(View view, float v, float v1) {
                getActivity().finish();
            }

            @Override
            public void onOutsidePhotoTap() {

            }
        });
        return view;
    }
}

Day five

一、段子数据的获取

段子数据的获取其实跟妹子模块的方法基本一样

先编写实体类

public class DuanziBean {

    @SerializedName("group")
    private GroupBean groupBean;
    private String type;

    public GroupBean getGroupBean() {
        return groupBean;
    }

    public void setGroupBean(GroupBean groupBean) {
        this.groupBean = groupBean;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

}
public class GroupBean {

    private String text;
    private long id;
    private UserBean user;

    public String getText() {
        return text;
    }

    public long getId() {
        return id;
    }

    public UserBean getUser() {
        return user;
    }

    public static class UserBean {

        private long user_id;
        private String name;
        private String avatar_url;

        public String getName() {
            return name;
        }

        public String getAvatar_url() {
            return avatar_url;
        }

    }
}

写好实体类之后,使用我们之前已经封装好的网络请求工具以及解析工具,便能将返回的数据,解析成一个包含段子实体类的 List。

二、段子的显示

老规矩,先写个 RecyclerView 的 Item



    

        

        

    

    
    

然后编写将数据和界面进行绑定的 Adapter

public class DuanziAdapter extends RecyclerView.Adapter{

    private Fragment mFragment;
    private List mDuanziBeanList;

    public DuanziAdapter(Fragment fragment, List duanziBeanList){
        this.mFragment = fragment;
        this.mDuanziBeanList = duanziBeanList;
    }

    @Override
    public DuanziViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_duanzi, null);
        return new DuanziViewHolder(view);
    }

    @Override
    public void onBindViewHolder(DuanziViewHolder holder, int position) {
        try {
            DuanziBean duanziBean = mDuanziBeanList.get(position);
            Glide.with(mFragment).load(duanziBean.getGroupBean().getUser().getAvatar_url()).into(holder.mCivAvatar);
            holder.mTvContent.setText(duanziBean.getGroupBean().getText());
            holder.mTvAuthor.setText(duanziBean.getGroupBean().getUser().getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public int getItemCount() {
        return mDuanziBeanList.size();
    }

    public static class DuanziViewHolder extends RecyclerView.ViewHolder{

        private CircleImageView mCivAvatar;
        private TextView mTvAuthor;
        private TextView mTvContent;

        public DuanziViewHolder(View itemView) {
            super(itemView);
            mCivAvatar = (CircleImageView) itemView.findViewById(R.id.duanzi_civ_avatar);
            mTvAuthor = (TextView) itemView.findViewById(R.id.duanzi_tv_author);
            mTvContent = (TextView) itemView.findViewById(R.id.duanzi_tv_content);
        }
    }

}

最后段子页面中进行数据和获取以及界面的初始化

public class DuanziFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_duanzi, container, false);
        ButterKnife.bind(this, view);
        initView();
        initRefresh();
        return view;
    }

    private void initRefresh() {
        mRefresh.setColorSchemeResources(R.color.colorPrimary);
        mRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                initView();
                mRefresh.setRefreshing(false);
            }
        });
    }

    private void initView() {
        VolleyHelper.sendHttpGet(getActivity(), DuanziApi.GET_DUANZI, new VolleyResponseCallback() {
            @Override
            public void onSuccess(String response) {
                List mDuanziBeanList = GsonHelper.getDuanziBeanList(response);
                mDuanziBeanList.remove(3);
                mRvShowDuanzi.setLayoutManager(new LinearLayoutManager(getActivity()));
                mRvShowDuanzi.setAdapter(new DuanziAdapter(DuanziFragment.this, mDuanziBeanList));
            }

            @Override
            public void onError(VolleyError error) {
                Logger.d(error);
            }
        });
    }

}

作者:developerHaoz

来源:慕课网

本文原创发布于慕课网 ,转载请注明出处,谢谢合作

责任编辑:
热门阅读排行
© 16货源网 1064879863