ปัญหาที่ทราบเกี่ยวกับ Android Studio และปลั๊กอิน Android Gradle

หน้านี้ติดตามปัญหาที่ทราบแล้วเกี่ยวกับ Android Studio Narwhal และปลั๊กอิน Android Gradle 8.11.0 หากพบปัญหาที่ไม่ได้ระบุไว้ที่นี่ โปรดรายงานข้อบกพร่อง

อัปเกรดเป็นเวอร์ชันตัวอย่าง: Android Studio และปลั๊กอิน Android Gradle แต่ละรุ่นมีเป้าหมายเพื่อปรับปรุงความเสถียรและประสิทธิภาพ รวมถึงเพิ่มฟีเจอร์ใหม่ๆ หากต้องการสัมผัสประโยชน์ของการเปิดตัวที่จะมีขึ้นในตอนนี้ ให้ดาวน์โหลดและติดตั้ง Android Studio Preview

ปัญหาที่ทราบเกี่ยวกับ Android Studio

ส่วนนี้จะอธิบายปัญหาที่ทราบใน Android Studio เวอร์ชันเสถียรล่าสุด

การเรียกใช้การกำหนดค่าโดยไม่มี "ก่อนเปิดตัว" ที่รับรู้ Gradle จะทำให้เกิดข้อผิดพลาดในการติดตั้งใช้งาน

มีปัญหาใน Android Studio Ladybug Feature Drop Canary 9 ที่นำข้อมูลการกำหนดค่าการเรียกใช้ ออกจากโปรเจ็กต์ที่เปิดด้วยเวอร์ชันดังกล่าว หากคุณเปิดโปรเจ็กต์ด้วยเวอร์ชันดังกล่าวในบางครั้ง และการเรียกใช้แอปทำให้เกิดข้อผิดพลาด "กำลังโหลดอาร์ติแฟกต์บิลด์" ให้ตรวจสอบว่าการกำหนดค่าการเรียกใช้ที่ใช้งานอยู่มีขั้นตอน "Gradle-aware Make" ในส่วน "ก่อนเปิดตัว" หากต้องการยืนยัน ให้คลิกเรียกใช้/แก้ไขข้อบกพร่องการกำหนดค่า > แก้ไขการกำหนดค่า แล้วคลิก การกำหนดค่าการเรียกใช้ที่ใช้งานอยู่ และยืนยันว่ามีขั้นตอน "Gradle-aware Make" ในส่วน "ก่อนเปิดตัว" ขออภัย Android Studio ไม่สามารถแก้ไขปัญหานี้โดยอัตโนมัติได้เนื่องจากอาจมีการตั้งค่าการเรียกใช้บางอย่างโดยเจตนาโดยไม่มีขั้นตอน "Gradle-aware Make"

"ใช้การเปลี่ยนแปลงและกิจกรรมรีสตาร์ท" ไม่รีสตาร์ทกิจกรรมในอุปกรณ์หรือโปรแกรมจำลอง API ระดับ 35

เมื่อคุณนำการเปลี่ยนแปลงโค้ดไปใช้กับอุปกรณ์ API 35 โดยใช้ "ใช้การเปลี่ยนแปลงและรีสตาร์ทกิจกรรม" ระบบจะไม่รีสตาร์ทแอปและคุณจะไม่ เห็นผลของการเปลี่ยนแปลง หากเรียกใช้แอปพลิเคชันอีกครั้ง คุณจะเห็น ผลลัพธ์ของการเปลี่ยนแปลงโค้ด ทีมของเรากำลังตรวจสอบเรื่องนี้อย่างเต็มที่

หน้าต่างผู้ช่วย Firebase แสดงข้อความแสดงข้อผิดพลาด

หากหน้าต่างผู้ช่วย Firebase (เครื่องมือ > Firebase จากเมนูหลัก) แสดงข้อความแสดงข้อผิดพลาด ให้ล้างแคชและรีสตาร์ท Android Studio เพื่อแก้ไขข้อผิดพลาด

แยกมุมมองโดยใช้ตัวตรวจสอบเลย์เอาต์ไม่ได้

ความสามารถในการแยกมุมมองโดยใช้เครื่องมือตรวจสอบเลย์เอาต์ที่ฝังอยู่ไม่พร้อมใช้งานชั่วคราว เรากำลังแก้ไขปัญหานี้ในรุ่นต่อๆ ไป

คุณตรวจสอบโหนด Compose บางรายการไม่ได้โดยใช้เครื่องมือตรวจสอบเลย์เอาต์

หากคุณสังเกตเห็นว่าโหนด Compose บางรายการตรวจสอบไม่ได้เมื่อใช้ Layout Inspector สาเหตุอาจเกิดจากข้อบกพร่อง ซึ่งได้รับการแก้ไขแล้วใน Compose เวอร์ชัน 1.5.0-alpha04 หากพบปัญหานี้ โปรดอัปเกรดเป็น Compose เวอร์ชัน 1.5.0-alpha04 ขึ้นไป

ข้อผิดพลาดเมื่อแสดงตัวอย่าง Compose

ตั้งแต่ Android Studio Chipmunk เป็นต้นไป หากคุณเห็น java.lang.NoSuchFieldError: view_tree_saved_state_registry_owner หรือ java.lang.ClassNotFoundException: androidx.savedstate.R$id ในแผงปัญหา โปรดตรวจสอบว่าได้รวมการขึ้นต่อกันของ debugImplementation กับ androidx.lifecycle:lifecycle-viewmodel-savedstate ไว้ในโมดูลแล้ว

หากเห็น java.lang.NoSuchFieldError: view_tree_lifecycle_owner ในแผงปัญหา โปรดตรวจสอบว่าได้รวมการขึ้นต่อกันของ debugImplementation กับ androidx.lifecycle:lifecycle-runtime ในโมดูลแล้ว

หากเห็น java.lang.NoClassDefFoundError: Could not initialize class androidx.customview.poolingcontainer.PoolingContainer หรือ java.lang.NoClassDefFoundError: androidx/customview/poolingcontainer/PoolingContainerListener ในแผงปัญหา โปรดตรวจสอบว่าได้รวมการขึ้นต่อกันของ debugImplementation กับ androidx.customview:customview-poolingcontainer ในโมดูลแล้ว

