ปรับปรุงคุณภาพรหัส Android ด้วยการวิเคราะห์รหัสแบบคงที่และตรวจสอบรันไทม์:
ขอแนะนำให้คุณเพิ่มการตรวจสอบเหล่านี้เมื่อคุณสร้างโครงการใหม่และแก้ไขปัญหากับการเช็คอินทุกครั้ง (เป็นส่วนหนึ่งของกระบวนการรวมอย่างต่อเนื่องของคุณ) มิฉะนั้นจะต้องมีความกล้าหาญและความอดทนอย่างมากเมื่อคุณเผชิญและแก้ไขข้อผิดพลาดจำนวนมาก
build.gradle : apply from: '../quality/static_analysis.gradle'
git remote add analysis https://github.com/BrianSpace/Android-Quality-Essentials.gitbuild.gradle : apply from: '../analysis/quality/static_analysis.gradle'
android {
...
lintOptions {
// Turn off analysis progress reporting by lint
quiet true
// Stop the gradle build if errors are found
abortOnError true
// Do not ignore lint warnings
ignoreWarnings false
// Treat warnings as errors
warningsAsErrors true
// Ignore rules list
ignore 'GoogleAppIndexingWarning' // Remove this if the app support App Indexing
}
...
}
build.gradle : dependencies {
.. .
debugCompile ' com.squareup.leakcanary:leakcanary-android:1.5.1 '
releaseCompile ' com.squareup.leakcanary:leakcanary-android-no-op:1.5.1 '
testCompile ' com.squareup.leakcanary:leakcanary-android-no-op:1.5.1 '
.. .
}Application ของคุณ (และอย่าลืมเพิ่มเข้าไปในรายการ): public class AndroidQualityEssentialsApplication extends Application {
@ Override
public void onCreate () {
super . onCreate ();
if ( BuildConfig . DEBUG ) {
StrictMode . setThreadPolicy ( new StrictMode . ThreadPolicy . Builder ()
. detectAll ()
. penaltyDeath ()
. build ());
StrictMode . setVmPolicy ( new StrictMode . VmPolicy . Builder ()
. detectAll ()
. penaltyDeath () // If violations are in Android itself or 3rd-party libs, use penaltyLog.
. build ());
// Avoid the process dedicated to LeakCanary for heap analysis.
if (! LeakCanary . isInAnalyzerProcess ( this )) {
LeakCanary . install ( this );
}
}
...
}
}gradlew check ในคอนโซลเพื่อเริ่มการวิเคราะห์แบบคงที่build/reports/ Directory ของโครงการที่คุณใช้ static_analysis.gradle อนุสัญญาการตั้งชื่อที่กำหนดไว้ในกฎสไตล์ไม่อนุญาตให้ใช้คำนำหน้าตัวอักษรตัวเดียวสำหรับชื่อฟิลด์สมาชิกเช่น "MMember" แต่ถ้าคุณชอบสไตล์นี้คุณสามารถเปลี่ยนคุณสมบัติ format ของโมดูล MemberName เป็น "^[az] [a-za-z0-9] $" หรือเปลี่ยนเป็น "^m [az] [a-za-z0-9] $" เพื่อบังคับคำนำหน้า "M"
สำหรับกฎ PMD USEUTILITIONCLASS จะพร้อมที่จะสร้างคลาสยูทิลิตี้หากคลาสของคุณมีเพียงฟิลด์และวิธีการคงที่เท่านั้น คุณเพียงแค่ต้อง:
public final class FileUtil {
private static Context appContext ;
private FileUtil () throws InstantiationException {
throw new InstantiationException ( "Utility class FileUtil should not be instantiated!" );
}
public static void init ( final Context context ) {
appContext = context . getApplicationContext ();
}
/**
* Get available cache directory. Prefer external over internal.
*/
@ NonNull
public static File getAvailableCacheDir () {
final File externalCacheDir = appContext . getExternalCacheDir ();
return externalCacheDir == null ? appContext . getCacheDir () : externalCacheDir ;
}
}กฎการวิเคราะห์แบบคงที่ทั้งหมดเป็นแนวปฏิบัติที่ดีที่สุดจากประสบการณ์ที่ผ่านมาของผู้คน แต่พวกเขาไม่ได้เป็นความจริงที่ไม่สามารถหักได้ กฎ PMD บางอย่างจำเป็นต้องขึ้นอยู่กับการตั้งค่าของคุณเอง:
ItemTypeT เพื่อการอ่านที่ดีกว่า คุณสามารถลบออกจากรายการ "ยกเว้น" หากคุณชอบการตั้งชื่อตัวอักษรเดียว การประชุมการตั้งชื่อถูกกำหนดไว้ในไฟล์คุณภาพ/checkstyle/naming_convention.xml มีการกำหนดกฎต่อไปนี้:
คุณสามารถปรับเปลี่ยนนิพจน์ทั่วไปตามที่คุณต้องการสำหรับโครงการของคุณเอง รัน gradlew checkFileNames หากคุณต้องการตรวจสอบเฉพาะการตั้งชื่อการประชุม
CheckStyle ใช้เพื่อตรวจสอบสไตล์รหัส Java กฎสไตล์ขึ้นอยู่กับคู่มือสไตล์ Google Java พร้อมการเปลี่ยนแปลงต่อไปนี้:
เรียกใช้ gradlew checkCodeStyle หากคุณต้องการตรวจสอบเฉพาะสไตล์รหัส หากคุณต้องการแยกไฟล์บางไฟล์เช่นรหัสบุคคลที่สามคุณสามารถเพิ่มรายการ exclude ในงาน checkCodeStyle ในไฟล์ Static_analysis.gradle
FindBugs สแกนรหัสของคุณสำหรับรูปแบบที่อาจส่งผลให้เกิดข้อบกพร่อง ไฟล์ที่จะถูกแยกออกจากการวิเคราะห์ถูกกำหนดไว้ที่นี่ เรียกใช้ gradlew findBugs หากคุณต้องการเรียกใช้ FindBugs เท่านั้น
PMD เป็นเครื่องวิเคราะห์รหัสแบบคงที่ที่สามารถตรวจจับข้อบกพร่องการเขียนโปรแกรมทั่วไป กฎถูกกำหนดในคุณภาพ/PMD/PMD-ruleset.xml รายการทั้งหมดของกฎสามารถดูได้ที่นี่ เรียกใช้ gradlew pmdCheck หากคุณต้องการเรียกใช้ PMD เท่านั้น
Android Lint เป็นเครื่องมือวิเคราะห์รหัสสแตติกเฉพาะ Android รายการตรวจสอบทั้งหมดอยู่ที่นี่ เรียกใช้ gradlew lint หากคุณต้องการเรียกใช้กฎผ้าสำลีเท่านั้น
โหมดที่เข้มงวดมีประโยชน์มากในการตรวจจับการทำงานที่ช้าในเธรด UI และการรั่วไหลของทรัพยากร โดยเฉพาะอย่างยิ่ง ThreadPolicy จะตรวจจับ Disk/Network I/O และการทำงานที่ช้าใน UI TheAD ในขณะที่ VMPolicy จะตรวจจับการรั่วไหลของทรัพยากร สำหรับรายละเอียดดูเอกสารสำหรับ threadpolicy.builder และ vmpolicy.builder
Leakcanary สามารถช่วยตรวจจับการรั่วไหลของหน่วยความจำ มี UI ที่ดีมากในการรายงานการรั่วไหลและแสดงห่วงโซ่อ้างอิงทั้งหมดเพื่อให้คุณสามารถค้นหาตำแหน่งที่จะแก้ไขการรั่วไหลได้อย่างง่ายดาย
The MIT License
Copyright (c) 2017-2017 AndroidQualityEssentials project contributors
https://github.com/BrianSpace/AndroidQualityEssentials/graphs/contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.