做者: LeanCloud weakishhtml
分享 2019 年 5 月 GitHub 上比較流行的 9 個和 Android 開發相關的開源項目,包括對話框、日曆、矢量繪圖組件,內存泄露檢測庫,Kotlin 的 linter、mock 庫、依賴注入框架等。android
square 開源的內存泄露檢測庫。git
使用起來極爲便捷,只需在 build.gradle
中引入依賴:github
dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-alpha-2'
}
複製代碼
LeakCanary 會自動檢測 debug build 中的內存泄露,並顯示提示。無需修改代碼,也不會影響正式發佈版本。web
GitHub 倉庫:square/leakcanary瀏覽器
美觀、可擴展的 Material Design 風格對話框。架構
Material Dialogs 採用模塊化架構,核心模塊(core
)包含了核心功能和基本功能,文本輸入框、文件選擇器、色彩選擇器、時間日期選擇器、彈出表單等功能做爲擴展模塊提供,可單獨引入。支持 AndroidX 生命週期組件。app
GitHub 倉庫:afollestad/material-dialogs框架
基於 RecyclerView 的日曆庫。jvm
這個庫借鑑了 iOS 的 JTAppleCalendar,提供了比較齊全的日曆視圖所需特性,支持定製樣式。
GitHub 倉庫:kizitonwose/CalendarView
VectorDrawable
和 AnimatedVectorDrawable
的超集。
VectorDrawable
提供了像素密度無關性——在任意設備上隨意縮放而不損失畫質。AnimatedVectorDrawable
在其基礎上添加了動畫特性。然而,它們有三大缺陷:
Kyrie 提供了 KyrieDrawable
類,支持 VectorDrawable
和 AnimatedVectorDrawable
的全部特性,同時改進了上述缺陷。
GitHub 倉庫:alexjlockwood/kyrie
面向 Kotlin 和 AndroidX,讓 Android 的運行時權限控制易於開發。
fun saveImage(bitmap: Bitmap) = runWithPermissions(WRITE_EXTERNAL_STORAGE) {
val stream = FileOutputStream(File(externalStorage, "hello.png"))
bitmap.compress(PNG, 100, stream)
}
複製代碼
上面的例子展現了 Assent 提供的簡潔緊湊的基於回調的 API。(固然,你仍是須要在 AndroidManifest.xml
裏聲明權限的,不然 Android 總會拒絕相應權限。)
GitHub 倉庫:afollestad/assent
開箱即用的 Kotlin linter:
gofmt
。注意「零配置」的意思是並不提供多種風格選項讓你選擇,可是你仍然能夠經過自行編寫規則來自定義 linter 的行爲。另外,ktlint 也會遵循 .editorconfig
中的設置。
ktlint 也可搭配 IntelliJ IDEA 使用。不過一般沒有這個必要,能夠直接使用 IDEA 內置的代碼格式化功能(效果和 ktlint 一致)。暫時也沒有 vscode 插件,不過能夠經過 sonarlint 曲線使用。
Kotlin 的 mock 測試庫,不只支持常規的單元測試,還支持在真機或模擬器上運行的 instrumented 測試。
mockk 提供了全面、強大的特性,能夠 mock 類、對象、私有函數、協程等多種結構(Android P 以前的版本 instrumented 測試有少數特性不支持)。
官網:mockk.io
面向 Kotlin 開發者的輕量依賴注入框架。
KOIN 提供了輕量的函數式依賴注入 DSL,無需代碼生成和反射。
class Controller(val service : BusinessService)
class BusinessService()
val myModule = module {
single { Controller(get()) }
single { BusinessService() }
}
class MyApplication : Application() {
override fun onCreate(){
super.onCreate()
startKoin {
androidContext(this@MyApplication)
modules(myModule)
}
}
}
複製代碼
Firefox Fenix 是 Firefox 的下一代 Android 瀏覽器,將來將取代 Firefox for Android (其實 Firefox for Android 的開發早已放緩,由於 Mozilla 將更多的精力投入到 Fenix 的開發中)。上個月,Mozilla 在 Google Player 上發佈了公測版(僅向報名測試的人員開放下載)。
Firefox Fenix 基於 GeckoView 和 Android components 開發。GeckoView 是 Mozilla 開源的 Android 庫,封裝了自家的 Gecko 瀏覽器引擎。Android 上的 Firefox Reality (面向 AR 設備的瀏覽器)和 Firefox Focus (主打極簡 UI 和隱私保護的瀏覽器)用的也是 GecokView。Android components 則是 Mozilla 使用 Kotlin 開發的一套 Android 組件庫,這套組件庫主要面向瀏覽器和類瀏覽器應用。順便提一下,因爲 Android components 使用 Kotlin 開發,Firefox Fenix 也瓜熟蒂落地使用 Kotlin 開發。
GitHub 倉庫:mozilla-mobile/fenix
上月初召開的 Google I/O 2019,宣佈 Kotlin 爲 Android 開發的首選語言,將來新的 Jetpack API 和特性將首先提供 Kotlin 支持,並建議新項目使用 Kotlin 編寫。很巧,上面介紹的 9 個開源項目,均使用 Kotlin 編寫。固然,其中很多是專門面向 Kotlin 的輔助開發工具,使用 Kotlin 編寫理所固然。可是幾款 Android 組件庫均使用 Kotlin 編寫(本文選取項目時僅考慮 GitHub 上的熱度(躥升速度),不考慮編寫語言爲 Java 仍是 Kotlin),Firefox 下一代瀏覽器基於 Kotlin 開發,LeakCanary 上個月發佈了 v2.0-alpha-2,2.0 版的一大改動就是使用 Kotlin 重寫,這些事實多多少少能從側面反映,Android 生態的重心正向 Kotlin 偏移。