หน้านี้จะติดตามปัญหาที่ทราบเกี่ยวกับ Android Studio, Ladybug และปลั๊กอิน Android Gradle เวอร์ชัน 8.7.0 หากคุณพบปัญหาที่ไม่ได้ระบุไว้ที่นี่ โปรดรายงานข้อบกพร่อง
อัปเกรดเป็นเวอร์ชันตัวอย่าง: Android Studio และปลั๊กอิน Android Gradle แต่ละรุ่นมุ่งปรับปรุงความเสถียรและประสิทธิภาพ รวมถึงเพิ่มฟีเจอร์ใหม่ๆ ดาวน์โหลดและติดตั้งตัวอย่าง Android Studio เพื่อสัมผัสประโยชน์ของรุ่นที่กำลังจะเปิดตัวเลย
ปัญหาที่ทราบเกี่ยวกับ Android Studio
ส่วนนี้จะอธิบายปัญหาที่ทราบซึ่งอยู่ใน Android Studio เวอร์ชันเสถียรล่าสุด
"ใช้การเปลี่ยนแปลงและเริ่มกิจกรรมอีกครั้ง" จะไม่เริ่มกิจกรรมอีกครั้งในอุปกรณ์หรือโปรแกรมจำลองระดับ API 35
เมื่อทำให้การเปลี่ยนแปลงโค้ดใช้งานได้ในอุปกรณ์ API 35 ด้วยตัวเลือก "ใช้การเปลี่ยนแปลงและกิจกรรมรีสตาร์ท" แอปจะไม่รีสตาร์ทและคุณจะไม่เห็นผลกระทบของการเปลี่ยนแปลง หากเรียกใช้แอปพลิเคชันอีกครั้ง คุณจะเห็นผลของการเปลี่ยนแปลงโค้ด ทีมของเรากำลังตรวจสอบเรื่องนี้อยู่
หน้าต่างผู้ช่วย Firebase แสดงข้อความแสดงข้อผิดพลาด
หากหน้าต่างผู้ช่วย Firebase (เครื่องมือ > Firebase จากเมนูหลัก) แสดงข้อความแสดงข้อผิดพลาด ให้ล้างแคชและรีสตาร์ท Android Studio เพื่อแก้ไขข้อผิดพลาด
แยกมุมมองโดยใช้ตัวตรวจสอบเลย์เอาต์ไม่ได้
ความสามารถในการแยกมุมมองโดยใช้เครื่องมือตรวจสอบเลย์เอาต์ที่ฝังไว้ไม่พร้อมใช้งานชั่วคราว เรากำลังดำเนินการแก้ไขปัญหานี้ในรุ่นที่จะออกในอนาคต
เขียนโหนดไม่สามารถตรวจสอบได้โดยใช้ตัวตรวจสอบเลย์เอาต์บางรายการ
หากคุณสังเกตเห็นว่าไม่สามารถตรวจสอบโหนด Compose บางโหนดได้เมื่อใช้เครื่องมือตรวจสอบเลย์เอาต์ ปัญหานี้อาจเกิดจากข้อบกพร่องที่ได้รับการแก้ไขแล้วใน Compose เวอร์ชัน 1.5.0-alpha04 หากคุณพบปัญหานี้ โปรดตรวจสอบว่าคุณได้อัปเกรดเป็น Compose เวอร์ชัน 1.5.0-alpha04 ขึ้นไปแล้ว
เกิดข้อผิดพลาดเมื่อแสดงผลตัวอย่างการเขียน
เริ่มต้นด้วย Chipmunk ของ Android Studio หากคุณเห็น java.lang.NoSuchFieldError: view_tree_saved_state_registry_owner
หรือ java.lang.ClassNotFoundException: androidx.savedstate.R$id
ในแผงปัญหา อย่าลืมใส่ทรัพยากร Dependency ของ 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" หรือ "Failed to connect port" ใน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) ไม่สนับสนุนชื่อไฟล์ที่มีอักขระขึ้นบรรทัดใหม่ (ปัญหา #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 - ปัญหาเกี่ยวกับการทดสอบ 1 หน่วยของโปรเจ็กต์แอปที่ใช้ปลั๊กอิน Hilt: คลาสพาธการทดสอบ 1 หน่วยมีคลาสแอปที่ไม่ได้ใช้การวัดคุม ซึ่งหมายความว่า Hilt ไม่ได้กำหนดให้คลาสของแอปจัดการการแทรกทรัพยากร Dependency เมื่อเรียกใช้การทดสอบหน่วย (ปัญหา #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 ตำแหน่งในไดรฟ์เดียวกัน การสแกนจะรวมไดเรกทอรีทั้งหมดที่อยู่ด้านล่างไดเรกทอรีทั่วไปไดเรกทอรีแรก การสแกนไดเรกทอรีและไฟล์จํานวนมากอาจทําให้หน่วยความจําไม่เพียงพอ
อ่านข้อมูลเพิ่มเติมเกี่ยวกับปัญหานี้ได้ที่ข้อบกพร่องที่เชื่อมโยงกับปัญหา