ข้อผิดพลาดเมื่อใช้รหัสผ่านที่แตกต่างกันสำหรับคีย์และคีย์สโตร์

ตั้งแต่เวอร์ชัน 4.2 เป็นต้นไป Android Studio จะทำงานบน JDK 11 การอัปเดตนี้ ทำให้เกิดการเปลี่ยนแปลงลักษณะการทำงานพื้นฐานที่เกี่ยวข้องกับคีย์การลงนาม

เมื่อไปที่สร้าง > สร้าง App Bundle / APK ที่ลงนามแล้ว และพยายามกำหนดค่า App Signing สำหรับ App Bundle หรือ APK การป้อนรหัสผ่านที่แตกต่างกันสำหรับคีย์และ Keystore อาจทำให้เกิดข้อผิดพลาดต่อไปนี้

Key was created with errors:
Warning: Different store and Key passwords not supported for PKCS12 Key stores

หากต้องการแก้ปัญหานี้ ให้ป้อนรหัสผ่านเดียวกันสำหรับทั้งคีย์และ ที่เก็บคีย์

Android Studio ไม่เริ่มทำงานหลังจากติดตั้งเวอร์ชัน 4.2

Studio จะพยายามนำเข้า .vmoptions ก่อนหน้าและล้างข้อมูลเพื่อให้ทำงานร่วมกับตัวเก็บขยะที่ JDK 11 ใช้ได้ หากกระบวนการดังกล่าวล้มเหลว IDE อาจไม่เริ่มทำงานสำหรับผู้ใช้บางรายที่ ตั้งค่าตัวเลือก VM ที่กำหนดเองในไฟล์ .vmoptions

หากต้องการแก้ปัญหานี้ เราขอแนะนำให้แสดงความคิดเห็นในตัวเลือกที่กำหนดเอง ใน .vmoptions (โดยใช้เครื่องหมาย "#") ไฟล์ .vmoptions จะอยู่ในตำแหน่งต่อไปนี้

Windows

C:\Users\YourUserName\AppData\[Local|Roaming]\Google\AndroidStudio4.2\studio64.exe.vmoptions

macOS

~/Library/Application Support/Google/AndroidStudio4.2/studio.vmoptions

Linux

~/.config/Google/AndroidStudio4.2/studio64.vmoptions

หาก Studio ยังคงไม่เริ่มทำงานหลังจากลองใช้การแก้ปัญหานี้แล้ว โปรดดูStudio ไม่เริ่มทำงานหลังการอัปเกรด ด้านล่าง

แอปที่ใช้เครื่องมือตรวจสอบฐานข้อมูลขัดข้องในโปรแกรมจำลอง Android 11

แอปที่ใช้ Database Inspector อาจขัดข้องเมื่อเรียกใช้ในโปรแกรมจำลอง Android 11 โดยมีข้อผิดพลาดคล้ายกับข้อผิดพลาดต่อไปนี้ปรากฏใน Logcat

 Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR)

หากต้องการแก้ไขปัญหานี้ ให้อัปเกรดโปรแกรมจำลอง Android 11 เป็นเวอร์ชัน 9 ขึ้นไปโดยไปที่เครื่องมือ > SDK Manager ในแท็บ SDK Platforms ให้เลือกช่องที่ระบุว่าแสดงรายละเอียดแพ็กเกจ แล้วเลือกการแก้ไขเวอร์ชัน 9 ขึ้นไปของ โปรแกรมจำลอง Android 11

Studio ไม่เริ่มทำงานหลังการอัปเกรด

หาก Studio ไม่เริ่มทำงานหลังจากอัปเกรด ปัญหาอาจเกิดจากการกำหนดค่า Android Studio ที่ไม่ถูกต้องซึ่งนำเข้าจาก Android Studio เวอร์ชันก่อนหน้า หรือปลั๊กอินที่ไม่เข้ากัน วิธีแก้ปัญหาชั่วคราวคือลองลบ (หรือเปลี่ยนชื่อเพื่อ สำรองข้อมูล) ไดเรกทอรีด้านล่างนี้ ทั้งนี้ขึ้นอยู่กับเวอร์ชัน Android Studio และระบบปฏิบัติการ แล้วเริ่ม Android Studio อีกครั้ง การดำเนินการนี้จะรีเซ็ต Android Studio เป็นสถานะเริ่มต้นและนำปลั๊กอินของบุคคลที่สามทั้งหมดออก

สำหรับ Android Studio 4.1 ขึ้นไป ให้ทำดังนี้

  • Windows: %APPDATA%\Google\AndroidStudio<version>
    ตัวอย่าง: C:\Users\your_user_name\AppData\Roaming\Google\AndroidStudio4.1

  • macOS: ~/Library/Application Support/Google/AndroidStudio<version>
    ตัวอย่าง: ~/Library/Application Support/Google/AndroidStudio4.1

  • Linux: ~/.config/Google/AndroidStudio<version> และ ~/.local/share/Google/AndroidStudio<version>
    ตัวอย่าง: ~/.config/Google/AndroidStudio4.1 และ ~/.local/share/Google/AndroidStudio4.1

สำหรับ Android Studio 4.0 และเก่ากว่า

  • Windows: %HOMEPATH%\.AndroidStudio<version>\config
    ตัวอย่าง: C:\Users\your_user_name\.AndroidStudio3.6\config

  • macOS: ~/Library/Preferences/AndroidStudio<version>
    ตัวอย่าง: ~/Library/Preferences/AndroidStudio3.6

  • Linux: ~/.AndroidStudio<version>/config
    ตัวอย่าง: ~/.AndroidStudio3.6/config

โปรดทราบว่าไดเรกทอรีการกำหนดค่าสำหรับ Android Studio รุ่น Canary และเบต้าคือ PreviewX.Y แทนที่จะเป็น X.Y สำหรับ <version> เช่น Android Studio 4.1 Canary Builds ใช้ AndroidStudioPreview4.1 แทนไดเรกทอรี AndroidStudio4.1 ที่ใช้สำหรับรุ่นที่พร้อมใช้งานและรุ่นที่เสถียร

ปัญหาการคอมไพล์ในโปรเจ็กต์ Kotlin Multiplatform

