「本文已參與好文召集令活動,點擊查看:後端、大前端雙賽道投稿,2萬元獎池等你挑戰!」html
隨着技術團隊的擴大與開發人員的增加,軟件開發必然要實現工程化,所以用靜態掃描實現的代碼規範管理以及與Gitlab分支管理結合的實踐流程就出現了。前端
多人協做的項目中,基於代碼穩定性以及代碼安全(不安全的API使用和邏輯編寫)的考慮,必然要出現團隊內的代碼風格規範,而爲了解決「代碼編寫聽從風格規範全憑開發人員自覺、缺少提示、檢查和卡點機制」這一問題,靜態代碼掃描檢查在團隊協做的軟件工程項目是必不可缺的一環。android
日誌打印 必須使用統一封裝的打印方法,禁止使用System.out.print\android.util.Log,方便release版本禁止在 logcat 輸出信息出現數據泄露的狀況。git
錯誤示範github
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ......
Log.d("writelog", "start activity")
// ......
}
}
複製代碼
setHostnameVerifier 方法調用 禁止調用 setHostnameVerifier 方法設置 ALLOW_ALL_HOSTNAME_VERIFIER 屬性,以免中間人攻擊劫持,應用使用 STRICT_HOSTNAME_VERIFIER 屬性。後端
錯誤示範安全
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ......
val schemeregistry = SchemeRegistry()
val sslsocketfactory = SSLSocketFactory.getSocketFactory()
// set STRICT_HOSTNAME_VERIFIER
sslsocketfactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)
// ......
}
}
複製代碼
還有諸如必須給繼承Activity、Fragment的文件添加註釋方便理解;Activity必須繼承Activity基礎類;Fragment必須繼承Fragment基礎類等團隊開發規範問題。markdown
因爲咱們團隊開發已實現全Kotlin化,Kotlin經常使用的靜態代碼掃描方案有Detekt以及ktlint。app
對好比下: socket
因爲我這邊並不須要分析潛在性能與bug問題的功能,以及基於輕量化的目的,採用的是Kotlin官方推薦的ktlint工具。
咱們採起了項目中使用Gradle集成ktlint的方式來集成ktlint規則,可參考ktlint主頁。
...
configurations {
ktlint
}
...
dependencies {
...
ktlint("com.pinterest:ktlint:0.41.0") {
attributes {
attribute(Bundling.BUNDLING_ATTRIBUTE, getObjects().named(Bundling, Bundling.EXTERNAL))
}
}
...
}
...
task ktlint(type: JavaExec, group: "verification") {
description = "Check Kotlin code style."
classpath = configurations.ktlint
main = "com.pinterest.ktlint.Main"
args "-a", "src/**/*.kt", "--reporter=html,output=${buildDir}/ktlint.html"
}
check.dependsOn ktlint
task ktlintFormat(type: JavaExec, group: "formatting") {
description = "Fix Kotlin code style deviations."
classpath = configurations.ktlint
main = "com.pinterest.ktlint.Main"
args "-F", "src/**/*.kt"
}
複製代碼
靜態檢查代碼是否符合規範
Mac或者Lunix系統執行:./gradlew ktlint;
window系統執行:gradlew ktlint;
會執行代碼檢查任務,而後會在./app/build/文件夾生成ktlint.html報告。
自動修改代碼符合規範
Mac或者Lunix系統執行:./gradlew ktlintFormat;
window系統執行:gradlew ktlintFormat;
會執行自動修改代碼符合規範任務。
經過上文,咱們理解了爲什麼要進行靜態代碼掃描以及使用ktlint對項目代碼進行掃描檢查是否符合Kotlin官方代碼風格規範,固然在實際實踐中要如何限制團隊成員遵照規範,畢竟不可能強行要求團隊成員每次都使用gradle命令檢查代碼,這部份內容是咱們下一步要講解的內容。 若是個人文章對你有幫助或啓發,辛苦大佬們點個贊👍🏻,支持我一下。 若是有錯漏,歡迎大佬們指正,也歡迎你們一塊兒討論,感謝。