Google Home ลดสาเหตุอันดับ 1 ของการขัดข้องได้ 33%
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

แอป Google Home
ช่วยตั้งค่า จัดการ และควบคุมอุปกรณ์ Google Home, Google Nest และ Chromecast
รวมถึงผลิตภัณฑ์หลายพันรายการในบ้านที่เชื่อมต่อ เช่น หลอดไฟ กล้อง
ตัวควบคุมอุณหภูมิ และอีกมากมาย
ทีมวิศวกรที่อยู่เบื้องหลังแอป Google Home ได้รับประโยชน์จากการใช้ Kotlin และไลบรารี Android Jetpack เพื่อเพิ่มประสิทธิภาพการทำงานของวิศวกรและความพึงพอใจของนักพัฒนาแอป
สิ่งที่พวกเขาทำ
ทีม Google Home ตัดสินใจที่จะรวม Kotlin ไว้ในโค้ดเบสเพื่อทำให้การเขียนโปรแกรมมีประสิทธิภาพมากขึ้น และเพื่อเปิดใช้ฟีเจอร์ภาษาที่ทันสมัย เช่น var/val, การแคสต์อัจฉริยะ, คอรุทิน และอื่นๆ ณ เดือนมิถุนายน 2020 โค้ดเบสประมาณ 30% เขียนด้วย Kotlin และเราสนับสนุนให้ใช้ Kotlin ในการพัฒนาฟีเจอร์ใหม่ทั้งหมด
นอกจากนี้ ทีมยังใช้ไลบรารี Jetpack เพื่อเพิ่มความเร็วของนักพัฒนาซอฟต์แวร์ ลดความจำเป็นในการบำรุงรักษาโค้ด Boilerplate และลดปริมาณโค้ดที่จำเป็น นอกจากนี้ ไลบรารี Jetpack ยังช่วยให้โค้ดของแอปทดสอบได้ง่ายขึ้น เนื่องจากมีขอบเขตการทำงานและ API ที่ชัดเจนกว่า
ผลลัพธ์
"ประสิทธิภาพและการเขียนโค้ดน้อยลงแต่ทำได้มากขึ้นคือ "ความเร็ว" ที่คุณจะได้รับจาก Kotlin" - Jared Burrows วิศวกรซอฟต์แวร์ของ Google Home
การเปลี่ยนไปใช้ Kotlin ส่งผลให้ปริมาณโค้ดที่จำเป็นลดลง
เมื่อเทียบกับโค้ด Java ที่มีอยู่ ตัวอย่างหนึ่งคือการใช้คลาสข้อมูล
และปลั๊กอิน Parcelize: คลาสที่เคยมี 126 บรรทัดที่เขียนด้วยมือใน
Java ตอนนี้สามารถแสดงได้ใน Kotlin เพียง 23 บรรทัด ซึ่งลดลงถึง 80%
นอกจากนี้ ระบบยังสร้างวิธีการแบ่งเท่าๆ กันและวิธีการแบ่งพัสดุโดยอัตโนมัติ
และอัปเดตให้เป็นปัจจุบันอยู่เสมอได้ด้วย นอกจากนี้ เรายังลดความซับซ้อนของลูปที่ซ้อนกันและการตรวจสอบการกรองหลายรายการ
โดยใช้วิธีการแบบฟังก์ชันที่มีใน Kotlin
เนื่องจาก Kotlin สามารถทำให้ค่า Null เป็นส่วนหนึ่งของภาษาได้ จึงหลีกเลี่ยงสถานการณ์ที่ซับซ้อนได้ เช่น เมื่อการใช้คำอธิบายประกอบค่า Null ใน Java อย่างไม่สอดคล้องกันอาจทำให้พลาดข้อบกพร่อง นับตั้งแต่ที่ทีมเริ่มย้ายข้อมูลเพื่อพัฒนาฟีเจอร์ใหม่ๆ ด้วย Kotlin ทีมก็พบว่า NullPointerException ลดลง 33%
เนื่องจากข้อขัดข้องประเภทนี้เป็นข้อขัดข้องที่พบบ่อยที่สุด
ใน Google Play Console
การลดข้อขัดข้องประเภทนี้จึงช่วยปรับปรุงประสบการณ์ของผู้ใช้ได้อย่างมาก
สำหรับแอปขนาดใหญ่ที่มีการพัฒนามาอย่างต่อเนื่อง เช่น Google Home ซึ่งมีโค้ดมากกว่าล้านบรรทัด การค่อยๆ เพิ่มไลบรารี Jetpack จะเป็นประโยชน์ การรวม
ไลบรารีเหล่านี้ช่วยให้ทีมสามารถรวมและแทนที่โซลูชันที่ปรับแต่งเอง
บางครั้งอาจใช้เพียงไลบรารีเดียวด้วยซ้ำ เนื่องจากไลบรารี Jetpack ช่วยให้วิศวกร
ปฏิบัติตามแนวทางปฏิบัติแนะนำและลดความซับซ้อนของโค้ดได้ (เช่น การใช้
Room หรือ
ConstraintLayout) จึงทำให้โค้ดอ่านง่ายขึ้นด้วย
ทีมงานถือว่าไลบรารี Jetpack ใหม่ๆ หลายรายการเป็น "สิ่งที่ต้องมี"
รวมถึง ViewModel และ
LiveData ซึ่งทั้ง 2 รายการนี้มีการใช้งาน
อย่างกว้างขวางในโค้ดเบสของ Google Home
ทีมแอป Google Home พบว่าการผสานรวม Jetpack KTX กับโครูทีน Kotlin
มีประโยชน์อย่างยิ่ง ตอนนี้ทีมสามารถหลีกเลี่ยงข้อบกพร่องที่ซับซ้อนในการเขียนโปรแกรมแบบอะซิงโครนัสได้โดยการเชื่อมโยงโครูทีนกับคอมโพเนนต์ที่รับรู้ถึงวงจร เช่น ViewModel
Java เป็นเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
เริ่มต้นใช้งาน
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเขียนแอป Android ใน Kotlin
และการใช้ไลบรารี Android Jetpack
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2020-07-13 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2020-07-13 UTC"],[],[],null,["# Google Home reduces #1 cause of crashes by 33%\n\nThe [Google Home app](https://play.google.com/store/apps/details?id=com.google.android.apps.chromecast.app&hl=en_US)\nhelps set up, manage, and control your Google Home, Google Nest, and Chromecast\ndevices---plus thousands of connected home products like lights, cameras,\nthermostats, and more.\n\nThe engineering team behind the Google Home app benefits from using Kotlin and\nAndroid Jetpack libraries to boost engineering productivity and developer\nhappiness.\n\nWhat they did\n-------------\n\nThe Google Home team decided to incorporate Kotlin into their codebase to make\nprogramming more productive and to enable the usage of modern language features\nlike var/val, smart casts, coroutines, and more. **As of June 2020, about 30% of\nthe codebase is written in Kotlin**, and Kotlin development is encouraged for\nall new features.\n\nThe team also adopted Jetpack libraries to improve developer velocity, decrease\nthe need for boilerplate code maintenance, and reduce the necessary amount of\ncode. Jetpack libraries also helped make their code more testable, since there\nare clearer functional boundaries and APIs.\n\nResults\n-------\n\n*\"Efficacy and writing less code that does more is the 'speed' increase you can\nachieve with Kotlin.\" - Jared Burrows, Software Engineer on Google Home*\n\nSwitching to Kotlin resulted in a reduction in the amount of required code,\ncompared to the equivalent of existing Java code. One example is the use of data\nclasses and the Parcelize plugin: **a class which was 126 hand-written lines in\nJava can now be represented in just 23 lines in Kotlin---an 80% reduction.**\nAdditionally, equality and parcelizing methods can be automatically generated\nand kept up to date. Many nested loops and filtering checks were also simplified\nusing the functional methods available in Kotlin.\n\nBecause Kotlin can make nullability a part of the language, tricky situations\ncan be avoided, like when inconsistent usage of nullability annotations in Java\nmight lead to a missed bug. **Since the team started migrating to developing new\nfeatures with Kotlin, they saw a 33% decrease in NullPointerExceptions** .\nSince this is the [most common crash\ntype on Google Play Console](/topic/performance/vitals/crash#prevent-crashes-null-pointer),\nreducing them led to a dramatically improved user experience.\n\nWith a large, mature app like Google Home---which has over a million lines of\ncode---it's helpful to be able to gradually add Jetpack libraries. Incorporating\nthem allowed the team to consolidate and replace custom tailored solutions,\nsometimes even with a single library. Since Jetpack libraries can help engineers\nfollow best practices and be less verbose (for example, using\n[Room](/training/data-storage/room) or\n[ConstraintLayout](/training/constraint-layout)), readability was increased as\nwell. The team considers many of the newer Jetpack libraries 'must-haves,'\nincluding [ViewModel](/topic/libraries/architecture/viewmodel) and\n[LiveData](/topic/libraries/architecture/livedata), both of which are used\nextensively in the Google Home codebase.\n\nThe Google Home app team found the Jetpack KTX integrations with Kotlin\ncoroutines to be especially helpful. The team is now able to avoid tricky\nasynchronous programming bugs by associating coroutines with lifecycle-aware\ncomponents like [ViewModel](/topic/libraries/architecture/viewmodel).\n\n*Java is a registered trademark of Oracle and/or its affiliates.*\n\nGet Started\n-----------\n\nLearn more about [writing Android apps in Kotlin](/kotlin)\nand [using Android Jetpack libraries](/jetpack)."]]