你的代碼質(zhì)量應(yīng)該隨著經(jīng)驗(yàn)的增加而提高,在本文作者基于 Android 開發(fā)者六年間,其都學(xué)到了什么?

作者 | Mrudula
譯者 | 彎月,責(zé)編 | 屠敏
以下為譯文:
六年來(lái),我為多家公司編寫過(guò)各種應(yīng)用程序。你編寫代碼或處理代碼庫(kù)的文化和方式會(huì)隨著你的經(jīng)驗(yàn)而不斷變化。
你的代碼質(zhì)量應(yīng)該隨著經(jīng)驗(yàn)的增加而提高,否則就需要反思了。
選擇正確的架構(gòu)
如果你是從頭開始開發(fā)應(yīng)用程序,那么就會(huì)有許多優(yōu)勢(shì)。
其中之一就是選擇正確的體系結(jié)構(gòu)。通常,我們喜歡將所有內(nèi)容都寫在同一個(gè)activity文件中,因?yàn)檫@樣做很容易。但是,當(dāng)你的代碼量增多時(shí),這就會(huì)成問(wèn)題。你的代碼庫(kù)會(huì)變得十分龐大,每個(gè)文件包含的代碼行數(shù)也會(huì)非常龐大。
考慮到代碼的性能和維護(hù),在早期階段選擇正確的體系結(jié)構(gòu),才是明智的做法。
MVC、MVP、MVVM和MVI等許多體系結(jié)構(gòu)可幫助 Android 開發(fā)人員輕松維護(hù)、測(cè)試和開發(fā)新功能。

上圖說(shuō)明了在設(shè)計(jì)完應(yīng)用程序后,所有模塊應(yīng)如何相互交互。盡管這完全取決于你的組織,但你也有可能會(huì)有機(jī)會(huì)選擇適合應(yīng)用程序的體系結(jié)構(gòu)。
但是,強(qiáng)烈建議你選擇適合需求的特定體系結(jié)構(gòu)。
關(guān)于哪種架構(gòu)最好這個(gè)話題也是眾說(shuō)紛紜。
根據(jù)開發(fā)人員指南:
“沒(méi)有任何一種方法能夠編寫出適用于每種情況的最佳應(yīng)用程序。話雖如此,對(duì)于大多數(shù)情況和工作流來(lái)說(shuō),這種推薦的體系結(jié)構(gòu)都是一個(gè)很好的起點(diǎn)。”
善加利用Android Studio
Android Studio 提供了最快的工具,可以為每種類型的 Android 設(shè)備構(gòu)建應(yīng)用程序。
不幸的是,我們僅探索了該IDE的一小部分。Android Studio附帶了許多工具,以下是我們?cè)谌粘i_發(fā)中應(yīng)使用的各種工具。
Visual Layout Editor
在這款Layout Editor中,我們可以將UI元素拖到可視化設(shè)計(jì)編輯器中,并以此來(lái)快速構(gòu)建布局,同時(shí)無(wú)需手動(dòng)編寫布局XML。
這款設(shè)計(jì)編輯器可以在各種 Android 設(shè)備和版本上預(yù)覽布局,而且你還可以動(dòng)態(tài)調(diào)整布局的大小,以確保在各種屏幕尺寸上正常工作。
當(dāng)你使用這款Layout Editor構(gòu)建新布局時(shí),尤其能感受到其強(qiáng)大之處。
APK Analyzer
我們可以利用 APK Analyzer 減少花在調(diào)試應(yīng)用程序內(nèi)DEX文件和資源問(wèn)題上的時(shí)間,而且還可以減小APK的大小。此外,你還可以在命令行中使用 APK Analyzer 。
APK Analyzer 的功能包括:
-
查看APK中文件的絕對(duì)大小和相對(duì)大小,例如DEX和Android資源文件。
-
了解DEX文件的組成。
-
并排比較兩個(gè)APK。

Fast Emulator
如果你需要應(yīng)對(duì)各種版本的 Android, 而且還希望在各種 API 級(jí)別上測(cè)試你的應(yīng)用,那么這款模擬器甚至比真正的設(shè)備還好。
這款模擬器提供了Android設(shè)備所具備的所有功能。你可以模擬打電話和發(fā)短信、指定設(shè)備的位置、模擬不同的網(wǎng)絡(luò)速度、模擬旋轉(zhuǎn)和其他硬件傳感器、訪問(wèn) google 應(yīng)用商店等等。
與在物理設(shè)備上的測(cè)試相比,從某種程度上來(lái)說(shuō),在模擬器中測(cè)試應(yīng)用程序更快捷、更方便。
Profilers
Android Profiler工具提供了實(shí)時(shí)數(shù)據(jù),可以幫助你了解應(yīng)用使用CPU、內(nèi)存、網(wǎng)絡(luò)和電池資源的情況。

雖然我們有各種的分析器,例如CPU分析器、內(nèi)存分析器、網(wǎng)絡(luò)分析器和能耗分析器。
但 Android Profiler 可以兼容Android 5.0(API級(jí)別21)及更高版本。你可以使用 Android Studio 中的高級(jí)事件探查器來(lái)監(jiān)視應(yīng)用會(huì)話消耗CPU資源和內(nèi)存的狀況。
內(nèi)存探查器可以幫助我們使用Leak Canary調(diào)試內(nèi)存泄漏。
配置構(gòu)建變化
你可以使用構(gòu)建變化為你的應(yīng)用創(chuàng)建不同的版本,還可以正確管理依賴項(xiàng)和簽名配置。
大多數(shù)組織都有測(cè)試和生產(chǎn)環(huán)境。如果想針對(duì)每種環(huán)境構(gòu)建不同的應(yīng)用程序,你可以利用不同的構(gòu)建類型指定不同的基本URL。

