扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
如果你已经确定了学习Android的目标,那么,应该提前做好哪些工作、先打下哪些基础呢?
公司专注于为企业提供成都网站设计、成都做网站、微信公众号开发、购物商城网站建设,微信平台小程序开发,软件定制网站等一站式互联网企业服务。凭借多年丰富的经验,我们会仔细了解各客户的需求而做出多方面的分析、设计、整合,为客户设计出具风格及创意性的商业解决方案,创新互联公司更提供一系列网站制作和网站推广的服务。
首先,你最好先熟悉一门编程语言,现在大学里面和计算机相关的专业甚至理工类专业一般都会开设C语言课程,只是很多同学在大学期间并没有好好学习,如果对它掌握的不太好或者很久没用了,建议先从将其好好复习一下,将其基本的语法再好好回顾一下,最好能搭建一个环境来运行、调试它。如果没有学过,不妨也提前学习一下,可以参考清华大学出版社出版的谭浩强老师的《C语言程序设计》,推荐这本书的原因,一是它已经经过了多年的考验,应该说还是比较严谨的;其次就是大部分的高校所开设的C语言使用的教材都是用它作为教材,因此无论是购买还是借阅,都容易找到。另外,华清远见网站上也有一些这方面的教学视频,可以结合来看。
其次,如果你后续有志于游戏方面的开发,你最好具备一定的数据结构和算法基础知识。这一点是我在华清远见的讲台上,给学员们坚持强调的。虽然现代的高级编程语言中,其类库中已经帮我们实现了大部分的数据结构,一般情况下,我们直接使用即可。但如果你能对其原理有所了解,当你需要在这些数据结构和算法中间的时候,你可以能更加的清楚到底应该选择那个数据结构或者算法。另外,在图形图像处理上面,线性代数的作用也非常重要,如果能掌握一点这方面的基础知识,无疑也会在后续的学习中如虎添翼。举个例子,在Android中,有一个用于图形变换的类Matrix,用起来稍有点难。其实它的理论基础就是线性代数中的矩阵,如果你了解矩阵的基本算法,这个类的使用可以说就易如反掌了。
第三,因为Android应用的开发语言用的是Java语言,并且在Android中也用到了Java核心类库的大量的类,因此,在学习Android开发之前,可以先把Java基本语法和Java SE的基础类库好好学习一下,例如:Java中的IO、网络、线程、List、Map、Tree等数据结构。现在的大学里也有不少的院系开设了Java课程,教材和图书也非常丰富,如果你所在的院系没有开设,也可以从其他开设了这个专业的院系同学那里借阅一下,并认真完成他们所布置的作业,争取自己能动手编写出一些简单的Java应用。如果自己购买图书,可以购买《Java核心技术,卷1(原书第8版)》这本图书来学习。
第四,因为在Android中,会用到数据库来存储数据,因此,也可以提前对数据库知识做相关的储备。在Android所使用的SQLite中,其语法是遵循标准的SQL-92语法的(当然和企业级数据库如Oracle等比较,功能上要弱很多),有条件的话,最好也能安装一个数据库来进行实际的操作。从易用性和资料完备性来说,建议大家使用Microsoft SQL Server或者MySQL就可以了。它们都是我们学习数据库的好平台。另外,如果曾经学习过数据库原理或者关系代数,那么,在学习数据库的过程中,也可以再好好地复习一下这些基础知识,对我们理解数据库大有裨益。
最后,我们结合华清远见3G学院的“3G Android系统开发就业培训班课程体系”来谈谈Android开发的学习方法。
Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大。因此,一个好的学习方法对我们学习Android开发很重要。因此在华清远见的课程体系设计中采取了循序渐进、将大目标分解成多个小目标,逐步达成对Android开发从应用层到底层系统及驱动开发全面掌握的目的。
例如,可以先从Android的应用开发开始,等到对应用掌握的比较熟悉了,开始慢慢阅读一些Android 应用框架层的源代码,然后再渐渐往下去了解Android的JNI、Libraries、Dalvik虚拟机、HAL层、硬件驱动、Linux内核、ARM技术体系架构等,虽然近期Intel宣称要让Intel芯片支持Android系统,但在可预见的时期内,在移动设备上,ARM的优势应该还是不可撼动的。
具体来说,可以先通过在开发板上构建一个自己的Android系统,了解Android系统的整体架构和启动过程,由此先对Android有一个初步的了解;接下来,学习Android的应用开发,在这里可以先学习Android的几个主要组件、UI组件,先对Android应用开发有一个感性认识。在能够熟练搭建用户界面后,再逐渐来丰富应用的功能,例如:加上事件处理,使其能够和用户互动;加上数据存储功能;加上联网功能等等。在学完应用后,在此基础上来学习游戏编程,先了解游戏设计的基本思路,然后开始从小的游戏、小的模块开始做起,到最后能完成一个类似于现在热门的《捕鱼达人》这样的游戏。在掌握了这些应用层级的内容后,可以去了解如何在Android应用中通过JNI去调用C/C++的接口,再往下学习Linux的内核和驱动开发如字符设备驱动、Flash设备驱动、网络设备驱动等等;再在此基础上,去学习Android驱动开发、HAL(硬件抽象层)开发、ARM体系架构和指令等等内容,这样,Android开发的整个体系就都贯穿起来了。
当然,因为时间有限,而底层部分的内容比较庞杂,因此,在真正去做这部分工作之前,我们只需要对其基本原理有所了解,做好相关知识的储备,能够根据老师的指导来完成相关的实验。这样在后续的工作中,就可以方便的往这方面发展,让自己的事业更上一层楼。
有个刷黄金弹头的漏洞,把黄金弹头或者白银弹头赠送给494435737
关闭游戏再进,就会有999个相应的弹头
494435737是捕鱼达人3D源代码
赶快送,修复了就没了!
你如是新手的话,15370027输入这口令就得5元话费,那个礼包代码是by1000,合适所有人,都是这一个代码。解答完毕
如果大型游戏,强烈建议不要使用cocos2d-js
我们目前的几个项目都是cocos2d-js开发的,我打算把这几个项目转egret。有如下几个理由:
1、cocos ide有BUG:断点会崩溃、代码提示很差、内存太高、虚拟机的菜单栏会影响事件(迭代了很多版本,这菜单栏BUG都没修复)
2、studio的工作流在几个引擎中是最差的,而且有BUG。经常和实际表现不一致。而且内存占用大,会崩溃。不能继承(这个问题最严重,不能继承按钮,那么按下缩放等高级功能就很蛋疼)。
3、
架构太差。写点小功能没事,如果想写大型游戏,这套架构会让你抓狂!比如最简单的按钮事件,我必须在事件方法里面加个触摸类型判断。一个很简单的点击,就
多出很多这种相似的代码!4、UI有好几套,然而每一套都有BUG。CCUI的设计也是很糟糕的!同时也是崩溃的罪魁祸首。
5、引擎BUG问题,
很多BUG会让你欲哭无泪,比如坐标会出现undefined。再比如热更新的BUG,XCODE编出的包默认是js而不是jsc,当这个包发布商店就会
出现不能热更新的问题,同时也进不去游戏,卡在了热更新界面。(这个问题导致我们流失了3个月的用户,知道苹果商店通过审核位置),再比如
java/objectc和js的交互,这个都有问题!再比如:ios第三方输入法会导致崩溃!
6、工作流问题,IDE的断点的观察变量很不友好、studio导出的配置很大、studio扩展性很差。在IDE 1.2版本出来之前,我们团队甚至无法断点,只能打印日志来debug。
7、工作效率问题,代码提示先不谈。我实现一个简单的列表都能折腾很久,那ccui的list真是太不好用!除此之外,裁剪、遮罩这些只需要一行的代码,在cocos下面需要无数行!
8、
引擎升级问题:cocos大概一个月1个升级,egret是2周。然而cocos升级会带来大量的新BUG,而且兼容性很差。导致我们现在还用3.0版
本。最蛋疼的是,官方的3.6版本又不能断点了!3.0升级到3.6还会导致布局混乱、九宫失效、崩溃闪退(绝对不是代码问题这个解释了)!基本上
cocos每加个新功能都会带来无数新BUG,老BUG修复量也少,我论坛反馈的问题经常需要迭代2到3个版本才修复,下个版本修复兼职是不可能。而
egret不仅迭代快,BUG修复也勤快!也很少有一些导致产品质量的验证BUG。
9、官方人员态度问题:我在cocos论坛发的BUG反馈,过了7天才有人来回复。地址(从3.0到3.1和3.2的BUG,官方帮忙看下),再看下egret我发的BUG反馈,当时是下班时间,然而第二天一早就回复我了。地址(Egret社区-BUG列表)
10、API问题:cocos经历了3个大版本,官方API文档也有的API,实际尽然是没有的,官方回复是还没加入js绑定。
11、跨平台问题:cocos2d-js经常是HTML5和JSB表现不一致。导致我们现在只能专注JSB而放弃HTML5版本。egret很少有这个问题。
12、
性能问题:先抛开runtime。如果你用了ccui,那么我100%保证你的cocos2d-js的性能会被egret秒杀。再来说下native下面
的性能对比,cocos的人说egret是js写的逻辑,而他们是绑定。那么问题来了,在现在,js的逻辑产生的性能压力一点都不是问题(参考
node.js,能用js写服务器了都)。主要的性能压力其实是在渲染上面,而他们2个都是opengl作为渲染的。如果用了ccui,那么还是被
egret秒杀。那ccui带来的drawCall真是太!!再来谈runtime,egret现在很多浏览器都集成了runtime(可以opengl
渲染代替canvas渲染),而cocos-js只是说在合作,已经慢了一步。
13、产品路线图问题:cocos的几个产品一心在弄3D,egret都已经自己搞了一个IDE了。开发基本的生活cocos都没保障好,就去想和u3d打架!
14、内部问题:cocos估计内部很不和谐,ide据说是1个人在开发,studio是30个人(30个人整出这东西),而且studio是用的.NET搞的,跨平台最呵呵的技术!QT、AIR那些那么多高效率,扩展性强的技术不用,选了个.NET。。。。
---------------------------------------------------------------------------------------------------------------------------------
题
外话:说了那么多cocos的不是,我也曾试着爱过它,我甚至开发了一个和egret
wing一样的UI编辑器,写了个和Flash/Flex一样的API(egret用的这套,这种架构很好用,简单明了)。其中UI编辑器还加上了
unity3d那种绑定脚本的功能。然而因为cocos底层的一些令人发狂的BUG,我最终是放弃了。有egret这个车子在,我还造什么轮子?我打算把
手里头的这套cocos的东西开源。然后去整egret去!
---------------------------------------------------------------------------------------------------------------------------------
再来个题外话:
游戏引擎cocos2d-js和egret 对比
这
个是百度搜索第一的对比,里面说cocos2d的工具比egret多,我不否认,但是能用的基本没有。而egret的工具很稳定。就拿最简单的骨骼动
画,cocos连龙骨都不支持,studio里面的骨骼设计也是坑的不行,egret的骨骼设计工具从界面和实用性都已经完爆studio了!
再来说上面的地址里面的成功产品:捕鱼达人、DOTA传奇、我叫MT那都是cocos2dx写的,和js版本一点关系都没有!请问你有见过网页版的刀塔传奇么?
上面的开发语言对比,大项目来说,ts真的是完爆js!js那不小心就会出错真心不适合大项目,不然微软不会造这个轮子。
上面的参考资料对比,cocos2d-js的文档连参数的注释都没,和c++文档作参考也不行,很多参数是不一致的!而egret在开发工具里面就继承了中文的帮助。
从目前状况看,今年绝对是egret产品井喷的一年,不信走着瞧!cocos真是把我坑惨了!
---------------------------------------------------------------------------------------------------------------------------------
再
次申明,请拿cocos2d-js或者JSB的大作出来,不用拿2dx的东西。说到2dx,你们再去了解下,榜单上,有几个人是没改过引擎源码的,有几个
游戏能随着cocos引擎升级而升级。用studio的又有几个。并不想和王哲斯逼,只是希望你们能正视BUG,提高体验。如果好,我们团队会考虑
cocos技术的,否则只能用egret和unity3d了。我说cocos这么多不是,也是希望他成长,能给开发者带来更多利益,带来更多方便,而不是
各种无厘头的问题,各种蹩脚的手段去开发。还有,我说的这几点,@王哲
你接招,如果我不说出这些BUG,这些问题,那么估计还不一定改。egret同样有个人叫王泽,然而他的理念完全当我们开发者是用户,提高开发体验,这个
很重要的。
需要的工具
jdk:必须的
baksmali:classes.dex反编译为smali格式(文本文件,可修改)
smali:smali格式编译打包为classes.dex
但由于smali格式类似汇编,比较难阅读,所以用dex2jar进行辅助
dex2jar:classes.dex转为jar包
jdgui:jar反编译并阅读
以上工具可以在 下载
好了,顺序就是把apk用zip解开,里面的classes.dex分别用baksmali处理为smali,用dex2jar处理成jar,然后用jdgui看代码,找好java文件中要改的位置后,在smali里找对应的位置修改,改完了用smali再编译为classes.dex,覆盖原来apk里的同名文件,最后重新签名。注意安装时要先删除原来手机里的版本,因为签名不同了,我第一次再这里卡了好久。
以“捕鱼达人海底捞”为例
下载这个游戏的apk,fishing_joy_1.apk,和工具放在一起
用zip解开fishing_joy_1.apk
copy classes.dex到baksmali的同一目录
用baksmali处理为smali
java -jar baksmali-1.2.6.jar -x classes.dex
得到out目录,里面是smali文件
用dex2jar处理classes.dex为jar包
dex2jar-0.0.7.10-SNAPSHOT\dex2jar.bat classes.dex
得到classes.dex.dex2jar.jar
这时我们的工作目录下面是这样
用jdgui打开classes.dex.dex2jar.jar
好了,可以看代码,但还不能直接修改,需要对比着来修改smali文件
比如我们通过对比找到控制鱼被打到几率的代码在FishLayer.smali
Java代码
给你例子你也看不懂,大白话说吧,当try里面代码错了抛异常了,就不再执行try里面的代码,就会执行catch中代码,程序继续向下执行,这样虽然报错,但是保证了程序的继续执行
好吧,大白话的例子,拿那个捕鱼达人的项目说吧,你应该知道吧,每一条鱼是一个线程,当出来一条鱼,就会创建一个线程,当鱼的线程创建失败的时候,虽然抛出异常,但是不影响程序的继续向下执行,也就是说,游戏你还能玩,这下懂了吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流