ข้อผิดพลาดในการคอมไพล์อาจเกิดขึ้นในโค้ด Kotlin MPP เนื่องจากไม่มีสัญลักษณ์ การอัปเกรดปลั๊กอิน Kotlin เป็นเวอร์ชัน 1.4 น่าจะช่วยแก้ปัญหานี้ได้

ความขัดแย้งในการแมปแป้นพิมพ์ใน Linux

ใน Linux แป้นพิมพ์ลัดบางรายการจะขัดแย้งกับแป้นพิมพ์ลัดเริ่มต้นของ Linux และแป้นพิมพ์ลัดของโปรแกรมจัดการหน้าต่างยอดนิยม เช่น KDE และ GNOME แป้นพิมพ์ลัดที่ขัดแย้งกันเหล่านี้อาจทำงานไม่เป็นไปตามที่คาดไว้ใน Android Studio

ดูข้อมูลเพิ่มเติมเกี่ยวกับปัญหานี้ (รวมถึงวิธีแก้ปัญหาเบื้องต้นที่อาจเป็นไปได้) ได้ ในเครื่องมือติดตามข้อบกพร่องของ IntelliJ

ข้อความ UI ขนาดเล็กใน ChromeOS

ใน ChromeOS ข้อความอาจมีขนาดเล็กกว่าในรุ่นก่อนๆ มาก หากต้องการแก้ปัญหานี้ ให้ทำดังนี้

  1. เปิดหน้าต่างการตั้งค่าโดยคลิกไฟล์ > การตั้งค่า
  2. ไปที่ลักษณะที่ปรากฏและลักษณะการทำงาน > ลักษณะที่ปรากฏ
  3. เลือกใช้แบบอักษรที่กำหนดเอง
  4. เพิ่มขนาดแบบอักษร
  5. ในหน้าต่างการตั้งค่า ให้ไปที่เอดิเตอร์ > แบบอักษร
  6. เพิ่มขนาดแบบอักษร
  7. คลิกตกลง

การแก้ไขโค้ด

ส่วนนี้จะอธิบายปัญหาที่ทราบเกี่ยวกับเครื่องมือแก้ไขโค้ด

การป้อนข้อมูลด้วยแป้นพิมพ์ค้าง - ปัญหา "iBus" ใน Linux

การโต้ตอบที่ทราบ บางอย่างระหว่าง Daemon ของ iBus ใน Linux กับ Android Studio ในบาง สถานการณ์ IDE จะหยุดตอบสนองต่อการป้อนข้อมูลจากแป้นพิมพ์หรือเริ่มป้อน อักขระแบบสุ่ม ข้อบกพร่องนี้เกิดจากการซิงโครไนซ์ที่ขาดหายไปบางส่วน ระหว่าง iBus กับ XLib + AWT และมีการรายงานไปยังต้นทางที่ JetBrains และ iBus แล้ว ปัจจุบันมีวิธีแก้ปัญหาชั่วคราว 3 วิธีสำหรับปัญหานี้

  • วิธีแก้ปัญหา 1: บังคับให้ iBus เข้าสู่โหมดพร้อมกัน ก่อนเริ่ม Android Studio ให้เรียกใช้คำสั่งต่อไปนี้ในบรรทัดคำสั่ง
    $ IBUS_ENABLE_SYNC_MODE=1 ibus-daemon -xrd
  • วิธีแก้ปัญหาที่ 2: ปิดใช้การป้อนข้อมูล iBus ใน Android Studio หากต้องการปิดใช้การป้อนข้อมูล iBus สำหรับ Android Studio เท่านั้น ให้เรียกใช้คำสั่งต่อไปนี้ในบรรทัดคำสั่ง
    $ XMODIFIERS= ./bin/studio.sh
    วิธีแก้ปัญหานี้จะปิดใช้เฉพาะวิธีการป้อนข้อมูลสำหรับ Android Studio เท่านั้น ไม่ใช่ แอปพลิเคชันอื่นๆ ที่คุณอาจใช้งานอยู่ โปรดทราบว่าหากรีสตาร์ท Daemon ขณะที่ Android Studio ทำงานอยู่ (เช่น โดยการเรียกใช้ ibus-daemon -rd) คุณจะปิดใช้ Input Method สำหรับแอปพลิเคชันอื่นๆ ทั้งหมด และอาจทำให้ JVM ของ Android Studio ขัดข้องด้วย ข้อผิดพลาดในการแบ่งส่วน
  • วิธีแก้ปัญหาที่ 3: ตรวจสอบการเชื่อมโยงแป้นพิมพ์ลัดอีกครั้งเพื่อให้แน่ใจว่าไม่ได้ตั้งค่าแป้นพิมพ์ลัดสำหรับป้อนข้อมูลถัดไปเป็น Control+Space เนื่องจากแป้นพิมพ์ลัดนี้เป็นแป้นพิมพ์ลัดสำหรับการเติมโค้ดใน Android Studio ด้วย Ubuntu 14.04 (Trusty) ทำให้ Super+Space เป็นทางลัดเริ่มต้น แต่การตั้งค่าจากเวอร์ชันก่อนหน้า อาจยังคงอยู่ หากต้องการตรวจสอบการเชื่อมโยงแป้นพิมพ์ลัด ให้เรียกใช้ ibus-setup ในบรรทัดคำสั่งเพื่อเปิดหน้าต่างค่ากำหนดของ IBus ในส่วนแป้นพิมพ์ลัด ให้ตรวจสอบวิธีการป้อนข้อมูลถัดไป หากตั้งค่าเป็น Control+Space ให้เปลี่ยนเป็น Super+Space หรือแป้นพิมพ์ลัดอื่นที่คุณต้องการ

การกำหนดค่าโปรเจ็กต์

ส่วนนี้จะอธิบายปัญหาที่ทราบซึ่งเกี่ยวข้องกับการกำหนดค่าโปรเจ็กต์และการซิงค์ Gradle

การซิงค์ Gradle ไม่สำเร็จ: Broken Pipe

ปัญหาคือ Daemon ของ Gradle พยายามใช้ IPv4 แทน IPv6

  • วิธีแก้ปัญหาที่ 1: ใน Linux ให้ใส่ข้อมูลต่อไปนี้ใน ~/.profile หรือ ~/.bash_profile
    export _JAVA_OPTIONS="-Djava.net.preferIPv6Addresses=true"
  • วิธีแก้ปัญหาเฉพาะหน้า 2: ในไฟล์ vmoptions ของ Android Studio ให้เปลี่ยนบรรทัด -Djava.net.preferIPv4Addresses=true เป็น -Djava.net.preferIPv6Addresses=true ดูข้อมูลเพิ่มเติมได้ที่ คู่มือผู้ใช้เครือข่าย IPv6

