如果你已經(jīng)確定了學(xué)習(xí)Android的目標(biāo),那么,應(yīng)該提前做好哪些工作、先打下哪些基礎(chǔ)呢?
公司專(zhuān)注于為企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、微信公眾號(hào)開(kāi)發(fā)、購(gòu)物商城網(wǎng)站建設(shè),微信平臺(tái)小程序開(kāi)發(fā),軟件定制網(wǎng)站等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。憑借多年豐富的經(jīng)驗(yàn),我們會(huì)仔細(xì)了解各客戶的需求而做出多方面的分析、設(shè)計(jì)、整合,為客戶設(shè)計(jì)出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)公司更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù)。
首先,你最好先熟悉一門(mén)編程語(yǔ)言,現(xiàn)在大學(xué)里面和計(jì)算機(jī)相關(guān)的專(zhuān)業(yè)甚至理工類(lèi)專(zhuān)業(yè)一般都會(huì)開(kāi)設(shè)C語(yǔ)言課程,只是很多同學(xué)在大學(xué)期間并沒(méi)有好好學(xué)習(xí),如果對(duì)它掌握的不太好或者很久沒(méi)用了,建議先從將其好好復(fù)習(xí)一下,將其基本的語(yǔ)法再好好回顧一下,最好能搭建一個(gè)環(huán)境來(lái)運(yùn)行、調(diào)試它。如果沒(méi)有學(xué)過(guò),不妨也提前學(xué)習(xí)一下,可以參考清華大學(xué)出版社出版的譚浩強(qiáng)老師的《C語(yǔ)言程序設(shè)計(jì)》,推薦這本書(shū)的原因,一是它已經(jīng)經(jīng)過(guò)了多年的考驗(yàn),應(yīng)該說(shuō)還是比較嚴(yán)謹(jǐn)?shù)?其次就是大部分的高校所開(kāi)設(shè)的C語(yǔ)言使用的教材都是用它作為教材,因此無(wú)論是購(gòu)買(mǎi)還是借閱,都容易找到。另外,華清遠(yuǎn)見(jiàn)網(wǎng)站上也有一些這方面的教學(xué)視頻,可以結(jié)合來(lái)看。
其次,如果你后續(xù)有志于游戲方面的開(kāi)發(fā),你最好具備一定的數(shù)據(jù)結(jié)構(gòu)和算法基礎(chǔ)知識(shí)。這一點(diǎn)是我在華清遠(yuǎn)見(jiàn)的講臺(tái)上,給學(xué)員們堅(jiān)持強(qiáng)調(diào)的。雖然現(xiàn)代的高級(jí)編程語(yǔ)言中,其類(lèi)庫(kù)中已經(jīng)幫我們實(shí)現(xiàn)了大部分的數(shù)據(jù)結(jié)構(gòu),一般情況下,我們直接使用即可。但如果你能對(duì)其原理有所了解,當(dāng)你需要在這些數(shù)據(jù)結(jié)構(gòu)和算法中間的時(shí)候,你可以能更加的清楚到底應(yīng)該選擇那個(gè)數(shù)據(jù)結(jié)構(gòu)或者算法。另外,在圖形圖像處理上面,線性代數(shù)的作用也非常重要,如果能掌握一點(diǎn)這方面的基礎(chǔ)知識(shí),無(wú)疑也會(huì)在后續(xù)的學(xué)習(xí)中如虎添翼。舉個(gè)例子,在Android中,有一個(gè)用于圖形變換的類(lèi)Matrix,用起來(lái)稍有點(diǎn)難。其實(shí)它的理論基礎(chǔ)就是線性代數(shù)中的矩陣,如果你了解矩陣的基本算法,這個(gè)類(lèi)的使用可以說(shuō)就易如反掌了。
第三,因?yàn)锳ndroid應(yīng)用的開(kāi)發(fā)語(yǔ)言用的是Java語(yǔ)言,并且在Android中也用到了Java核心類(lèi)庫(kù)的大量的類(lèi),因此,在學(xué)習(xí)Android開(kāi)發(fā)之前,可以先把Java基本語(yǔ)法和Java SE的基礎(chǔ)類(lèi)庫(kù)好好學(xué)習(xí)一下,例如:Java中的IO、網(wǎng)絡(luò)、線程、List、Map、Tree等數(shù)據(jù)結(jié)構(gòu)?,F(xiàn)在的大學(xué)里也有不少的院系開(kāi)設(shè)了Java課程,教材和圖書(shū)也非常豐富,如果你所在的院系沒(méi)有開(kāi)設(shè),也可以從其他開(kāi)設(shè)了這個(gè)專(zhuān)業(yè)的院系同學(xué)那里借閱一下,并認(rèn)真完成他們所布置的作業(yè),爭(zhēng)取自己能動(dòng)手編寫(xiě)出一些簡(jiǎn)單的Java應(yīng)用。如果自己購(gòu)買(mǎi)圖書(shū),可以購(gòu)買(mǎi)《Java核心技術(shù),卷1(原書(shū)第8版)》這本圖書(shū)來(lái)學(xué)習(xí)。
第四,因?yàn)樵贏ndroid中,會(huì)用到數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù),因此,也可以提前對(duì)數(shù)據(jù)庫(kù)知識(shí)做相關(guān)的儲(chǔ)備。在Android所使用的SQLite中,其語(yǔ)法是遵循標(biāo)準(zhǔn)的SQL-92語(yǔ)法的(當(dāng)然和企業(yè)級(jí)數(shù)據(jù)庫(kù)如Oracle等比較,功能上要弱很多),有條件的話,最好也能安裝一個(gè)數(shù)據(jù)庫(kù)來(lái)進(jìn)行實(shí)際的操作。從易用性和資料完備性來(lái)說(shuō),建議大家使用Microsoft SQL Server或者M(jìn)ySQL就可以了。它們都是我們學(xué)習(xí)數(shù)據(jù)庫(kù)的好平臺(tái)。另外,如果曾經(jīng)學(xué)習(xí)過(guò)數(shù)據(jù)庫(kù)原理或者關(guān)系代數(shù),那么,在學(xué)習(xí)數(shù)據(jù)庫(kù)的過(guò)程中,也可以再好好地復(fù)習(xí)一下這些基礎(chǔ)知識(shí),對(duì)我們理解數(shù)據(jù)庫(kù)大有裨益。
最后,我們結(jié)合華清遠(yuǎn)見(jiàn)3G學(xué)院的“3G Android系統(tǒng)開(kāi)發(fā)就業(yè)培訓(xùn)班課程體系”來(lái)談?wù)凙ndroid開(kāi)發(fā)的學(xué)習(xí)方法。
Android是一個(gè)比較龐大的體系,從底層的Linux內(nèi)核到上層的應(yīng)用層,各部分的內(nèi)容跨度也比較大。因此,一個(gè)好的學(xué)習(xí)方法對(duì)我們學(xué)習(xí)Android開(kāi)發(fā)很重要。因此在華清遠(yuǎn)見(jiàn)的課程體系設(shè)計(jì)中采取了循序漸進(jìn)、將大目標(biāo)分解成多個(gè)小目標(biāo),逐步達(dá)成對(duì)Android開(kāi)發(fā)從應(yīng)用層到底層系統(tǒng)及驅(qū)動(dòng)開(kāi)發(fā)全面掌握的目的。
例如,可以先從Android的應(yīng)用開(kāi)發(fā)開(kāi)始,等到對(duì)應(yīng)用掌握的比較熟悉了,開(kāi)始慢慢閱讀一些Android 應(yīng)用框架層的源代碼,然后再漸漸往下去了解Android的JNI、Libraries、Dalvik虛擬機(jī)、HAL層、硬件驅(qū)動(dòng)、Linux內(nèi)核、ARM技術(shù)體系架構(gòu)等,雖然近期Intel宣稱(chēng)要讓Intel芯片支持Android系統(tǒng),但在可預(yù)見(jiàn)的時(shí)期內(nèi),在移動(dòng)設(shè)備上,ARM的優(yōu)勢(shì)應(yīng)該還是不可撼動(dòng)的。
具體來(lái)說(shuō),可以先通過(guò)在開(kāi)發(fā)板上構(gòu)建一個(gè)自己的Android系統(tǒng),了解Android系統(tǒng)的整體架構(gòu)和啟動(dòng)過(guò)程,由此先對(duì)Android有一個(gè)初步的了解;接下來(lái),學(xué)習(xí)Android的應(yīng)用開(kāi)發(fā),在這里可以先學(xué)習(xí)Android的幾個(gè)主要組件、UI組件,先對(duì)Android應(yīng)用開(kāi)發(fā)有一個(gè)感性認(rèn)識(shí)。在能夠熟練搭建用戶界面后,再逐漸來(lái)豐富應(yīng)用的功能,例如:加上事件處理,使其能夠和用戶互動(dòng);加上數(shù)據(jù)存儲(chǔ)功能;加上聯(lián)網(wǎng)功能等等。在學(xué)完應(yīng)用后,在此基礎(chǔ)上來(lái)學(xué)習(xí)游戲編程,先了解游戲設(shè)計(jì)的基本思路,然后開(kāi)始從小的游戲、小的模塊開(kāi)始做起,到最后能完成一個(gè)類(lèi)似于現(xiàn)在熱門(mén)的《捕魚(yú)達(dá)人》這樣的游戲。在掌握了這些應(yīng)用層級(jí)的內(nèi)容后,可以去了解如何在Android應(yīng)用中通過(guò)JNI去調(diào)用C/C++的接口,再往下學(xué)習(xí)Linux的內(nèi)核和驅(qū)動(dòng)開(kāi)發(fā)如字符設(shè)備驅(qū)動(dòng)、Flash設(shè)備驅(qū)動(dòng)、網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)等等;再在此基礎(chǔ)上,去學(xué)習(xí)Android驅(qū)動(dòng)開(kāi)發(fā)、HAL(硬件抽象層)開(kāi)發(fā)、ARM體系架構(gòu)和指令等等內(nèi)容,這樣,Android開(kāi)發(fā)的整個(gè)體系就都貫穿起來(lái)了。
當(dāng)然,因?yàn)闀r(shí)間有限,而底層部分的內(nèi)容比較龐雜,因此,在真正去做這部分工作之前,我們只需要對(duì)其基本原理有所了解,做好相關(guān)知識(shí)的儲(chǔ)備,能夠根據(jù)老師的指導(dǎo)來(lái)完成相關(guān)的實(shí)驗(yàn)。這樣在后續(xù)的工作中,就可以方便的往這方面發(fā)展,讓自己的事業(yè)更上一層樓。
有個(gè)刷黃金彈頭的漏洞,把黃金彈頭或者白銀彈頭贈(zèng)送給494435737
關(guān)閉游戲再進(jìn),就會(huì)有999個(gè)相應(yīng)的彈頭
494435737是捕魚(yú)達(dá)人3D源代碼
趕快送,修復(fù)了就沒(méi)了!
你如是新手的話,15370027輸入這口令就得5元話費(fèi),那個(gè)禮包代碼是by1000,合適所有人,都是這一個(gè)代碼。解答完畢
如果大型游戲,強(qiáng)烈建議不要使用cocos2d-js
我們目前的幾個(gè)項(xiàng)目都是cocos2d-js開(kāi)發(fā)的,我打算把這幾個(gè)項(xiàng)目轉(zhuǎn)egret。有如下幾個(gè)理由:
1、cocos ide有BUG:斷點(diǎn)會(huì)崩潰、代碼提示很差、內(nèi)存太高、虛擬機(jī)的菜單欄會(huì)影響事件(迭代了很多版本,這菜單欄BUG都沒(méi)修復(fù))
2、studio的工作流在幾個(gè)引擎中是最差的,而且有BUG。經(jīng)常和實(shí)際表現(xiàn)不一致。而且內(nèi)存占用大,會(huì)崩潰。不能繼承(這個(gè)問(wèn)題最嚴(yán)重,不能繼承按鈕,那么按下縮放等高級(jí)功能就很蛋疼)。
3、
架構(gòu)太差。寫(xiě)點(diǎn)小功能沒(méi)事,如果想寫(xiě)大型游戲,這套架構(gòu)會(huì)讓你抓狂!比如最簡(jiǎn)單的按鈕事件,我必須在事件方法里面加個(gè)觸摸類(lèi)型判斷。一個(gè)很簡(jiǎn)單的點(diǎn)擊,就
多出很多這種相似的代碼!4、UI有好幾套,然而每一套都有BUG。CCUI的設(shè)計(jì)也是很糟糕的!同時(shí)也是崩潰的罪魁禍?zhǔn)住?/p>
5、引擎BUG問(wèn)題,
很多BUG會(huì)讓你欲哭無(wú)淚,比如坐標(biāo)會(huì)出現(xiàn)undefined。再比如熱更新的BUG,XCODE編出的包默認(rèn)是js而不是jsc,當(dāng)這個(gè)包發(fā)布商店就會(huì)
出現(xiàn)不能熱更新的問(wèn)題,同時(shí)也進(jìn)不去游戲,卡在了熱更新界面。(這個(gè)問(wèn)題導(dǎo)致我們流失了3個(gè)月的用戶,知道蘋(píng)果商店通過(guò)審核位置),再比如
java/objectc和js的交互,這個(gè)都有問(wèn)題!再比如:ios第三方輸入法會(huì)導(dǎo)致崩潰!
6、工作流問(wèn)題,IDE的斷點(diǎn)的觀察變量很不友好、studio導(dǎo)出的配置很大、studio擴(kuò)展性很差。在IDE 1.2版本出來(lái)之前,我們團(tuán)隊(duì)甚至無(wú)法斷點(diǎn),只能打印日志來(lái)debug。
7、工作效率問(wèn)題,代碼提示先不談。我實(shí)現(xiàn)一個(gè)簡(jiǎn)單的列表都能折騰很久,那ccui的list真是太不好用!除此之外,裁剪、遮罩這些只需要一行的代碼,在cocos下面需要無(wú)數(shù)行!
8、
引擎升級(jí)問(wèn)題:cocos大概一個(gè)月1個(gè)升級(jí),egret是2周。然而cocos升級(jí)會(huì)帶來(lái)大量的新BUG,而且兼容性很差。導(dǎo)致我們現(xiàn)在還用3.0版
本。最蛋疼的是,官方的3.6版本又不能斷點(diǎn)了!3.0升級(jí)到3.6還會(huì)導(dǎo)致布局混亂、九宮失效、崩潰閃退(絕對(duì)不是代碼問(wèn)題這個(gè)解釋了)!基本上
cocos每加個(gè)新功能都會(huì)帶來(lái)無(wú)數(shù)新BUG,老BUG修復(fù)量也少,我論壇反饋的問(wèn)題經(jīng)常需要迭代2到3個(gè)版本才修復(fù),下個(gè)版本修復(fù)兼職是不可能。而
egret不僅迭代快,BUG修復(fù)也勤快!也很少有一些導(dǎo)致產(chǎn)品質(zhì)量的驗(yàn)證BUG。
9、官方人員態(tài)度問(wèn)題:我在cocos論壇發(fā)的BUG反饋,過(guò)了7天才有人來(lái)回復(fù)。地址(從3.0到3.1和3.2的BUG,官方幫忙看下),再看下egret我發(fā)的BUG反饋,當(dāng)時(shí)是下班時(shí)間,然而第二天一早就回復(fù)我了。地址(Egret社區(qū)-BUG列表)
10、API問(wèn)題:cocos經(jīng)歷了3個(gè)大版本,官方API文檔也有的API,實(shí)際盡然是沒(méi)有的,官方回復(fù)是還沒(méi)加入js綁定。
11、跨平臺(tái)問(wèn)題:cocos2d-js經(jīng)常是HTML5和JSB表現(xiàn)不一致。導(dǎo)致我們現(xiàn)在只能專(zhuān)注JSB而放棄HTML5版本。egret很少有這個(gè)問(wèn)題。
12、
性能問(wèn)題:先拋開(kāi)runtime。如果你用了ccui,那么我100%保證你的cocos2d-js的性能會(huì)被egret秒殺。再來(lái)說(shuō)下native下面
的性能對(duì)比,cocos的人說(shuō)egret是js寫(xiě)的邏輯,而他們是綁定。那么問(wèn)題來(lái)了,在現(xiàn)在,js的邏輯產(chǎn)生的性能壓力一點(diǎn)都不是問(wèn)題(參考
node.js,能用js寫(xiě)服務(wù)器了都)。主要的性能壓力其實(shí)是在渲染上面,而他們2個(gè)都是opengl作為渲染的。如果用了ccui,那么還是被
egret秒殺。那ccui帶來(lái)的drawCall真是太?。≡賮?lái)談runtime,egret現(xiàn)在很多瀏覽器都集成了runtime(可以opengl
渲染代替canvas渲染),而cocos-js只是說(shuō)在合作,已經(jīng)慢了一步。
13、產(chǎn)品路線圖問(wèn)題:cocos的幾個(gè)產(chǎn)品一心在弄3D,egret都已經(jīng)自己搞了一個(gè)IDE了。開(kāi)發(fā)基本的生活cocos都沒(méi)保障好,就去想和u3d打架!
14、內(nèi)部問(wèn)題:cocos估計(jì)內(nèi)部很不和諧,ide據(jù)說(shuō)是1個(gè)人在開(kāi)發(fā),studio是30個(gè)人(30個(gè)人整出這東西),而且studio是用的.NET搞的,跨平臺(tái)最呵呵的技術(shù)!QT、AIR那些那么多高效率,擴(kuò)展性強(qiáng)的技術(shù)不用,選了個(gè).NET。。。。
---------------------------------------------------------------------------------------------------------------------------------
題
外話:說(shuō)了那么多cocos的不是,我也曾試著愛(ài)過(guò)它,我甚至開(kāi)發(fā)了一個(gè)和egret
wing一樣的UI編輯器,寫(xiě)了個(gè)和Flash/Flex一樣的API(egret用的這套,這種架構(gòu)很好用,簡(jiǎn)單明了)。其中UI編輯器還加上了
unity3d那種綁定腳本的功能。然而因?yàn)閏ocos底層的一些令人發(fā)狂的BUG,我最終是放棄了。有egret這個(gè)車(chē)子在,我還造什么輪子?我打算把
手里頭的這套cocos的東西開(kāi)源。然后去整egret去!
---------------------------------------------------------------------------------------------------------------------------------
再來(lái)個(gè)題外話:
游戲引擎cocos2d-js和egret 對(duì)比
這
個(gè)是百度搜索第一的對(duì)比,里面說(shuō)cocos2d的工具比egret多,我不否認(rèn),但是能用的基本沒(méi)有。而egret的工具很穩(wěn)定。就拿最簡(jiǎn)單的骨骼動(dòng)
畫(huà),cocos連龍骨都不支持,studio里面的骨骼設(shè)計(jì)也是坑的不行,egret的骨骼設(shè)計(jì)工具從界面和實(shí)用性都已經(jīng)完爆studio了!
再來(lái)說(shuō)上面的地址里面的成功產(chǎn)品:捕魚(yú)達(dá)人、DOTA傳奇、我叫MT那都是cocos2dx寫(xiě)的,和js版本一點(diǎn)關(guān)系都沒(méi)有!請(qǐng)問(wèn)你有見(jiàn)過(guò)網(wǎng)頁(yè)版的刀塔傳奇么?
上面的開(kāi)發(fā)語(yǔ)言對(duì)比,大項(xiàng)目來(lái)說(shuō),ts真的是完爆js!js那不小心就會(huì)出錯(cuò)真心不適合大項(xiàng)目,不然微軟不會(huì)造這個(gè)輪子。
上面的參考資料對(duì)比,cocos2d-js的文檔連參數(shù)的注釋都沒(méi),和c++文檔作參考也不行,很多參數(shù)是不一致的!而egret在開(kāi)發(fā)工具里面就繼承了中文的幫助。
從目前狀況看,今年絕對(duì)是egret產(chǎn)品井噴的一年,不信走著瞧!cocos真是把我坑慘了!
---------------------------------------------------------------------------------------------------------------------------------
再
次申明,請(qǐng)拿cocos2d-js或者JSB的大作出來(lái),不用拿2dx的東西。說(shuō)到2dx,你們?cè)偃チ私庀?,榜單上,有幾個(gè)人是沒(méi)改過(guò)引擎源碼的,有幾個(gè)
游戲能隨著cocos引擎升級(jí)而升級(jí)。用studio的又有幾個(gè)。并不想和王哲斯逼,只是希望你們能正視BUG,提高體驗(yàn)。如果好,我們團(tuán)隊(duì)會(huì)考慮
cocos技術(shù)的,否則只能用egret和unity3d了。我說(shuō)cocos這么多不是,也是希望他成長(zhǎng),能給開(kāi)發(fā)者帶來(lái)更多利益,帶來(lái)更多方便,而不是
各種無(wú)厘頭的問(wèn)題,各種蹩腳的手段去開(kāi)發(fā)。還有,我說(shuō)的這幾點(diǎn),@王哲
你接招,如果我不說(shuō)出這些BUG,這些問(wèn)題,那么估計(jì)還不一定改。egret同樣有個(gè)人叫王澤,然而他的理念完全當(dāng)我們開(kāi)發(fā)者是用戶,提高開(kāi)發(fā)體驗(yàn),這個(gè)
很重要的。
需要的工具
jdk:必須的
baksmali:classes.dex反編譯為smali格式(文本文件,可修改)
smali:smali格式編譯打包為classes.dex
但由于smali格式類(lèi)似匯編,比較難閱讀,所以用dex2jar進(jìn)行輔助
dex2jar:classes.dex轉(zhuǎn)為jar包
jdgui:jar反編譯并閱讀
以上工具可以在 下載
好了,順序就是把a(bǔ)pk用zip解開(kāi),里面的classes.dex分別用baksmali處理為smali,用dex2jar處理成jar,然后用jdgui看代碼,找好java文件中要改的位置后,在smali里找對(duì)應(yīng)的位置修改,改完了用smali再編譯為classes.dex,覆蓋原來(lái)apk里的同名文件,最后重新簽名。注意安裝時(shí)要先刪除原來(lái)手機(jī)里的版本,因?yàn)楹灻煌?,我第一次再這里卡了好久。
以“捕魚(yú)達(dá)人海底撈”為例
下載這個(gè)游戲的apk,fishing_joy_1.apk,和工具放在一起
用zip解開(kāi)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
這時(shí)我們的工作目錄下面是這樣
用jdgui打開(kāi)classes.dex.dex2jar.jar
好了,可以看代碼,但還不能直接修改,需要對(duì)比著來(lái)修改smali文件
比如我們通過(guò)對(duì)比找到控制魚(yú)被打到幾率的代碼在FishLayer.smali
Java代碼
給你例子你也看不懂,大白話說(shuō)吧,當(dāng)try里面代碼錯(cuò)了拋異常了,就不再執(zhí)行try里面的代碼,就會(huì)執(zhí)行catch中代碼,程序繼續(xù)向下執(zhí)行,這樣雖然報(bào)錯(cuò),但是保證了程序的繼續(xù)執(zhí)行
好吧,大白話的例子,拿那個(gè)捕魚(yú)達(dá)人的項(xiàng)目說(shuō)吧,你應(yīng)該知道吧,每一條魚(yú)是一個(gè)線程,當(dāng)出來(lái)一條魚(yú),就會(huì)創(chuàng)建一個(gè)線程,當(dāng)魚(yú)的線程創(chuàng)建失敗的時(shí)候,雖然拋出異常,但是不影響程序的繼續(xù)向下執(zhí)行,也就是說(shuō),游戲你還能玩,這下懂了吧