หน้านี้จะติดตามปัญหาที่ทราบเกี่ยวกับ Android Studio, Ladybug และปลั๊กอิน Android Gradle เวอร์ชัน 8.7.0 หากพบปัญหาที่ไม่ได้ระบุไว้ที่นี่ โปรดรายงานข้อบกพร่อง
อัปเกรดเป็นเวอร์ชันตัวอย่าง: Android Studio และปลั๊กอิน Android Gradle แต่ละรุ่นมุ่งปรับปรุงความเสถียรและประสิทธิภาพ รวมถึงเพิ่มฟีเจอร์ใหม่ๆ หากต้องการสัมผัสประสบการณ์การใช้งานฟีเจอร์ใหม่ๆ ที่กำลังจะเปิดตัว ให้ดาวน์โหลดและติดตั้ง Android Studio Preview
ปัญหาที่ทราบเกี่ยวกับ Android Studio
ส่วนนี้จะอธิบายปัญหาที่ทราบซึ่งอยู่ใน Android Studio เวอร์ชันเสถียรล่าสุด
"ใช้การเปลี่ยนแปลงและเริ่มกิจกรรมอีกครั้ง" จะไม่เริ่มกิจกรรมอีกครั้งในอุปกรณ์หรือโปรแกรมจำลองระดับ API 35
เมื่อคุณทําให้การเปลี่ยนแปลงโค้ดมีผลกับอุปกรณ์ API 35 ด้วย "ใช้การเปลี่ยนแปลงและรีสตาร์ทกิจกรรม" แอปจะไม่รีสตาร์ทและคุณจะไม่เห็นผลของการเปลี่ยนแปลง หากเรียกใช้แอปพลิเคชันอีกครั้ง คุณจะเห็นผลของการเปลี่ยนแปลงโค้ด ทีมของเรากำลังตรวจสอบเรื่องนี้อยู่
หน้าต่างผู้ช่วย Firebase แสดงข้อความแสดงข้อผิดพลาด
หากหน้าต่างผู้ช่วย Firebase (เครื่องมือ > Firebase จากเมนูหลัก) แสดงข้อความแสดงข้อผิดพลาด ให้ล้างแคชและรีสตาร์ท Android Studio เพื่อแก้ไขข้อผิดพลาด
แยกมุมมองโดยใช้ตัวตรวจสอบเลย์เอาต์ไม่ได้
ความสามารถในการแยกมุมมองโดยใช้เครื่องมือตรวจสอบเลย์เอาต์ที่ฝังไว้ไม่พร้อมใช้งานชั่วคราว เรากำลังดำเนินการแก้ไขปัญหานี้ในรุ่นที่จะออกในอนาคต
ตรวจสอบโหนด Compose ทั้งหมดโดยใช้เครื่องมือตรวจสอบเลย์เอาต์ไม่ได้
หากสังเกตเห็นว่าไม่สามารถตรวจสอบโหนด Compose บางโหนดได้เมื่อใช้เครื่องมือตรวจสอบเลย์เอาต์ ปัญหานี้อาจเกิดจากข้อบกพร่องที่ได้รับการแก้ไขแล้วใน Compose เวอร์ชัน 1.5.0-alpha04 หากคุณพบปัญหานี้ โปรดตรวจสอบว่าคุณได้อัปเกรดเป็น Compose เวอร์ชัน 1.5.0-alpha04 ขึ้นไปแล้ว
เกิดข้อผิดพลาดเมื่อแสดงผลตัวอย่างการเขียน
ตั้งแต่ 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
Dependency ของ androidx.customview:customview-poolingcontainer
ในโมดูลแล้ว
ข้อผิดพลาดเมื่อใช้รหัสผ่านที่แตกต่างกันสำหรับคีย์และคีย์สโตร์
ตั้งแต่เวอร์ชัน 4.2 เป็นต้นไป Android Studio จะทำงานบน JDK 11 การอัปเดตนี้ทำให้ลักษณะการทำงานพื้นฐานที่เกี่ยวข้องกับคีย์การรับรองเปลี่ยนแปลงไป
เมื่อไปที่สร้าง > สร้าง App Bundle / APK ที่ลงนาม และพยายามกำหนดค่า App Signing สำหรับ App Bundle หรือ APK การป้อนรหัสผ่านที่แตกต่างกันสำหรับคีย์และที่เก็บคีย์อาจส่งผลให้เกิดข้อผิดพลาดต่อไปนี้
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
แอปที่ใช้เครื่องมือตรวจสอบฐานข้อมูลอาจขัดข้องเมื่อทำงานบนโปรแกรมจำลอง Android 11 โดยมีข้อผิดพลาดปรากฏใน logcat ดังต่อไปนี้
Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR)
หากต้องการแก้ไขปัญหานี้ ให้อัปเกรดโปรแกรมจำลอง Android 11 เป็นเวอร์ชัน 9 ขึ้นไปโดยไปที่เครื่องมือ > เครื่องมือจัดการ SDK ในแท็บแพลตฟอร์ม SDK ให้เลือกช่องที่มีข้อความว่าแสดงรายละเอียดแพ็กเกจ แล้วเลือกเวอร์ชัน 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
โปรดทราบว่าไดเรกทอรีการกําหนดค่าสําหรับรุ่น Canary และเบต้าของ Android Studio คือ PreviewX.Y
ไม่ใช่ X.Y
สําหรับ <version>
ตัวอย่างเช่น บิลด์ Canary ของ Android Studio 4.1 ใช้ AndroidStudioPreview4.1
แทนไดเรกทอรี AndroidStudio4.1
ที่ใช้สำหรับรุ่นที่พร้อมเผยแพร่และรุ่นที่ใช้งานจริง
ปัญหาการคอมไพล์ในโปรเจ็กต์ Kotlin แบบหลายแพลตฟอร์ม
ข้อผิดพลาดในการคอมไพล์อาจเกิดขึ้นในโค้ด Kotlin MPP เนื่องจากไม่มีสัญลักษณ์ การอัปเกรดปลั๊กอิน Kotlin เป็นเวอร์ชัน 1.4 ควรช่วยแก้ปัญหานี้ได้
การแมปแป้นพิมพ์ขัดแย้งกันใน Linux
ใน Linux แป้นพิมพ์ลัดบางรายการจะขัดแย้งกับแป้นพิมพ์ลัดเริ่มต้นของ Linux และแป้นพิมพ์ลัดของเครื่องมือจัดการหน้าต่างยอดนิยม เช่น KDE และ GNOME แป้นพิมพ์ลัดที่ทับซ้อนกันเหล่านี้อาจไม่ทำงานตามที่คาดไว้ใน Android Studio
ดูข้อมูลเพิ่มเติมเกี่ยวกับปัญหานี้ได้ (รวมถึงวิธีแก้ปัญหาที่เป็นไปได้) ในเครื่องมือติดตามข้อบกพร่องของ IntelliJ
ข้อความ UI ขนาดเล็กใน ChromeOS
ใน ChromeOS ข้อความอาจปรากฏเล็กกว่าในรุ่นก่อนหน้ามาก หากต้องการแก้ปัญหานี้ ให้ทำดังนี้
- เปิดหน้าต่างการตั้งค่าโดยคลิกไฟล์ > การตั้งค่า
- ไปที่ลักษณะที่ปรากฏและลักษณะการทํางาน > ลักษณะที่ปรากฏ
- เลือกใช้แบบอักษรที่กำหนดเอง
- เพิ่มขนาดแบบอักษร
- ในหน้าต่างการตั้งค่า ให้ไปที่เครื่องมือแก้ไข > แบบอักษร
- เพิ่มขนาดแบบอักษร
- คลิกตกลง
การแก้ไขโค้ด
ส่วนนี้จะอธิบายปัญหาที่ทราบซึ่งเกี่ยวข้องกับเครื่องมือแก้ไขโค้ด
การป้อนข้อมูลด้วยแป้นพิมพ์ค้าง - ปัญหา "iBus" ใน Linux
มีการทำงานร่วมกันที่ทราบกันดีระหว่างเดรัม 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 เท่านั้น ให้เรียกใช้คำสั่งต่อไปนี้ในบรรทัดคำสั่ง
วิธีแก้ปัญหานี้จะปิดใช้วิธีการป้อนข้อมูลสําหรับ Android Studio เท่านั้น โดยไม่ปิดใช้แอปพลิเคชันอื่นๆ ที่คุณอาจใช้งานอยู่ โปรดทราบว่าหากรีสตาร์ทโปรแกรมเดรัมขณะที่ Android Studio ทำงานอยู่ (เช่น โดยการเรียกใช้$ XMODIFIERS= ./bin/studio.sh
ibus-daemon -rd
) จะเป็นการปิดใช้วิธีการป้อนข้อมูลสำหรับแอปพลิเคชันอื่นๆ ทั้งหมด และอาจทำให้ 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
ปัญหาคือเดรัม 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 คุณต้องอนุญาตให้ติดตั้งส่วนขยายเคอร์เนลด้วยตนเองโดยทำดังนี้
- ก่อนอื่น ให้ลองติดตั้ง HAXM เวอร์ชันล่าสุดจากเครื่องมือจัดการ SDK
- ใน macOS ให้ไปที่ค่ากำหนดของระบบ > ความปลอดภัยและความเป็นส่วนตัว
หากเห็นการแจ้งเตือนว่าซอฟต์แวร์ระบบจากผู้พัฒนา "Intel Corporation Apps" ถูกบล็อกไม่ให้โหลด ให้คลิกอนุญาต
ดูข้อมูลเพิ่มเติมและวิธีแก้ปัญหาได้ที่ หน้าเว็บนี้ของ Apple และ ปัญหา 62395878
ใช้การเปลี่ยนแปลง
ส่วนนี้จะอธิบายปัญหาที่ทราบซึ่งเกี่ยวข้องกับใช้การเปลี่ยนแปลง
ชื่อแอปใหม่ไม่มีผล
หากคุณเปลี่ยนชื่อแอปแล้วลองใช้การเปลี่ยนแปลงนั้น ชื่อที่อัปเดตแล้วอาจไม่แสดง หากต้องการแก้ปัญหานี้ ให้คลิกเรียกใช้ เพื่อทำให้แอปใช้งานได้อีกครั้งและดูการเปลี่ยนแปลง
ปัญหาในรันไทม์ Android แสดงข้อผิดพลาด
หากใช้อุปกรณ์ที่ใช้ Android 8.0 หรือ 8.1 คุณอาจเห็นข้อความ "VERIFICATION_ERROR" เมื่อพยายามใช้การเปลี่ยนแปลงบางประเภท (โดยเฉพาะในกรณีที่ใช้ Kotlin) ข้อความนี้เกิดจากปัญหาเกี่ยวกับรันไทม์ Android ซึ่งได้รับการแก้ไขแล้วใน Android 9.0 ขึ้นไป แม้ว่าปัญหาจะทําให้ "ใช้การเปลี่ยนแปลง" ไม่สําเร็จ แต่คุณยังคงเรียกใช้ แอปอีกครั้งเพื่อดูการเปลี่ยนแปลงได้ อย่างไรก็ตาม เราขอแนะนำให้คุณอัปเกรดอุปกรณ์เป็น Android 9.0 ขึ้นไป
การแก้ไขข้อบกพร่องและการทดสอบ
ส่วนนี้จะอธิบายปัญหาที่ทราบซึ่งเกี่ยวข้องกับการแก้ไขข้อบกพร่องและการทดสอบแอป
JUnit ทดสอบทรัพยากรที่ขาดหายไปใน classpath เมื่อเรียกใช้จาก Android Studio
หากคุณมีโฟลเดอร์ทรัพยากรที่เฉพาะเจาะจงในโมดูล Java ระบบจะไม่พบทรัพยากรเหล่านั้นเมื่อทำการทดสอบจาก IDE การเรียกใช้การทดสอบโดยใช้ Gradle จากบรรทัดคำสั่งจะใช้งานได้ การดำเนินการ check
งาน Gradle จาก IDE ก็ใช้ได้เช่นกัน ดูรายละเอียดเพิ่มเติมได้ที่ปัญหา 64887
ปัญหานี้เกิดขึ้นเนื่องจาก IntelliJ 13 กำหนดให้คุณมีเพียงโฟลเดอร์เดียวเป็น classpath เครื่องมือสร้างของ IntelliJ จะคัดลอกทรัพยากรทั้งหมดลงในโฟลเดอร์บิลด์นั้น แต่ Gradle จะไม่คัดลอกทรัพยากร
- วิธีแก้ปัญหาที่ 1: เรียกใช้งาน Gradle
check
จาก IDE แทนการเรียกใช้การทดสอบ 1 หน่วย - วิธีแก้ปัญหาที่ 2: อัปเดตสคริปต์บิลด์ให้คัดลอกทรัพยากรไปยังโฟลเดอร์บิลด์ด้วยตนเอง ดูข้อมูลเพิ่มเติมได้จากความคิดเห็น #13
การเรียกใช้การทดสอบ JUnit อาจคอมไพล์โค้ด 2 ครั้ง
เมื่อสร้างโปรเจ็กต์ใหม่ ระบบอาจสร้างการกำหนดค่า JUnit ของเทมเพลตโดยแบ่งออกเป็น 2 ขั้นตอน "ก่อนการเปิดตัว" ได้แก่ Make และ Make ที่รองรับ Gradle จากนั้นระบบจะนำไปใช้กับการกำหนดค่าการเรียกใช้ JUnit ที่สร้างขึ้นทั้งหมด
- หากต้องการแก้ไขปัญหาสำหรับโปรเจ็กต์ปัจจุบัน ให้คลิกเรียกใช้ > แก้ไขการกำหนดค่า แล้วเปลี่ยนการกำหนดค่า JUnit เริ่มต้นให้รวมเฉพาะขั้นตอน Make ที่รองรับ Gradle
- หากต้องการแก้ไขปัญหาสำหรับโปรเจ็กต์ในอนาคตทั้งหมด ให้คลิกไฟล์ > ปิดโปรเจ็กต์ คุณควรเห็นหน้าจอต้อนรับ จากนั้นคลิกกําหนดค่า >ค่าเริ่มต้นของโปรเจ็กต์ > การกำหนดค่าการเรียกใช้ แล้วเปลี่ยนการกำหนดค่า JUnit ให้รวมเฉพาะขั้นตอน Make ที่รองรับ Gradle
การกำหนดค่าการทดสอบบางอย่างใช้งานไม่ได้
การกำหนดค่าการเรียกใช้ที่พร้อมใช้งานเมื่อคลิกขวาที่วิธีการทดสอบนั้นอาจไม่ถูกต้อง กล่าวโดยละเอียดคือ การกำหนดค่าต่อไปนี้ไม่ถูกต้อง
- การกําหนดค่าการเรียกใช้ Gradle (ซึ่งมีโลโก้ Gradle เป็นไอคอน) ใช้งานไม่ได้
- การกําหนดค่าการเรียกใช้ JUnit (ซึ่งมีไอคอนที่ไม่มี Android สีเขียว) จะไม่มีผลกับการทดสอบที่ใช้เครื่องมือวัด ซึ่งไม่สามารถทํางานใน JVM ในพื้นที่ได้
การเพิ่มเบรกพอยต์ Java ขณะแก้ไขข้อบกพร่องโค้ดเนทีฟ
ขณะที่แอปหยุดชั่วคราวที่จุดหยุดพักในโค้ดเนทีฟ โปรแกรมแก้ไขข้อบกพร่องแบบอัตโนมัติและคู่อาจไม่รู้จักจุดหยุดพัก Java ใหม่ที่คุณตั้งไว้ในทันที หากต้องการหลีกเลี่ยงปัญหานี้ ให้เพิ่มจุดหยุดพักของ Java ก่อนเริ่มเซสชันแก้ไขข้อบกพร่องหรือขณะที่แอปหยุดชั่วคราวที่จุดหยุดพักของ Java ดูข้อมูลเพิ่มเติมได้ที่ปัญหา 229949
ออกจากโปรแกรมแก้ไขข้อบกพร่องแบบเนทีฟ
ขณะใช้โปรแกรมแก้ไขข้อบกพร่องแบบอัตโนมัติหรือคู่เพื่อแก้ไขข้อบกพร่องของ Java และโค้ดเนทีฟ หากคุณเข้าสู่ฟังก์ชันเนทีฟจากโค้ด Java (เช่น โปรแกรมแก้ไขข้อบกพร่องหยุดการดําเนินการชั่วคราวที่บรรทัดในโค้ด Java ที่เรียกฟังก์ชันเนทีฟ และคุณคลิกเข้าสู่ ) และต้องการกลับไปที่โค้ด Java ให้คลิกดำเนินการต่อ (แทนที่จะเป็นออกจาก หรือข้าม ) กระบวนการของแอปจะยังคงหยุดชั่วคราว ดังนั้นให้คลิกดำเนินการต่อ ในแท็บ 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
แล้ว
เครื่องมือวิเคราะห์
ส่วนนี้จะอธิบายปัญหาที่ทราบเกี่ยวกับเครื่องมือวิเคราะห์
เครื่องมือวิเคราะห์หน่วยความจำแบบเนทีฟ: การสร้างโปรไฟล์ไม่พร้อมใช้งานระหว่างที่แอปเริ่มต้น
ขณะนี้เครื่องมือวิเคราะห์หน่วยความจำแบบเนทีฟไม่พร้อมใช้งานระหว่างที่แอปเริ่มต้น ตัวเลือกนี้จะพร้อมใช้งานในรุ่นถัดไป
วิธีแก้ปัญหาชั่วคราวคือใช้เครื่องมือวิเคราะห์โปรไฟล์บรรทัดคำสั่งแบบสแตนด์อโลนของ Perfetto เพื่อบันทึกโปรไฟล์การเริ่มต้น
ข้อผิดพลาดเกี่ยวกับเวลาหมดในเครื่องมือสร้างโปรไฟล์ CPU
คุณอาจพบข้อผิดพลาด "หยุดการบันทึกไม่สำเร็จ" ในเครื่องมือวิเคราะห์ CPU ของ Android Studio เมื่อเลือกการกำหนดค่าตัวอย่างเมธอด Java หรือติดตามเมธอด Java ซึ่งมักเป็นข้อผิดพลาดเกี่ยวกับเวลาหมดอายุ โดยเฉพาะหากคุณเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้ในไฟล์ idea.log
Wait for ART trace file timed out
ข้อผิดพลาดเกี่ยวกับเวลาหมดอายุมีแนวโน้มที่จะส่งผลต่อวิธีการที่แทร็กมากกว่าวิธีการที่บันทึกตัวอย่าง และส่งผลต่อการบันทึกที่นานกว่าการบันทึกที่สั้นกว่า วิธีแก้ปัญหาชั่วคราวอาจเป็นการลองบันทึกวิดีโอที่สั้นลงเพื่อดูว่าข้อผิดพลาดหายไปไหม
หากพบปัญหาเกี่ยวกับเวลาหมดอายุของเครื่องมือวิเคราะห์ โปรดรายงานข้อบกพร่องพร้อมระบุยี่ห้อ/รุ่นของอุปกรณ์และรายการที่เกี่ยวข้องจาก idea.log
และ logcat
ข้อยกเว้น ADB เมื่อแก้ไขข้อบกพร่องหรือสร้างโปรไฟล์
เมื่อใช้ Platform Tools 29.0.3 การแก้ไขข้อบกพร่องแบบเนทีฟและเครื่องมือวิเคราะห์ประสิทธิภาพของ Android Studio อาจไม่ทำงานอย่างถูกต้อง และคุณอาจเห็น "AdbCommandRejectedException" หรือ "เชื่อมต่อพอร์ตไม่สำเร็จ" ในidea.log
ไฟล์เมื่อเลือกความช่วยเหลือ > แสดงบันทึก การอัปเกรดเครื่องมือแพลตฟอร์มเป็น 29.0.4 ขึ้นไปจะแก้ไขปัญหาทั้ง 2 รายการ
หากต้องการอัปเกรดเครื่องมือแพลตฟอร์ม ให้ทําดังนี้
- เปิดเครื่องมือจัดการ SDK จาก Android Studio โดยคลิกเครื่องมือ > เครื่องมือจัดการ SDK หรือคลิกเครื่องมือจัดการ SDK ในแถบเครื่องมือ
- คลิกช่องทำเครื่องหมายข้าง Android SDK Platform-Tools เพื่อให้มีเครื่องหมายถูกแสดง ไอคอนดาวน์โหลด ควรปรากฏในคอลัมน์ด้านซ้าย
- คลิกใช้หรือตกลง
ปลั๊กอินทําให้หน้าต่างเอาต์พุตการสร้างไม่ทํางาน
การใช้ปลั๊กอินโปรแกรมไฮไลต์ CMake แบบง่ายจะป้องกันไม่ให้เนื้อหาปรากฏในหน้าต่างเอาต์พุตการสร้าง บิลด์ทำงานและแท็บเอาต์พุตของบิลด์ปรากฏขึ้น แต่ไม่มีเอาต์พุตที่พิมพ์ออกมา (ปัญหา #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 ด้วย checkDependencies = true
จากโมดูลแอป ระบบจะไม่ตรวจสอบทรัพยากร Dependency ของไลบรารีฟีเจอร์แบบไดนามิก เว้นแต่จะเป็นทรัพยากร Dependency ของแอปด้วย (ปัญหา #191977888)
วิธีแก้ปัญหาชั่วคราวคือเรียกใช้งาน Lint ในไลบรารีเหล่านั้น
การเซ็นไฟล์ที่มีชื่อเป็นอักขระขึ้นบรรทัดใหม่
การรับรอง JAR (รูปแบบ v1) ไม่รองรับชื่อไฟล์ที่มีอักขระ carriage return (ปัญหา #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
(ปัญหา #191897708) ได้รับการแก้ไขแล้วใน AGP 7.1.0-alpha05 - ปัญหาเกี่ยวกับการทดสอบหน่วยของโปรเจ็กต์แอปที่ใช้ปลั๊กอิน Hilt: เส้นทางคลาสทดสอบหน่วยมีคลาสแอปที่ไม่ได้เครื่องมือวัด ซึ่งหมายความว่า Hilt ไม่ได้เครื่องมือวัดคลาสแอปเพื่อจัดการการนําเข้าข้อมูลตามข้อกําหนดเมื่อเรียกใช้การทดสอบหน่วย (ปัญหา #213534628) แก้ไขแล้วใน AGP 7.1.1
แก้ไขแล้วใน Android Studio 2020.3.1
- ข้อยกเว้นของ Lint ในโปรเจ็กต์ Kotlin: โปรเจ็กต์ Kotlin ที่ตั้งค่า
checkDependencies = true
อาจพบข้อยกเว้นหรือข้อผิดพลาดเกี่ยวกับ Null Pointer (ปัญหา #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 เบต้า 1 ขึ้นไป IDE จะจัดการข้อยกเว้นนี้โดยทำการติดตั้งแอปอย่างเต็มรูปแบบเมื่อคุณนำแอปไปใช้กับอุปกรณ์ LineageOS หรือ CyanogenMod ซึ่งอาจทำให้เวลาในการนำส่งนานขึ้น
แก้ไขแล้วใน Android Studio 3.5.2
- สไตล์โค้ด XML ไม่ถูกต้อง: เมื่อแก้ไขโค้ด XML ทาง IDE ได้ใช้สไตล์โค้ดที่ไม่ถูกต้องเมื่อคุณเลือกโค้ด > จัดรูปแบบโค้ดใหม่จากแถบเมนู
แก้ไขแล้วใน Android Studio 3.3.1
ข้อผิดพลาดเกี่ยวกับหน่วยความจำไม่เพียงพอเมื่อสแกนโปรเจ็กต์ที่ใช้ C++: เมื่อ Gradle สแกนโปรเจ็กต์ที่มีโค้ด C++ มากกว่า 1 ตำแหน่งในไดรฟ์เดียวกัน การสแกนจะรวมไดเรกทอรีทั้งหมดที่อยู่ด้านล่างไดเรกทอรีทั่วไปไดเรกทอรีแรก การสแกนไดเรกทอรีและไฟล์จํานวนมากอาจทําให้เกิดความผิดพลาดเนื่องจากหน่วยความจําไม่เพียงพอ
อ่านข้อมูลเพิ่มเติมเกี่ยวกับปัญหานี้ได้ที่ข้อบกพร่องที่เชื่อมโยงกับปัญหา