从c++到java+android


我一直用c/c++做开发,直到2016年都没有想过会有一天,强迫自己去学习java+android开发,但是,自己的房子装修完成后,打算搞一套家用文件服务器,用做家庭影院和文件备份,一开始想直接买NAS的,但是2盘位以上的NAS价格也太离谱了,而且性能差,操作系统用的不知道是Linux还是BSD UNIX,这要是底层出个漏洞,比如UPNP远程访问漏洞什么的,根本不会及时修复,而且它的应用端整个一全家桶,对我这样对家庭数据安全,对程序简洁要求高的用户,完全不及格。对比了 SMB NFS FTP HTTP各种协议后,决定采用windows平台,自己开发一套基于FTP的家庭影院和文件备份系统,最开始,因为windows平台的ftp实现已经很成熟,想找点开源代码,去掉无用的功能,做个简单安全的ftp服务内核,结果除了庞大的Filezilla等跨平台软件,其他能下到的代码,不是unicode编译通不过,要么是采用异步实现,不支持utf-8,修改这些代码的时间,足够我从头开发一套了,废话到这里,windows平台下的服务器软件,客户端点播软件全部实现,下载用浏览器或者免费的 FTP客户端都可以,播放可以用vlc,mplayer等支持流播放的第三方软件,很完美,但是移动端就比较麻烦了,尼玛,我没做过移动平台的开发啊,根本不懂java.

找人开发吧,这后续升级什么的无底洞,终归还是要自己懂才可以,于是硬着头皮准备学习移动平台的开发,按理说,ios因为支持object-c开发,是比较适合我们这些学c++的,但是,但是尼玛的,我没有苹果手机,没有苹果笔记本,没有苹果开发者账户啊...... 我家都是android机器啊。 为了家里没有的硬件,花几万去买一套做开发,开发完了家里都要换水果,这代价太大。因此还是加点难度,学习java + android吧,我就这么下水了。

下了电子书,可没有感觉有没有,书非借不能读也,这话很有道理,于是跑图书馆,找了本java入门的大块头开读,打死你都不信,一共5个半小时,我把整本大块头的java入门给看完看懂了,除了一些有些偏门的东西没搞明白,基本看懂了。 5个半小时,还有比我快的吗? 这整个就是c++的子集,去掉指针和内存操作,去掉多重继承等,就是一个java。

看懂了java还是远远不够,android开发,我连用什么开发工具都没搞清楚,搜了搜,好像全世界都在用android studio,然后搜索的结果还提示我这东西会被墙,要开vpn什么的,可是问题是,我根本没用什么vpn,直接用浏览器就能下了,可下完了吓我一跳,尼玛啊,我下的是个接近2G的安装文件,不能不佩服google的CDN配置,当然也许是什么云,反正在GOOGLE被墙的情况下,我完整下到了as,根本没有遇到网络上个各种问题,很轻松就下完了,安装什么的就不说了。打开android studio,我了个去啊,老子i7 + 4g内存的机器,除了没有上ssd,竟然好半天才打开界面,visual studio那种超级恐龙都没这么长的载入时间啊。然后创建虚拟机,要崩溃啊,快2个小时,这都什么废材啊,期间一度怀疑系统挂了,可是打开管理,发现一直在跑,泪崩。

有了开发工具,新建一个最简单的项目,还是一头雾水,动不动就联网更新gradle, gradle是什么鬼啊,然后,然后呢,居然没有像visual stuio那种直接在界面上布局的,要自己在对应的xml文件里做布局,看了半天也没高清楚as项目的布局结构,然后整整一个 星期都在研究这个android studio的项目构成和布局,结合网上能找到的小项目,不断修改测试,折腾了10来天,基本有个条条框框了,这android java开发就象搭积木,最基本的积木系统已经给你提供了 ,你 import就可以,想c/c++那样关注性能,从底层开发,门都没有。然后有些系统没提供的积木,我们可以找第三方实现,例如 apache,然后呢, 这个java很奇怪,你声明了一个 局部积木,它是不会自动初始化的 【构建】,需要你new或者通过赋值,才变成具体对象,否则会抛异常,我在这里栽了个大坑,一直用c++思维来测试java,然后被搞得七荤八素。 还有个奇怪的东东,垃圾是 系统自动处理的,activity会在看不到的时候,所有对象可能被系统自动给destroy释放回收了,这真是太难想象了,老子想在后台运行,你给老子自动关闭,不抓狂才怪了,但是移动平台就是这样,所以要换思路,每次create都应该当作全新的 开始,跟往事干杯。还有android studio 创造了一大堆的新单词,看的我云里雾里,你就不能学学visual studio吗。

光写hello world是不会进步的,还是直接上吧,网上下了不知道谁写的FTP客户端,想导入android studio,尼玛,坑爹哦,导入了无数次,编译都是某些库不存在,看看 别人的评论,都是用eclipse,说好用 ,可为什么,项目可以导入,库无法导入?版本 太低?然后网上下了 最新版本,还是不行,需要自己手动添加LIB,而不是主动导入。 折腾了半天,突然发现,原来项目,库是在 lib下,而as是默认libs,是不是这原因,加个s,东方红,太阳升,项目成功导入并编译通过,可还是不放心,人家的 代码,万一这库里放点自己的味精,那就把我害惨了,因此还是下了官方的LIB,折腾了一点时间把它给替换了。

作者也真够诚实的,说写的代码没有在机器上测试,只是估计没问题。尼玛,能没问题吗,一堆问题,没有端口,目录不会切换,乱码...... 好在咱家的ftp服务器是自己写的,因此log了所有从手机端发送的数据和错误,很快就定位到错误所在,接下来就很简单了 ,根据服务器端的日志,调整加密方法,获取方法,调整编码格式。。。。。。

2个星期后,移动端的雏形完成,然后再移动端,被用户选择流播放器给整死了 ,由于系统自带的播放器不支持ftp播放,我们需要第三方播放器支持,在论坛发了帖子,可回答和网络上基本相同,问题是 相同的代码我这里就是不行,需要一个intent + chooser,  intent.setdata,intent.settype,intent.setdataandtype, 我承认我用c++的思维来认识这几个函数的 ,以为是并列的,实际是覆盖,因此测试了半天,不是不会出选择框,就是无法传递url, 直到今天在人行道前停车给老太太让行,才突然醒悟到,这会不会和网上代码写的 不同,方法是相互覆盖的,一测试,果然,至此,我的移动平台开发顺利毕业。

前前后后搞了接近一个月,移动平台这么点东西,代价太大了,了解也不深,但是至少目前,我对android平台的java搭积木方式开发比较反感的,这样的代码,性能无论如何好不到哪里去,所以只能靠堆硬件啊,说实话,我很不喜欢这样的平台,以后也不想投入太多的精力到android,这个平台的积木一直在更新,甚至是布局和运行框架几个版本也不同,学习成本太高,除了大公司,我觉得个人还是别太投入了 ,我相信有一天,会有一个支持native模式运行的移动平台崛起。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值