เราในทีม ChromeOS มุ่งมั่นที่จะปรับปรุงเครื่องมือและเฟรมเวิร์กสำหรับนักพัฒนาซอฟต์แวร์ที่ช่วยให้นักพัฒนาแอป Android เพิ่มประสิทธิภาพแอปของตนสำหรับ Chromebook ได้อย่างราบรื่น ด้วยเหตุนี้ เราจึงต้องพิจารณาวิธีต่างๆ อย่างสม่ำเสมอเพื่อนำชุดเครื่องมือที่มีประสิทธิภาพมาสู่นักพัฒนาซอฟต์แวร์เพื่อปรับปรุงประสบการณ์การสร้างแอปสำหรับหน้าจอขนาดใหญ่และ ChromeOS
ChromeOS มีการพัฒนามาหลายปีเมื่อเกิดความท้าทายใหม่ๆ ความท้าทายอย่างหนึ่งคือการระบุปัญหาที่สำคัญให้วิศวกรทราบตั้งแต่เนิ่นๆ และบ่อยครั้ง กฎ Lint เป็นหัวใจสำคัญของคุณภาพ เนื่องจากจะให้สัญญาณแจ้งเตือนแก่นักพัฒนาแอปเกี่ยวกับปัญหาที่จะเกิดขึ้นหากไม่ได้รับการแก้ไข กฎการตรวจสอบที่อัปเดตแล้วของเราช่วยให้นักพัฒนาแอปมองเห็นได้มากขึ้นว่าแอปของตนทำงานบน ChromeOS อย่างไร โดยจะแสดงปัญหาทั้งด้านซอฟต์แวร์และฮาร์ดแวร์ ซึ่งจะทำให้เกิดปัญหาสำหรับแอปพลิเคชัน Android ที่ทำงานบนอุปกรณ์ ChromeOS อย่างแน่นอน
หากต้องการทราบบริบทเบื้องหลังเพิ่มเติมเกี่ยวกับการมีอยู่ของกฎการตรวจสอบโค้ดเหล่านี้และความสำคัญของกฎ โปรดอ่านบล็อกโพสต์ของเรา
กฎการตรวจสอบโค้ดเหล่านี้อยู่ที่ไหน
เราได้พัฒนาฟีเจอร์นี้อย่างต่อเนื่องมา 2-3 เดือนแล้ว ตามกำหนดการเปิดตัวของ Android Studio เราได้เปิดตัวกฎ Lint บางอย่างในบิลด์ Canary ของ Electric Eel ตอนนี้กฎการตรวจสอบบางส่วนเหล่านี้พร้อมใช้งานใน Flamingo Canary แล้ว เราจะพัฒนาฟีเจอร์เหล่านี้ต่อไปเพื่อให้พร้อมใช้งานใน Android Studio เวอร์ชันเสถียรในอีกไม่กี่เดือนข้างหน้า
อีกสิ่งสำคัญที่ควรทราบคือระบบจะเปิดใช้กฎเหล่านี้โดยค่าเริ่มต้นใน Android Studio เวอร์ชันใหม่กว่า เป้าหมายของเอกสารนี้คือการให้คำแนะนำที่ชัดเจนยิ่งขึ้นเกี่ยวกับวิธีที่เราต้องการช่วยวิศวกรสร้างแอปสำหรับ ChromeOS และหน้าจอขนาดใหญ่ในอนาคต
กฎ Lint ใหม่ (อัปเดตเมื่อ Flamingo Canary 3)
รองรับ ABI x86/x86_64
Chromebook ส่วนใหญ่ทำงานบนสถาปัตยกรรม Intel จึงทำให้เป็นแพลตฟอร์มสถาปัตยกรรม x86 เป็นหลัก หากต้องการให้ ChromeOS รองรับอย่างถูกต้องเมื่อรวมโค้ด NDK เป็นส่วนหนึ่งของไบนารี การมี x86 จะช่วยเพิ่มประสิทธิภาพเนื่องจากไม่ต้องแปลจากไลบรารี ARM ดังนั้น เราขอแนะนำอย่างยิ่งให้ทีมพัฒนาเพิ่มการรองรับสถาปัตยกรรม x86 หรือ x86_64 เนื่องจากจะช่วยเพิ่มประสิทธิภาพให้กับโค้ดดั้งเดิมใน ChromeOS หรืออุปกรณ์ Intel
การแก้ไข
หากเป็นไปได้ ให้เพิ่ม x86 และ x86_64 ภายใน abiSplits ใน build.gradle นอกจากนี้ โปรดตรวจสอบว่าคุณเพิ่มโค้ดลงในโฟลเดอร์ที่เหมาะสมเพื่อรองรับ ABI เหล่านี้ ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับ ABI ของ Android และการพูดคุยเรื่องการรองรับ ABI จาก ADS
หมายเหตุ: ตรวจสอบว่าไลบรารีของบุคคลที่สามที่รวมไว้ซึ่งกำลังใช้งานมีไบนารี x86 และ x86_64 ด้วย
ข้อจำกัดด้านฮาร์ดแวร์ของ ChromeOS
อุปกรณ์ ChromeOS ส่วนใหญ่มีชุดตัวอย่างเซ็นเซอร์ฮาร์ดแวร์และฟีเจอร์อื่นๆ น้อยกว่าโทรศัพท์ Android เป้าหมายของกฎนี้คือการแจ้งให้นักพัฒนาแอปทราบว่าหากคุณใช้ Flag <uses-feature> กับ android:required=true แอปของคุณจะไม่มีให้บริการใน Google Play Store บน ChromeOS เราขอแนะนำอย่างยิ่งให้ตรวจสอบว่าแอปไม่จำเป็นต้องใช้ฟีเจอร์ฮาร์ดแวร์โดยค่าเริ่มต้น เพื่อให้มั่นใจว่าผู้ใช้จะเข้าถึงแอปในอุปกรณ์ได้มากที่สุด แต่คุณสามารถเพิ่มโค้ดป้องกันเพื่อตรวจสอบฮาร์ดแวร์ที่เฉพาะเจาะจงในเวลาที่เรียกใช้แทนได้ ตัวอย่างเช่น
<uses-feature android:name="android.hardware.camera" android:required="true">
การแก้ไข
ตรวจสอบว่าฟีเจอร์ที่อยู่ในแอปพลิเคชันของคุณจำเป็นต้องใช้จริงหรือไม่ หากไม่จำเป็น ให้เปลี่ยนพารามิเตอร์ android:required เป็น false และเพิ่มการเขียนโปรแกรมเชิงรับเมื่อจำเป็นต้องมีการเรียก API ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับฟีเจอร์ที่ประกาศอย่างชัดเจน
กิจกรรมที่ปรับขนาดไม่ได้
โดยค่าเริ่มต้น Android Runtime สำหรับ ChromeOS ซึ่งใช้ Android R ขึ้นไปใน Chromebook จะเริ่มแอป Android ในแอปพลิเคชันเวอร์ชันโทรศัพท์หรือแท็บเล็ต โดยอิงตามสถานะ UI เริ่มต้น อย่างไรก็ตาม ยังมีตัวเลือกที่ 3 ซึ่งเป็นประสบการณ์การใช้งานที่ดีกว่าสำหรับผู้ใช้ ChromeOS นั่นก็คือโหมดปรับขนาดได้ การเปิดใช้ Flag นี้เป็นส่วนหนึ่งของกิจกรรมจะช่วยให้ผู้ใช้ที่ใช้แอปพลิเคชันในสภาพแวดล้อมแบบหลายหน้าต่างสามารถใช้ประโยชน์จากการปรับขนาดแอปพลิเคชันให้มีขนาดที่เหมาะสมได้ การเปลี่ยนแปลงเหล่านี้จะช่วยให้ผู้ใช้ปรับขนาด UI ให้ตรงกับความต้องการได้ หลังจากเพิ่มการเปลี่ยนแปลงเหล่านี้ลงในไฟล์ Manifest แล้ว ให้ทดสอบแอปพลิเคชันกับโปรแกรมจำลองเดสก์ท็อปที่อ้างอิงด้านล่าง
การแก้ไข
เพิ่มแอตทริบิวต์ resizableActivity="true" ลงในกิจกรรมในไฟล์ AndroidManifest.xml ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับข้อจำกัดของหน้าจอขนาดใหญ่
การเปลี่ยนแปลงการกำหนดค่า
ข้อควรระวังที่สำคัญอย่างหนึ่งเกี่ยวกับหน้าจอที่ปรับขนาดได้คือทุกครั้งที่ผู้ใช้เปลี่ยนขนาดของแอปพลิเคชัน ระบบจะเรียกใช้ onConfigurationChanged() หากแอปของคุณออกคำสั่งให้วาดใหม่ทั้งหมดภายในเมธอดนั้น จะมีผลต่อประสิทธิภาพที่เกี่ยวข้อง ปัจจุบันเรากำลังตรวจสอบเพื่อให้แน่ใจว่าไม่มีการเรียกใช้ finish() ภายใน onConfigurationChanged เนื่องจากคุณควรจัดการ savedInstanceState ด้วยความละเอียดที่มากขึ้นแทนที่จะบังคับให้วาดใหม่ทั้งหมด เราจะค้นหากรณีที่ประสิทธิภาพลดลงต่อไปและอัปเดตกฎนี้ตามความเหมาะสม
การแก้ไข
ตรวจสอบว่าไม่ได้เรียกใช้ finish() ภายใน onConfigurationChanged() API ในกิจกรรมและ Fragment ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับการจัดการการเปลี่ยนแปลงการกำหนดค่า
รองรับแป้นพิมพ์และเมาส์
เมื่อมีการนำ Jetpack Compose ไปใช้มากขึ้น เราจึงต้องการให้มั่นใจว่าการสร้างด้วยไลบรารีเหล่านั้นจะมีฟังก์ชันการทำงานสำหรับการรองรับเมาส์และคีย์บอร์ดต่อไปด้วย เมื่อเวลาผ่านไป เราจะปรับปรุงความสามารถในการใช้งานเมาส์ แป้นพิมพ์ แทร็กแพด และการโต้ตอบกับอุปกรณ์ต่อพ่วงอื่นๆ ต่อไป หากต้องการรับประสบการณ์พื้นฐาน คุณจะต้องอัปเดตการอ้างอิง Gradle เป็นเวอร์ชันขั้นต่ำที่จำเป็น
การแก้ไข
อัปเดต androidx.compose.foundation:foundation เป็นเวอร์ชัน 1.2 เป็นอย่างน้อย ดูข้อมูลเพิ่มเติมได้ที่บันทึกประจำรุ่นของ Compose
เคล็ดลับ: ผู้ใช้ 90% โต้ตอบกับแอปใน Chromebook โดยใช้แป้นพิมพ์และเมาส์ (แหล่งที่มา: ข้อมูลภายในของ Google ปี 2022*)
ความคิดเห็น
ทีมของเราพยายามปรับปรุงเครื่องมือและเอกสารประกอบเกี่ยวกับการเพิ่มประสิทธิภาพสำหรับหน้าจอขนาดใหญ่อยู่เสมอ ขั้นตอนสำคัญในกระบวนการนี้คือการส่งความคิดเห็นเกี่ยวกับความถูกต้องและประโยชน์ของกฎการตรวจสอบด้วยเครื่องมือวิเคราะห์ซอร์สโค้ดที่ใช้ใน Android Studio คุณทำได้โดยการแสดงความคิดเห็นสำหรับกฎ เมื่อกฎ Lint ปรากฏใน Android Studio ให้คลิก "แสดงความคิดเห็นเกี่ยวกับคำเตือนนี้" ระบบจะนำคุณไปยังกล่องโต้ตอบที่คล้ายกับกล่องด้านล่าง ยิ่งคุณให้ข้อมูลที่ถูกต้องและอธิบายได้ดีมากเท่าใด เราก็จะยิ่งทำการเปลี่ยนแปลงที่เหมาะสมได้อย่างรวดเร็ว