你還可以根據(jù)API級(jí)別或其他設(shè)備變化,為不同的設(shè)備構(gòu)建應(yīng)用程序的不同版本。
4.使用 Lint Checks 改進(jìn)代碼
這個(gè) lint 工具可以幫助你找出結(jié)構(gòu)不良的代碼,而這些代碼可能會(huì)影響應(yīng)用程序的可靠性和效率。
Lint會(huì)告訴你布局中是否存在占用大量空間的命名空間。
它還告訴你其他結(jié)構(gòu)性的問(wèn)題,例如使用了棄用的元素或目標(biāo)API版本不支持的API調(diào)用。它還會(huì)建議你使用所有庫(kù)的最新版本。
使用新的 SparseArray<String>(...) 代替 HashMap,可以獲得更好的性能。SparseArrays 會(huì)將整數(shù)映射到對(duì)象。與普通的對(duì)象數(shù)組不同,下標(biāo)間可能存在間隙。
它比使用 HashMap 將整數(shù)映射成對(duì)象的效率更高。
測(cè)試應(yīng)用程序
測(cè)試驅(qū)動(dòng)的開發(fā)(TDD)是確保你會(huì)測(cè)試每一行新代碼的一種方法。如果采用這種方式,那么在編寫要實(shí)現(xiàn)的代碼之前,你需要為添加的內(nèi)容編寫測(cè)試。
由于時(shí)間和資源有限,大多數(shù)創(chuàng)業(yè)公司可能不會(huì)采用測(cè)試驅(qū)動(dòng)的開發(fā)環(huán)境。但是它已被許多公司廣泛接受。

Android 有三種類型的測(cè)試。
1.單元測(cè)試
單元測(cè)試用于測(cè)試方法和小模塊。無(wú)需模擬器或真實(shí)設(shè)備即可運(yùn)行這些測(cè)試,因?yàn)樗鼈兛梢栽贘VM上運(yùn)行。
JUnit 和 Robolectric 是流行的 Android 單元測(cè)試框架,可以在JVM上快速運(yùn)行測(cè)試。
2. 設(shè)備測(cè)試
設(shè)備測(cè)試依賴于Android 框架。由于這種依賴性,你需要模擬器或物理設(shè)備才能運(yùn)行這種測(cè)試。我們使用 Mockito 模擬設(shè)備測(cè)試中使用的對(duì)象。
3. UI測(cè)試
我們可以利用UI測(cè)試活動(dòng)的啟動(dòng)是否正確,或視圖的存在是否正確。Espresso和UI Automater 是UI測(cè)試中廣泛使用的工具。
以下是應(yīng)用當(dāng)前所包含測(cè)試的軟件包結(jié)構(gòu)。

Test:?jiǎn)卧獪y(cè)試都保存在這個(gè)文件夾中。這些測(cè)試在JVM上運(yùn)行,不需要 Android 設(shè)備或模擬器。
Android test:所有設(shè)備和UI測(cè)試都保存在這個(gè)文件夾中。這些測(cè)試需要 Android 物理設(shè)備或模擬器才能運(yùn)行。
使用版本控制
Git 和 BitBucket 是最常用的版本控制系統(tǒng)。
版本控制可以跟蹤文件的改動(dòng),可以記錄完成的操作,并且可以根據(jù)需要恢復(fù)特定版本。
但給你與團(tuán)隊(duì)一起工作時(shí),版本控制有利于協(xié)作,而且還可以將所有的更改合并到源代碼中。如果沒(méi)有版本控制,則你需要進(jìn)行備份,并將代碼存儲(chǔ)到安全的地方。
有了Git以后,代碼就安全了。你可以跟蹤更改,還可以針對(duì)某次發(fā)布維護(hù)多個(gè)代碼庫(kù)。它可以簡(jiǎn)化兩個(gè)人一起工作時(shí)合并代碼的工作。
此外,你也可以利用Git展示你的工作,并向許多開源項(xiàng)目貢獻(xiàn)代碼。Git已成為許多公司篩選人才的地方,因?yàn)樗麄兛梢酝ㄟ^(guò)Git查看候選人的工作成果和個(gè)人項(xiàng)目。
發(fā)布產(chǎn)品的知識(shí)
無(wú)論你是否是將新版本發(fā)布到生產(chǎn)環(huán)境的主要負(fù)責(zé)人,我都建議你掌握將應(yīng)用發(fā)布到應(yīng)用商店的方法。
掌握使用密鑰存儲(chǔ)文件對(duì)APK進(jìn)行簽名的方法。記下你的密鑰庫(kù)密碼和別名。你甚至可以在Gradle文件中配置它們,以簡(jiǎn)化簽名過(guò)程。
使用 Crashlytics
Crashlytics 是最強(qiáng)大,最輕便的應(yīng)用崩潰報(bào)告解決方案。
Crashlytics 提供了深刻且可付諸行動(dòng)的見解,甚至包括應(yīng)用崩潰時(shí)確切的代碼行號(hào)。你可以使用 crashlytics 來(lái)減少識(shí)別故障和修復(fù)故障的時(shí)間。
此外,它還提供了各種分析報(bào)告,例如出現(xiàn)頻率最高的崩潰,崩潰百分比等等。
Crashlytics 還包括 Crashlytics Beta,該服務(wù)可以讓你輕松地將預(yù)發(fā)行的 IOS 和 Android 應(yīng)用分發(fā)給測(cè)試人員,以便快速獲得反饋。
原文:https://medium.com/better-programming/six-years-of-lessons-what-i-learned-as-an-android-developer-a825b55db7f0
本文為 CSDN 翻譯,轉(zhuǎn)載請(qǐng)注明來(lái)源出處。
【End】