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

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

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

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

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

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

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

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