你好,歡迎來到川北在線
微信
騰訊微博
新浪微博
卓新智趣安卓專家:一個(gè)2年安卓開發(fā)者的一些忠告
時(shí)間:2017-03-21 12:42   來源:中華網(wǎng)   責(zé)任編輯:青青
  原標(biāo)題:卓新智趣安卓專家:一個(gè)2年安卓開發(fā)者的一些忠告
 
  我仍記得2014年我決定做安卓開發(fā)的那天,這是我一生中做出的最好決定之一。到現(xiàn)在已經(jīng)有2年半了,最初的時(shí)候,并沒有人告訴我如何做才是正確的。我犯了很多錯(cuò)誤,浪費(fèi)了很多時(shí)間。
 
  一年半之后,我有機(jī)會(huì)和一個(gè)真正有才而且經(jīng)驗(yàn)豐富的安卓開發(fā)者一起工作,他指導(dǎo)我,教我正確的做事方式。這期間我學(xué)到了很多東西,學(xué)會(huì)了該做什么不該做什么。
 
  我直接或者間接幫助其它開發(fā)者也有很長一段時(shí)間了。本文我將分享這幾年所收集的精華。也許可以幫助某人更快上手,避免重復(fù)我犯的錯(cuò)誤。
 
  1.不要重復(fù)造輪子
 
  最初,我有一種不愿使用開源庫的思想。不管需要什么,我總想自己去實(shí)現(xiàn)。這是一種非?膳碌乃枷。
 
  如果在開發(fā)app的時(shí)候遇到一個(gè)問題,而這個(gè)問題已經(jīng)被別人很好的解決了,為什么不使用它呢?你可以節(jié)省大量時(shí)間啊。
 
  把更多的精力花在app的業(yè)務(wù)邏輯上吧。如果你想在app中發(fā)起一個(gè)網(wǎng)絡(luò)調(diào)用,是不需要自己去造一個(gè)Retrofit來的。
 
  Bonus:Android Arsenalmaintains a database of almost all Android libraries ever made.Go check it out.
 
  2.別盲目的選擇library
 
  在Github上有許多免費(fèi)使用的開源庫,但是別因太激動(dòng)而盲目的使用。
 
  檢查library的star數(shù)目,越多越好?纯醋髡呤欠襁創(chuàng)建了其它的一些受歡迎的庫。查看issues(打開和關(guān)閉的都看),這可以讓你對這個(gè)library的健壯性和穩(wěn)定性有更好的了解。
 
  如果你時(shí)間充足,你應(yīng)該深入這個(gè)庫的代碼看看它到底是都真的值得使用。
 
  你只需要確保它的代碼是可靠的,bug不多的,高質(zhì)量的。
 
  小貼士:使用Dryrun的命令行嘗試任何library。
 
  3.坐下來,喝杯咖啡,閱讀更多的代碼
 
  我們在閱讀別人代碼上花的時(shí)間比自己寫代碼的時(shí)間多得多,如果你不是的話,從今天就開始做吧。
 
  不管你現(xiàn)在能寫出什么樣的代碼,總是因?yàn)樵谀衬昴吃履汩喿x和學(xué)習(xí)到了什么東西。它只是你已有知識的反映。
 
  安卓的偉大之處就在于它是一個(gè)完全開源的平臺?梢匀ド钊胙芯窟@些代碼看看他們是如何實(shí)現(xiàn)framework的。Github中有成千上萬的開源庫,只需選擇一個(gè)看看人家是如何實(shí)現(xiàn)的,
 
  福利:這里是一些 library的列表,這里是幾乎所有開源安卓app的列表。
 
  4.看在上帝的份上,維護(hù)一個(gè)恰當(dāng)?shù)木幊桃?guī)范吧
 
  如果把編碼比作寫作,那么編程規(guī)范就是你的書法水平。
 
  就跟你閱讀別人的代碼一樣,別人也會(huì)閱讀你的代碼,我想你也不想把別人嚇到是吧?如果你在一個(gè)公司,需要和同事協(xié)同工作,那么務(wù)必重視這個(gè)問題。
 
  編寫簡短,干凈,可讀性強(qiáng)的代碼可以讓你和別人讀代碼的時(shí)候很享受。代碼應(yīng)該讀起來像是讀故事一樣。
 
  代碼是詩。
 
  如果你寫了一段代碼結(jié)果你的同事幾天都不跟你說話,怨不得別人。
 
  福利:你應(yīng)該從通讀這個(gè)和這個(gè)開始。
 
  5.你需要ProGuard,是的,你真的需要!
 
   不要犯還沒有使用ProGuard的情況下就在Play Store上發(fā)布app的錯(cuò)誤。ProGuard不僅僅減小了你的代碼,還混淆了代碼,讓逆向工程師更難理解和復(fù)制。
 
  它是Android SDK附帶的,完全免費(fèi),因此沒有理由不用。
 
  我曾見過幾個(gè)開發(fā)者沒有使用ProGuard就把a(bǔ)pp發(fā)布了。對于一個(gè)技術(shù)很普通的黑客來說破解你的app也就是幾個(gè)小時(shí)的事情。
 
  小貼士:但是如果你需要頂尖的安全性,ProGuard就力不從心了,你需要DexGuard。
 
  6.使用一個(gè)恰當(dāng)?shù)募軜?gòu)
 
  你永遠(yuǎn)都會(huì)慶幸自己從一開始就選擇了一個(gè)恰當(dāng)?shù)募軜?gòu)。
 
  你可以使用MVP(Model-View-Presenter)架構(gòu),它可以把你的代碼解耦成不同的層便于管理,從而提高代碼的靈活性并極大的減小維護(hù)的時(shí)間成本。
 
  可以參考一個(gè)demo項(xiàng)目。如果覺得很難掌握,可以看看這篇針對初學(xué)者的指南。
 
  福利:務(wù)必看看這里,這里尤其是這里。它們將為你實(shí)現(xiàn)MVP提供極大的幫助。
 
  7.用戶界面就像笑話,如果還需要解釋那就糟糕了
 
  如果你是在公司,做的是純安卓開發(fā),你很可能不需要關(guān)心這個(gè)問題,因?yàn)橛蠻I/UX設(shè)計(jì)師管這個(gè)問題。
 
  但是如果你是一個(gè)獨(dú)立開發(fā)者,你就需要考慮它了。我曾經(jīng)見過一些把a(bǔ)pp功能做的很好,但是用戶體驗(yàn)很恐怖的開發(fā)者。
 
  要設(shè)計(jì)一個(gè)干凈,簡單直觀的界面,你不要站在開發(fā)者的角度思考問題,而要挖掘自己內(nèi)心中埋藏的設(shè)計(jì)師的潛力。
 
  盡量嘗試設(shè)計(jì)一個(gè)漂亮的界面,讓你的用戶持續(xù)保持印象,這樣用戶回到你的app的次數(shù)就比別人多,從而產(chǎn)生更多的收獲(也許是購買高級版本)。
 
  你應(yīng)該樂于去減少元素,而不是增加。保持簡潔和小巧。
 
  福利:你可以從Dribble或者M(jìn)aterialUp的熱門設(shè)計(jì)師那里獲得靈感。如果你對設(shè)計(jì)感興趣,你很可能會(huì)喜歡這本書。
 
  8.分析是你最好的朋友
 
  如果你想創(chuàng)建一個(gè)真正令人驚嘆的app,你需要重度依賴分析工具去分析app不同部分的性能和用例。
 
  對于分析,我借助于crash reporting和app usage tracking。
 
  不管你怎么做,永遠(yuǎn)無法做到完美。當(dāng)真實(shí)的用戶開始在各種各樣的設(shè)備以及版本上使用你的app的時(shí)候,你會(huì)發(fā)現(xiàn)即時(shí)寫的最好的代碼也難以保證不出岔子。
 
  一旦發(fā)生崩潰,Crash reporting工具可以幫助你跟蹤與修復(fù)它們。
 
  你必須學(xué)會(huì)像銷售那樣思考問題并分析app不同模塊的使用。這樣可以幫助你減小產(chǎn)品和用戶實(shí)際需求之間的落差。
 
  小貼士:使用FirebaseCrash Reporting以及Analytics tools。
 
  9.做一個(gè)營銷專家
 
  如果你是一個(gè)個(gè)人開發(fā)者,你必須超出作為開發(fā)者的思維,去理解市場。
 
  我見過一些很好的產(chǎn)品因?yàn)槿狈φ_的市場營銷而失敗,同時(shí)也見過并不怎么樣的產(chǎn)品因?yàn)榕1频氖袌鰻I銷而取得極大成功。
 
  如果你對你的工作是認(rèn)真的希望它能獲得可觀的用戶,你必須把在市場營銷上花費(fèi)必要的時(shí)間和金錢。但是在營銷活動(dòng)開始之前,確保app已經(jīng)完全穩(wěn)定,功能已經(jīng)完善。
 
  花時(shí)間研究誰是你的競爭對手以及如何打敗他們。確定一個(gè)可以立即打敗的以及一個(gè)將來會(huì)打敗的。
 
  小貼士:這里是一個(gè)價(jià)錢合理的市場分析工具,我比較喜歡用。
 
  10.是時(shí)候優(yōu)化你的app了
 
  這是一個(gè)大多數(shù)人都不會(huì)去做的事情,但是你應(yīng)該做。
 
  寫代碼與寫高性能的代碼之間有很大的區(qū)別。高性能的代碼是指運(yùn)行速度快,內(nèi)存和存儲消耗更少的代碼。
 
  一個(gè)未經(jīng)優(yōu)化的的app也許在普通情況下運(yùn)行良好,但是當(dāng)放在各種壓力情景中,它就原形畢露了。檢查你app的內(nèi)存使用情況看看有沒有內(nèi)存泄漏存在。記住小漏不補(bǔ)沉大船;〞r(shí)間弄懂Java的內(nèi)存回收機(jī)制是怎么回事,創(chuàng)建并分析你的活對象。
 
  小貼士:可以使用Leak Canary檢測你的內(nèi)存泄漏。它可以節(jié)省你不少時(shí)間。
 
  11.每周在Gradle編譯上最少節(jié)省5小時(shí)
 
  你極有可能正在使用Android Studio開發(fā)app,編譯系統(tǒng)使用的是Gradle。Gradle很棒但是也很慢,當(dāng)項(xiàng)目顯著增大的時(shí)候慢得根蝸牛樣。
 
  有時(shí)候工作忙的時(shí)候我還需要在Gradle編譯上浪費(fèi)差不多一個(gè)小時(shí)。
 
  但是,總有加速的辦法。
 
  你可以照著這篇以及這篇文章的做法顯著提高編譯速度。經(jīng)過優(yōu)化之后我的編譯時(shí)間從4分鐘降到了30秒鐘。
 
  12.測試,測試,再測試!
 
  沒有什么比測試更重要的了。它應(yīng)該是你的首要任務(wù)。
 
  盡可能全面的測試你的app;〞r(shí)間寫自動(dòng)化測試用例,創(chuàng)造各種極端的條件,看看你的app是否能經(jīng)受住考驗(yàn)。
 
  我曾經(jīng)犯過未經(jīng)充分測試就發(fā)布app的錯(cuò)誤。等用戶報(bào)告bug然后修復(fù)。
 
   不要那樣做。你可能通過砍掉測試時(shí)間而節(jié)省了一兩天或者一周,但是以后你很可能會(huì)花雙倍的時(shí)間。
 
  做任何事都要不慌不忙,從容應(yīng)對并長遠(yuǎn)打算。做一個(gè)有遠(yuǎn)見的人。此時(shí)播種,以后總會(huì)有收獲。
 
  13.安卓的碎片化是魔鬼
 
  碎片化可能是安卓最大的問題了。而谷歌似乎并不愿意修復(fù)它,你必須適應(yīng)。
 
  安卓設(shè)備種類繁多,不同屏幕尺寸,不同硬件配置以及各個(gè)廠商的自定義系統(tǒng)。
 
  除此之外,谷歌在不同版本上還莫名其妙的添加或者刪除API,進(jìn)一步加重了你的工作量(這里是一個(gè)例子)。
 
  比如,幾乎每個(gè)開發(fā)者都需要使用SharedPreferences API來完成一個(gè)app,它是如此常見,但是在Android 2.2版本的Samsung Galaxy S上還是出問題了(bug報(bào)告這里)。
 
  花更多的時(shí)間為不同屏幕尺寸的設(shè)備創(chuàng)建不同的布局。在不同版本,不同定制,不同OEM廠商的設(shè)備上測試。
 
  永遠(yuǎn)別覺得某個(gè)東西看似可行就不去測試了。
 
  14.從今天開始使用git!
 
  如果你還沒有使用Git,從現(xiàn)在開始吧。
 
  當(dāng)我開始安卓開發(fā)的時(shí)候,悲劇的我并不知道git是什么東西。我每天都拷貝整個(gè)項(xiàng)目,一個(gè)備份在硬盤上,一個(gè)備份在云盤上。看起來很傻是嗎?是的,的確很傻。
 
  Git可以極大的提高你的工作效率。如果叫我說出一個(gè)我每天都要使用并且離不開的工具的名字,那就是Git了。
 
  在你使用幾天之后,你很可能會(huì)愛上它,并好奇Git的內(nèi)部工作原理。建議你看看這個(gè)。
 
  過了一段時(shí)間之后,你可能開始了一個(gè)大項(xiàng)目,對于如何維護(hù)一個(gè)分支模型感到困惑,那么可以看看這個(gè)。
 
  福利:如果你剛剛開始,還付不起GitHub的私人倉庫的月費(fèi),你可以試試BitBucket。國內(nèi)用戶的選擇更多,oschina的git服務(wù)也不錯(cuò)-譯者注。
 
  15.為黑客制造麻煩
 
  安卓的開源特性讓其易受攻擊。每個(gè)安卓app都可以輕易的被反編譯,逆向分析。
 
  你不希望你的app發(fā)生這種事對吧?
 
  你需要知道如何安全的存儲app中的API keys。如果你要處理用戶的敏感數(shù)據(jù),你必須知道如何加密,選擇何種加密算法(安全且快速)。
 
  你還應(yīng)該安全的把密鑰存儲在本地或者服務(wù)器上。應(yīng)該防止app數(shù)據(jù)被人用ADB備份。如果你在數(shù)據(jù)庫中存儲敏感數(shù)據(jù),要考慮做適當(dāng)?shù)膫窝b。
 
  如果你的app有高級版本,被別人破解免費(fèi)發(fā)布就損失大了。
 
  有幾種方法可以避免你的app被人篡改。但并不是100&安全。任何一個(gè)技術(shù)扎實(shí),決心堅(jiān)決的黑客只要有正確的資源,工具和耐心都可以破解你的app。
 
  你能做的就是盡量讓黑客的破解變得困難,及其困難。
 
  福利:可以從閱讀這個(gè)和這個(gè)開始。
 
  16.在低端手機(jī)上開發(fā)
 
  每個(gè)人都喜歡使用一個(gè)高端安卓手機(jī),我也是。但是記得只作為個(gè)人使用,而不是開發(fā)的目的。
 
  高端機(jī)會(huì)隱藏app的許多缺陷。假設(shè)你在UI線程上做了導(dǎo)致卡頓的事情,但是因?yàn)槭謾C(jī)過于強(qiáng)大,可能導(dǎo)致你無法察覺。
 
  17.學(xué)習(xí)設(shè)計(jì)模式
 
  這是一項(xiàng)終生受益的投資。
 
  在開發(fā)大型app的時(shí)候,你會(huì)遇到一些已經(jīng)被比你牛逼的人所解決了的問題。
 
  從今天開始就花點(diǎn)時(shí)間去學(xué)習(xí)設(shè)計(jì)模式。Here是一個(gè)演示了所有已知設(shè)計(jì)模式的的Github項(xiàng)目。
 
  可以從最常見的開始,比如單例,適配器模式,工廠方法模式,迭代模式,依賴注入模式,事件驅(qū)動(dòng)架構(gòu),建造者模式,回調(diào),策略模式,外觀模式以及生產(chǎn)消費(fèi)者模式。
 
  看起來很多是吧?實(shí)際上并不多。一旦深入你就會(huì)愛上它們的。
 
  小貼士:閱讀一些書籍,比如GoF的Design Patterns,Martin Fowler的重構(gòu)以及Joshua Bloch的Effective Java。
 
  18.回饋
 
  你得承認(rèn),我們都曾從別人和互聯(lián)網(wǎng)那得到許多幫助。
 
  每當(dāng)你遇到問題的時(shí)候,你會(huì)做的第一件事就是谷歌,發(fā)現(xiàn)第一條來自StackOverflow的鏈接。有時(shí)候你很忙,結(jié)果直接拷貝粘貼得分 的答案。
 
  你有沒有想過Github上那些開源庫其實(shí)也是別人花時(shí)間創(chuàng)建然后貢獻(xiàn)給社區(qū)的。
 
  當(dāng)你被一個(gè)難以理解的概念卡住或者遇到一個(gè)新的東西時(shí),你發(fā)現(xiàn)一篇讓你豁然開朗的博客,這個(gè)時(shí)候記住是某人犧牲了約炮時(shí)間而寫了這篇文章。
 
  所以也該你回饋了。給予的越多,得到的也就越多。

   投稿郵箱:chuanbeiol@163.com   詳情請?jiān)L問川北在線:http://www.sanmuled.cn/

川北在線-川北全搜索版權(quán)與免責(zé)聲明
①凡注明"來源:XXX(非在線)"的作品,均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé),本網(wǎng)不承擔(dān)此類稿件侵權(quán)行為的連帶責(zé)任。
②本站所載之信息僅為網(wǎng)民提供參考之用,不構(gòu)成任何投資建議,文章觀點(diǎn)不代表本站立場,其真實(shí)性由作者或稿源方負(fù)責(zé),本站信息接受廣大網(wǎng)民的監(jiān)督、投訴、批評。
③本站轉(zhuǎn)載純粹出于為網(wǎng)民傳遞更多信息之目的,本站不原創(chuàng)、不存儲視頻,所有視頻均分享自其他視頻分享網(wǎng)站,如涉及到您的版權(quán)問題,請與本網(wǎng)聯(lián)系,我站將及時(shí)進(jìn)行刪除處理。



圖庫
合作媒體
金寵物 綠植迷
法律顧問:ITLAW-莊毅雄律師