ข้อผิดพลาด "ไม่ได้ตรวจสอบสิทธิ์เพียร์" จากการซิงค์ Gradle หรือ SDK Manager

สาเหตุหลักของข้อผิดพลาดเหล่านี้คือไม่มีใบรับรองใน $JAVA_HOME/jre/lib/certificates/cacerts หากต้องการแก้ไขข้อผิดพลาดเหล่านี้ ให้ทำดังนี้

  • หากคุณใช้พร็อกซี ให้ลองเชื่อมต่อโดยตรง หากการเชื่อมต่อโดยตรงใช้งานได้ คุณอาจต้องใช้ keytool เพื่อเพิ่มใบรับรองของพร็อกซีเซิร์ฟเวอร์ลงในไฟล์ cacerts เพื่อเชื่อมต่อผ่านพร็อกซี
  • ติดตั้ง JDK ที่รองรับและไม่มีการแก้ไขอีกครั้ง เราพบปัญหาที่ทราบ ซึ่งส่งผลกระทบต่อผู้ใช้ Ubuntu และทำให้/etc/ssl/certs/java/cacerts ว่างเปล่า หากต้องการแก้ปัญหานี้ ให้ดำเนินการต่อไปนี้ในบรรทัดคำสั่ง
    sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

การติดตั้งใช้งาน

ส่วนนี้อธิบายปัญหาที่ทราบแล้วเกี่ยวกับการติดตั้งใช้งานแอปในอุปกรณ์ที่เชื่อมต่อ

[Mac OS เท่านั้น] ระบบไม่ใช้การอัปเดตแบบเพิ่มเนื่องจากปัญหาเกี่ยวกับการดูไฟล์ Gradle ในโปรเจ็กต์ที่บันทึกไว้ใน /System/Volumes/Data

ปัญหา Gradle 18149 ส่งผลต่อปลั๊กอิน Android Gradle เวอร์ชัน 7.0 ขึ้นไปเนื่องจากต้องใช้ Gradle เวอร์ชัน 7.0 ขึ้นไป ตั้งแต่ Gradle 7.0 เป็นต้นไป ระบบจะเปิดใช้การตรวจสอบไฟล์โดยค่าเริ่มต้น หากคุณทำงานใน Mac OS และบันทึกโปรเจ็กต์ไว้ใน /System/Volumes/Data การดูไฟล์ Gradle จะติดตามการเปลี่ยนแปลงไฟล์อย่างไม่ถูกต้อง ซึ่งจะทำให้ระบบบิลด์ไม่เห็นการเปลี่ยนแปลงไฟล์ใดๆ และจะไม่ อัปเดต APK จากนั้นโค้ดการติดตั้งใช้งานแบบเพิ่มจะ ไม่ทำอะไรเลยเนื่องจากสถานะ APK ในเครื่องเหมือนกับในอุปกรณ์

หากต้องการแก้ปัญหานี้ คุณควรย้ายไดเรกทอรีของโปรเจ็กต์ไปยังไดเรกทอรีผู้ใช้ ซึ่งอยู่ภายใต้ /Users/username จากนั้นระบบบิลด์จะได้รับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงไฟล์อย่างถูกต้องโดยการตรวจสอบไฟล์ Gradle และจะใช้การเปลี่ยนแปลงแบบเพิ่มทีละรายการได้สำเร็จ

HAXM ของโปรแกรมจำลอง Android ใน macOS High Sierra

โปรแกรมจำลอง Android ใน macOS High Sierra (10.13) ต้องใช้ HAXM 6.2.1 ขึ้นไปเพื่อให้มีความเข้ากันได้และความเสถียรที่ดีที่สุดกับ macOS อย่างไรก็ตาม macOS 10.13 มีกระบวนการที่ซับซ้อนกว่าในการติดตั้งส่วนขยายเคอร์เนล เช่น HAXM คุณต้อง อนุญาตให้ติดตั้งส่วนขยายเคอร์เนลด้วยตนเองโดยทำดังนี้

  1. ก่อนอื่น ให้ลองติดตั้ง HAXM เวอร์ชันล่าสุดจากตัวจัดการ SDK
  2. ใน MacOS ให้ไปที่ System Preferences > Security and Privacy
  3. หากเห็นการแจ้งเตือนว่าซอฟต์แวร์ระบบจากผู้พัฒนา "Intel Corporation Apps" ถูกบล็อกไม่ให้โหลด ให้คลิกอนุญาต

ดูข้อมูลเพิ่มเติมและวิธีแก้ปัญหาได้ที่ หน้าเว็บของ Apple นี้และ ปัญหา 62395878

ใช้การเปลี่ยนแปลง

ส่วนนี้จะอธิบายปัญหาที่ทราบซึ่งเกี่ยวข้องกับใช้ การเปลี่ยนแปลง

ชื่อแอปใหม่ไม่มีผล

หากคุณเปลี่ยนชื่อแอปแล้วพยายามใช้การเปลี่ยนแปลงนั้น ชื่อที่อัปเดตอาจไม่แสดง หากต้องการแก้ปัญหานี้ ให้คลิกเรียกใช้ ไอคอนเรียกใช้ เพื่อทำให้แอปใช้งานได้อีกครั้งและดูการเปลี่ยนแปลง

ปัญหาในรันไทม์ของ Android ทำให้เกิดข้อผิดพลาด

หากใช้อุปกรณ์ที่ใช้ Android 8.0 หรือ 8.1 คุณอาจพบข้อความ "VERIFICATION_ERROR" เมื่อพยายามใช้การเปลี่ยนแปลงบางประเภท (โดยเฉพาะหากคุณใช้ Kotlin) ข้อความนี้เกิดจากปัญหาเกี่ยวกับ Android Runtime ซึ่งได้รับการแก้ไขใน Android 9.0 ขึ้นไปแล้ว แม้ว่าปัญหา จะทำให้การใช้การเปลี่ยนแปลงล้มเหลว แต่คุณก็ยังเรียกใช้ ไอคอนเรียกใช้ แอปอีกครั้งเพื่อดูการเปลี่ยนแปลงได้ อย่างไรก็ตาม เราขอแนะนำให้อัปเกรดอุปกรณ์เป็น Android 9.0 ขึ้นไป

การแก้ไขข้อบกพร่องและการทดสอบ

ส่วนนี้อธิบายปัญหาที่ทราบเกี่ยวกับการแก้ไขข้อบกพร่องและการทดสอบแอป

การทดสอบ JUnit ไม่มีทรัพยากรใน Classpath เมื่อเรียกใช้จาก Android Studio

หากคุณมีโฟลเดอร์ทรัพยากรที่เฉพาะเจาะจงในโมดูล Java ระบบจะไม่พบทรัพยากรเหล่านั้นเมื่อเรียกใช้การทดสอบจาก IDE การเรียกใช้การทดสอบ โดยใช้ Gradle จากบรรทัดคำสั่งจะใช้งานได้ การเรียกใช้งานงาน Gradle check จาก IDE ก็ได้เช่นกัน ดูรายละเอียดเพิ่มเติมได้ที่ปัญหา 64887

ปัญหานี้เกิดขึ้นเนื่องจากตั้งแต่ IntelliJ 13 เป็นต้นไป คุณต้องมีโฟลเดอร์เดียวเป็น classpath เท่านั้น เครื่องมือสร้างของ IntelliJ จะคัดลอกทรัพยากรทั้งหมด ลงในโฟลเดอร์บิลด์นั้น แต่ Gradle จะไม่คัดลอกทรัพยากร

  • วิธีแก้ปัญหาที่ 1: เรียกใช้ทาสก์ Gradle check จาก IDE แทนการเรียกใช้การทดสอบหน่วย
  • วิธีแก้ปัญหาที่ 2: อัปเดตสคริปต์บิลด์เพื่อคัดลอกทรัพยากรลงใน โฟลเดอร์บิลด์ด้วยตนเอง ดูข้อมูลเพิ่มเติมได้ที่ ความคิดเห็น #13

การเรียกใช้การทดสอบ JUnit อาจคอมไพล์โค้ด 2 ครั้ง

เมื่อสร้างโปรเจ็กต์ใหม่ ระบบอาจสร้างการกำหนดค่า JUnit ของเทมเพลต โดยมีขั้นตอน "ก่อนเปิดตัว" 2 ขั้นตอน ได้แก่ Make และ Make ที่รองรับ Gradle จากนั้นการกำหนดค่านี้ จะเผยแพร่ไปยังการกำหนดค่าการเรียกใช้ JUnit ทั้งหมดที่สร้างขึ้น

  • หากต้องการแก้ไขปัญหาสำหรับโปรเจ็กต์ปัจจุบัน ให้คลิกเรียกใช้ > แก้ไข การกำหนดค่า แล้วเปลี่ยนการกำหนดค่า JUnit เริ่มต้นให้รวมเฉพาะ ขั้นตอน Make ที่รับรู้ Gradle
  • หากต้องการแก้ไขปัญหาสําหรับโปรเจ็กต์ในอนาคตทั้งหมด ให้คลิกไฟล์ > ปิด โปรเจ็กต์ คุณควรเห็นหน้าจอต้อนรับ จากนั้นคลิกกำหนดค่า > ค่าเริ่มต้นของโปรเจ็กต์ > การกำหนดค่าการเรียกใช้ แล้วเปลี่ยนการกำหนดค่า JUnit ให้รวมเฉพาะขั้นตอน Make ที่รับรู้ Gradle

การกำหนดค่าการทดสอบบางอย่างใช้ไม่ได้

การกำหนดค่าการเรียกใช้บางรายการที่ ใช้ได้เมื่อคลิกขวาที่เมธอดการทดสอบอาจไม่ถูกต้อง โดยเฉพาะอย่างยิ่ง การกำหนดค่าต่อไปนี้ไม่ถูกต้อง

  • การกำหนดค่าการเรียกใช้ Gradle (ซึ่งมีโลโก้ Gradle เป็นไอคอน) จะใช้งานไม่ได้
  • การกำหนดค่าการเรียกใช้ JUnit (ซึ่งมีไอคอนที่ไม่มี Android สีเขียว) ใช้ไม่ได้กับการทดสอบเครื่องมือ ซึ่งเรียกใช้ใน JVM ในเครื่องไม่ได้
Android Studio ยังจดจำการกำหนดค่าการเรียกใช้ที่สร้างขึ้นในบริบทที่กำหนด (เช่น การคลิกขวาที่คลาสหรือเมธอดที่เฉพาะเจาะจง) และจะไม่ เสนอให้เรียกใช้ในการกำหนดค่าอื่นในอนาคต หากต้องการแก้ไขปัญหานี้ ให้คลิกเรียกใช้ > แก้ไขการกำหนดค่า แล้วนำการกำหนดค่าที่สร้างอย่างไม่ถูกต้องออก

การเพิ่มเบรกพอยท์ Java ขณะแก้ไขข้อบกพร่องของโค้ดเนทีฟ

ขณะที่แอปหยุดชั่วคราวที่จุดพักในโค้ดเนทีฟ ดีบักเกอร์อัตโนมัติและคู่อาจไม่รู้จักจุดพักใหม่ของ Java ที่คุณตั้งค่าในทันที หากต้องการหลีกเลี่ยงปัญหานี้ ให้เพิ่มเบรกพอยต์ Java ก่อนเริ่มเซสชันการแก้ไขข้อบกพร่องหรือขณะที่แอปหยุดชั่วคราวที่เบรกพอยต์ Java ดูข้อมูลเพิ่มเติมได้ที่ปัญหา 229949

การออกจากโปรแกรมแก้ไขข้อบกพร่องของระบบ

ขณะใช้ดีบักเกอร์ Auto หรือ Dual เพื่อ แก้ไขข้อบกพร่องของโค้ด Java และโค้ดดั้งเดิม หากคุณก้าวเข้าสู่ฟังก์ชันดั้งเดิมจาก โค้ด Java (เช่น ดีบักเกอร์หยุดการดำเนินการที่บรรทัดใน โค้ด Java ที่เรียกใช้ฟังก์ชันดั้งเดิม และคุณคลิกStep Into ) และต้องการกลับไปที่โค้ด Java ให้คลิกResume Program (แทนที่จะคลิก Step Out หรือ Step Over ) กระบวนการของแอปจะยังคงหยุดชั่วคราวอยู่ ดังนั้นให้คลิก Resume Program ในแท็บ your-module-java เพื่อดำเนินการต่อ ดูข้อมูลเพิ่มเติมได้ที่ปัญหา 224385

ดีบักเกอร์ที่มาพร้อมเครื่องค้างขณะโหลดไลบรารี

ขณะใช้โปรแกรมแก้ไขข้อบกพร่องดั้งเดิมเป็นครั้งแรกหลังจากอัปเกรดเป็น Android Studio 4.2 ขึ้นไป โปรแกรมแก้ไขข้อบกพร่องดั้งเดิมอาจหยุดตอบสนองขณะโหลด ไลบรารีจากอุปกรณ์ Android ปัญหานี้เป็นปัญหาที่เกิดขึ้นซ้ำๆ แม้ว่าคุณจะหยุดและรีสตาร์ทดีบักเกอร์แล้วก็ตาม หากต้องการแก้ไขปัญหานี้ ให้ ลบแคช LLDB ที่ $USER/.lldb/module-cache/

ดีบักเกอร์ดั้งเดิมขัดข้องโดยมีข้อความ "กระบวนการดีบักเกอร์เสร็จสมบูรณ์โดยมีรหัสออก 127"

ข้อผิดพลาดนี้เกิดขึ้นในแพลตฟอร์มที่ใช้ Linux เมื่อเริ่มต้น โปรแกรมแก้ไขข้อบกพร่องดั้งเดิม ซึ่งบ่งชี้ว่าไลบรารีอย่างใดอย่างหนึ่งที่ดีบักเกอร์ดั้งเดิมต้องการไม่ได้ติดตั้งไว้ในระบบภายใน ชื่อของไลบรารีที่ขาดหายไปอาจพิมพ์อยู่ในไฟล์ idea.log แล้ว หากไม่พบ คุณสามารถใช้ เทอร์มินัลเพื่อไปยังไดเรกทอรีการติดตั้ง Android Studio และเรียกใช้ บรรทัดคำสั่ง bin/lldb/bin/LLDBFrontend --version เพื่อดูว่าไม่มีไลบรารีใด โดยปกติแล้ว ไลบรารีที่ขาดหายไปคือ ncurses5 เนื่องจาก Linux รุ่นล่าสุดบางรุ่นได้อัปเกรดเป็น ncurses6 แล้ว

โปรไฟล์

ส่วนนี้อธิบายปัญหาที่ทราบเกี่ยวกับ Profiler

Native Memory Profiler: การสร้างโปรไฟล์ไม่พร้อมใช้งานในระหว่างการเริ่มต้นแอป

ขณะนี้ Native Memory Profiler ไม่พร้อมใช้งานในระหว่างการเริ่มต้นแอป ตัวเลือกนี้จะพร้อมใช้งานในรุ่นถัดไป

คุณสามารถใช้โปรไฟล์เลอร์บรรทัดคำสั่งแบบสแตนด์อโลนของ Perfetto เพื่อบันทึกโปรไฟล์การเริ่มต้นเป็นวิธีแก้ปัญหาชั่วคราว

ข้อผิดพลาดการหมดเวลาในเครื่องมือสร้างโปรไฟล์ CPU

คุณอาจพบข้อผิดพลาด "หยุดบันทึกไม่สำเร็จ" ในโปรไฟล์เลอร์ CPU ของ Android Studio เมื่อเลือกการกำหนดค่าเมธอด Java ตัวอย่างหรือเมธอด Java ที่ติดตาม ข้อผิดพลาดเหล่านี้มักเป็นข้อผิดพลาดเกี่ยวกับไทม์เอาต์ โดยเฉพาะอย่างยิ่งหากคุณเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้ในไฟล์ idea.log

Wait for ART trace file timed out

ข้อผิดพลาดจากไทม์เอาต์มักส่งผลต่อเมธอดที่ติดตามมากกว่าเมธอดที่สุ่มตัวอย่าง และการบันทึกที่ยาวกว่ามากกว่าการบันทึกที่สั้นกว่า วิธีแก้ปัญหาชั่วคราวคือลองบันทึกวิดีโอให้สั้นลงเพื่อดูว่าข้อผิดพลาดหายไปหรือไม่

หากพบปัญหาการหมดเวลาใน Profiler โปรดรายงานข้อบกพร่อง โดยระบุยี่ห้อ/รุ่นของอุปกรณ์และรายการที่เกี่ยวข้องจาก idea.log และ logcat

ข้อยกเว้น ADB เมื่อแก้ไขข้อบกพร่องหรือสร้างโปรไฟล์

เมื่อใช้ Platform Tools 29.0.3 การแก้ไขข้อบกพร่องดั้งเดิมและตัวจัดทำโปรไฟล์ของ Android Studio อาจทำงานไม่ถูกต้อง และคุณอาจเห็น "AdbCommandRejectedException" หรือ "Failed to connect port" ในidea.log เมื่อเลือกความช่วยเหลือ > แสดงบันทึก การอัปเกรดเครื่องมือแพลตฟอร์มเป็น 29.0.4 ขึ้นไปจะแก้ปัญหาทั้ง 2 อย่าง

หากต้องการอัปเกรดเครื่องมือแพลตฟอร์ม ให้ทำดังนี้

  1. เปิด SDK Manager จาก Android Studio โดยคลิกเครื่องมือ > SDK Manager หรือคลิก SDK Manager ในแถบเครื่องมือ
  2. คลิกช่องทําเครื่องหมายข้าง Android SDK Platform-Tools เพื่อให้แสดงเครื่องหมายถูก ไอคอนดาวน์โหลด ควรปรากฏในคอลัมน์ด้านซ้าย
  3. คลิกใช้หรือตกลง

ปลั๊กอินทำให้หน้าต่างเอาต์พุตการสร้างใช้งานไม่ได้

การใช้ปลั๊กอิน CMake simple highlighter จะป้องกันไม่ให้เนื้อหาปรากฏใน หน้าต่างเอาต์พุตการสร้าง บิลด์ทำงานและแท็บเอาต์พุตของบิลด์ปรากฏขึ้น แต่ไม่มีเอาต์พุตที่พิมพ์ (ปัญหา #204791544)

ลำดับการติดตั้งป้องกันการเปิดตัว

การติดตั้ง Android Studio เวอร์ชันใหม่กว่าก่อนเวอร์ชันเก่าอาจ ทำให้เวอร์ชันเก่าเปิดไม่ได้ ตัวอย่างเช่น หากคุณติดตั้ง Android Studio เวอร์ชัน Canary ก่อน แล้วพยายามติดตั้งและเปิดใช้เวอร์ชันเสถียร เวอร์ชันเสถียรอาจไม่เปิดขึ้น ในกรณีเช่นนี้ คุณต้อง ล้างแคชเพื่อให้เวอร์ชันเสถียร (เก่ากว่า) เปิดตัว ใน macOS หากต้องการล้างแคช ให้ลบไดเรกทอรี Library/ApplicationSupport/Google/AndroidStudioversion_number ใน Windows ให้ใช้การล้างข้อมูลบนดิสก์เพื่อล้างแคช

Espresso Test Recorder ใช้กับ Compose ไม่ได้

Espresso Test Recorder ใช้กับโปรเจ็กต์ที่มี Compose ไม่ได้ หากต้องการสร้างการทดสอบ UI สำหรับโปรเจ็กต์ ที่มี Compose โปรดดูการทดสอบเลย์เอาต์ Compose

แป้นพิมพ์ลัด Logcat ขัดแย้งกับเลย์เอาต์แป้นพิมพ์ที่ไม่ใช่ภาษาอังกฤษ

หากใช้รูปแบบแป้นพิมพ์ที่ไม่ใช่ภาษาอังกฤษ แป้นพิมพ์ลัด Logcat เริ่มต้นอาจขัดแย้งกับรูปแบบและทำให้คุณพิมพ์อักขระบางตัวไม่ได้เมื่อแก้ไขข้อความใน Android Studio หากต้องการหลีกเลี่ยงปัญหานี้ ให้ลบหรือแมปคีย์แมป Logcat ที่ขัดแย้งกันใหม่ หากต้องการแก้ไขคีย์แมป Logcat ใน Android Studio ให้ไปที่ Android Studio > การตั้งค่า > คีย์แมป แล้วค้นหา Logcat ในรายการคีย์แมป ดูข้อมูลเพิ่มเติมได้ที่ ปัญหา #263475910

ปัญหานี้จะได้รับการแก้ไขโดยการนำทางลัด Logcat ออกใน Android Studio Electric Eel Patch 1

ปัญหาที่ทราบเกี่ยวกับปลั๊กอิน Android Gradle

ส่วนนี้อธิบายปัญหาที่ทราบซึ่งมีอยู่ในปลั๊กอิน Android Gradle เวอร์ชันเสถียรล่าสุด

การขึ้นต่อกันของไลบรารีฟีเจอร์แบบไดนามิกบางรายการอาจไม่มีการตรวจสอบ Lint

เมื่อเรียกใช้ Lint ด้วย checkDependencies = true จากโมดูลแอป ระบบจะไม่ตรวจสอบทรัพยากร Dependency ของไลบรารีฟีเจอร์แบบไดนามิก เว้นแต่จะเป็นทรัพยากร Dependency ของแอปด้วย (ปัญหา #191977888) คุณแก้ไขปัญหาเบื้องต้นได้โดยเรียกใช้งาน Lint ในไลบรารีเหล่านั้น

การลงนามในไฟล์ที่มีชื่อซึ่งมีอักขระขึ้นบรรทัดใหม่

การลงนาม JAR (รูปแบบ v1) ไม่รองรับชื่อไฟล์ที่มีอักขระขึ้นบรรทัดใหม่ (ปัญหา #63885809)

การแก้ไขเอาต์พุตของตัวแปรในเวลาบิลด์อาจไม่ทำงาน

การใช้ Variant API เพื่อจัดการเอาต์พุตของตัวแปรจะใช้งานไม่ได้กับปลั๊กอินใหม่ แต่ยังคงใช้ได้กับงานง่ายๆ เช่น การเปลี่ยนชื่อ APK ในระหว่าง เวลาบิลด์ ดังที่แสดงด้านล่าง

// If you use each() to iterate through the variant objects,
// you need to start using all(). That's because each() iterates
// through only the objects that already exist during configuration time—
// but those object don't exist at configuration time with the new model.
// However, all() adapts to the new model by picking up object as they are
// added during execution.
android.applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${variant.name}-${variant.versionName}.apk"
    }
}

อย่างไรก็ตาม งานที่ซับซ้อนมากขึ้นซึ่งเกี่ยวข้องกับการเข้าถึงoutputFileออบเจ็กต์ จะใช้ไม่ได้อีกต่อไป เนื่องจากระบบจะไม่สร้างงานเฉพาะตัวแปรอีกต่อไป ในระหว่างขั้นตอนการกำหนดค่า ซึ่งทำให้ปลั๊กอินไม่ทราบเอาต์พุตทั้งหมดล่วงหน้า แต่ก็หมายความว่าการกำหนดค่าจะเร็วขึ้นด้วย

manifestOutputFile ไม่พร้อมใช้งานอีกต่อไป

เมธอด processManifest.manifestOutputFile() ไม่พร้อมใช้งานอีกต่อไป และคุณจะได้รับข้อผิดพลาดต่อไปนี้เมื่อเรียกใช้

A problem occurred configuring project ':myapp'.
   Could not get unknown property 'manifestOutputFile' for task
   ':myapp:processDebugManifest' of type
   com.android.build.gradle.tasks.ProcessManifest.

แทนที่จะโทรหา manifestOutputFile() เพื่อรับไฟล์ Manifest สำหรับแต่ละ ตัวแปร คุณสามารถโทรหา processManifest.manifestOutputDirectory() เพื่อส่งคืน เส้นทางของไดเรกทอรีที่มี Manifest ที่สร้างขึ้นทั้งหมด จากนั้นคุณจะ ค้นหาไฟล์ Manifest และใช้ตรรกะกับไฟล์ดังกล่าวได้ ตัวอย่างด้านล่างจะเปลี่ยนรหัสเวอร์ชันในไฟล์ Manifest แบบไดนามิก

android.applicationVariants.all { variant ->
    variant.outputs.all { output ->
        output.processManifest.doLast {
            // Stores the path to the maifest.
            String manifestPath = "$manifestOutputDirectory/AndroidManifest.xml"
            // Stores the contents of the manifest.
            def manifestContent = file(manifestPath).getText()
            // Changes the version code in the stored text.
            manifestContent = manifestContent.replace('android:versionCode="1"',
                    String.format('android:versionCode="%s"', generatedCode))
            // Overwrites the manifest with the new text.
            file(manifestPath).write(manifestContent)
        }
    }
}

ปัญหาเกี่ยวกับการรองรับ AIDL ของ AGP 7.3.0 และ Kotlin 1.7.x

การใช้ AGP 7.3.0 กับ KAPT ใน Kotlin 1.7.x จะทําให้ระบบนําชุดแหล่งที่มาของ AIDL สําหรับ ตัวแปรบิลด์ที่เฉพาะเจาะจงออก แต่คุณยังใช้แหล่งที่มาของ AIDL อื่นๆ ได้ รวมถึงแหล่งที่มาของ main/, ประเภทบิลด์, รสชาติของผลิตภัณฑ์ และการผสมผสาน รสชาติของผลิตภัณฑ์ หากต้องการใช้ชุดแหล่งที่มา AIDL เฉพาะตัวแปร ให้ใช้ Kotlin 1.6.21 ต่อไป

ปัญหาที่ทราบแล้วซึ่งได้รับการแก้ไข

ส่วนนี้อธิบายปัญหาที่ทราบซึ่งได้รับการแก้ไขแล้วในรุ่นล่าสุด หากพบปัญหาเหล่านี้ คุณควรอัปเดต Android Studio เป็นเวอร์ชันเสถียรล่าสุดหรือเวอร์ชันตัวอย่าง

แก้ไขแล้วใน Android Studio 2021.1.1

  • ไม่มีเอาต์พุตของ Lint: ไม่มีเอาต์พุตข้อความของ Lint ที่พิมพ์ไปยัง stdout เมื่อ งาน Lint เป็น UP-TO-DATE (issue #191897708) ได้รับการแก้ไขแล้วใน AGP 7.1.0-alpha05
  • ปัญหาเกี่ยวกับการทดสอบหน่วยของโปรเจ็กต์แอปที่ใช้ปลั๊กอิน Hilt Classpath ของการทดสอบหน่วยมีคลาสแอปที่ไม่ได้ใช้เครื่องมือ ซึ่งหมายความว่า Hilt จะไม่ใช้เครื่องมือกับคลาสแอปเพื่อจัดการการขึ้นต่อกันเมื่อ เรียกใช้การทดสอบหน่วย (ปัญหา #213534628) ได้รับการแก้ไขแล้วใน AGP 7.1.1

แก้ไขแล้วใน Android Studio 2020.3.1

  • ข้อยกเว้นของ Lint ในโปรเจ็กต์ Kotlin: โปรเจ็กต์ Kotlin ที่ตั้งค่า checkDependencies = true อาจพบข้อยกเว้นหรือข้อผิดพลาดของตัวชี้ Null (ปัญหา #158777858)

แก้ไขแล้วใน Android Studio 4.2

  • IDE ค้างใน macOS Big Sur: Android Studio 4.1 อาจค้างเมื่อคุณ เปิดกล่องโต้ตอบ

แก้ไขแล้วใน Android Studio 4.1

  • รีสตาร์ทเพื่อใช้การตั้งค่าหน่วยความจำจาก IDE เวอร์ชันก่อนหน้า: หลังจาก อัปเดต Android Studio แล้ว คุณต้องรีสตาร์ท Android Studio เพื่อใช้การตั้งค่า หน่วยความจำที่ย้ายข้อมูลมาจาก IDE เวอร์ชันก่อนหน้า
  • ระบบจะไม่สร้างคลาส Manifest ที่มีสตริงสิทธิ์ที่กำหนดเองโดยค่าเริ่มต้นอีกต่อไป หากต้องการสร้างคลาส ให้ตั้งค่า android.generateManifestClass = true

แก้ไขแล้วใน Android Studio 3.6

  • ข้อผิดพลาดในการติดตั้ง APK บน LineageOS: การติดตั้งใช้งานแอปในอุปกรณ์ที่ ใช้ LineageOS หรือ CyanogenMod บางเวอร์ชันอาจล้มเหลวและแสดง ข้อยกเว้น INSTALL_PARSE_FAILED_NOT_APK

    ใน Android Studio 3.6 Beta 1 ขึ้นไป IDE จะจัดการข้อยกเว้นนี้โดย ทำการติดตั้งแอปแบบเต็มเมื่อคุณติดตั้งใช้งานแอป ในอุปกรณ์ LineageOS หรือ CyanogenMod ซึ่งอาจทำให้ใช้เวลาในการติดตั้งใช้งานนานขึ้น

แก้ไขแล้วใน Android Studio 3.5.2

  • รูปแบบโค้ด XML ที่ไม่ถูกต้อง: เมื่อแก้ไขโค้ด XML ทาง IDE จะใช้รูปแบบโค้ดที่ไม่ถูกต้องเมื่อคุณเลือกโค้ด > จัดรูปแบบโค้ดจากแถบเมนู

แก้ไขแล้วใน Android Studio 3.3.1

  • ข้อผิดพลาดเกี่ยวกับหน่วยความจำไม่เพียงพอเมื่อสแกนโปรเจ็กต์ที่ใช้ C++: เมื่อ Gradle สแกนโปรเจ็กต์ที่มีโค้ด C++ ในหลายตำแหน่งบนไดรฟ์เดียวกัน การสแกนจะรวมไดเรกทอรีทั้งหมดที่อยู่ใต้ไดเรกทอรีร่วมแรก การสแกน ไดเรกทอรีและไฟล์จำนวนมากอาจทำให้เกิดข้อผิดพลาดเนื่องจากหน่วยความจำไม่เพียงพอ

    อ่านข้อมูลเพิ่มเติมเกี่ยวกับปัญหานี้ได้ในข้อบกพร่องที่เกี่ยวข้องกับปัญหา ดังกล่าว