Android Studio 3.4 (เมษายน 2019)

Android Studio 3.4 เป็นรุ่นหลักที่มีฟีเจอร์ใหม่ๆ และการปรับปรุงต่างๆ มากมาย

3.4.2 (กรกฎาคม 2019)

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

3.4.1 (พฤษภาคม 2019)

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

ปัญหาที่ทราบของ 3.4.0

  • ระบบจะปิดใช้โปรไฟล์เมื่อคุณติดตั้งใช้งานแอปในอุปกรณ์ที่ใช้ Android Q รุ่นเบต้า

  • เมื่อใช้ Data Binding Library LiveDataListener.onChanged() อาจไม่สําเร็จด้วย NPE การแก้ไขสำหรับปัญหานี้จะรวมอยู่ใน Android Studio 3.4.1 และพร้อมใช้งานแล้วในเวอร์ชันตัวอย่างล่าสุดของ Android Studio 3.5 (ดู ปัญหา #122066788)

IntelliJ IDEA 2018.3.4

IDE หลักของ Android Studio ได้รับการอัปเดตด้วยการปรับปรุงจาก IntelliJ IDEA ผ่านรุ่น 2018.3.4

การอัปเดตปลั๊กอิน Android Gradle 3.4.0

ดูข้อมูลว่ามีอะไรใหม่ในปลั๊กอิน Android Gradle 3.4.0 ได้ในบันทึกประจำรุ่น

กล่องโต้ตอบโครงสร้างโปรเจ็กต์ใหม่

กล่องโต้ตอบโครงสร้างโปรเจ็กต์ (PSD) ใหม่ช่วยให้คุณอัปเดตข้อกําหนดเบื้องต้นและกำหนดค่าแง่มุมต่างๆ ของโปรเจ็กต์ได้ง่ายขึ้น เช่น โมดูล ตัวแปรการสร้าง การกําหนดค่าการรับรอง และตัวแปรการสร้าง

คุณเปิด PSD ได้โดยเลือก File > Project Structure จากแถบเมนู หรือจะเปิด PSD โดยกด Ctrl+Shift+Alt+S ใน Windows และ Linux หรือ Command+; (เซมิโคลอน) ใน macOS ก็ได้ คุณสามารถดูคำอธิบายของส่วนใหม่และส่วนที่ได้รับการอัปเดตของ PSD ได้ที่ด้านล่าง

ตัวแปร

ส่วนตัวแปรใหม่ของ PSD ช่วยให้คุณสร้างและจัดการตัวแปรการสร้างได้ เช่น ตัวแปรสำหรับทำให้หมายเลขเวอร์ชันของข้อกำหนดต่างๆ ที่สอดคล้องกันทั่วทั้งโปรเจ็กต์

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

หมายเหตุ: หากไฟล์การกำหนดค่าบิลด์ที่มีอยู่กำหนดค่าผ่านสคริปต์ Groovy ที่ซับซ้อน คุณอาจแก้ไขค่าเหล่านั้นผ่าน PSD ไม่ได้ นอกจากนี้ คุณยังแก้ไขไฟล์บิลด์ที่เขียนด้วย Kotlin โดยใช้ PSD ไม่ได้

โมดูล

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

ทรัพยากร Dependency

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

  1. เลือกทรัพยากร Dependencies ในแผงด้านซ้ายของ PSD
  2. ในแผงโมดูล ให้เลือกโมดูลที่ต้องการตรวจสอบการพึ่งพาที่แก้ไขแล้ว
  3. ทางด้านขวาของ PSD ให้เปิดแผงทรัพยากรที่เกี่ยวข้องซึ่งแก้ไขแล้วที่แสดงอยู่ด้านล่าง

นอกจากนี้ คุณยังค้นหาและเพิ่มข้อกำหนดเบื้องต้นลงในโปรเจ็กต์ได้อย่างรวดเร็วโดยการเลือกโมดูลจากส่วนข้อกำหนดเบื้องต้นของ PSD ก่อน จากนั้นคลิกปุ่ม (+) ในส่วนข้อกำหนดเบื้องต้นที่ประกาศ แล้วเลือกประเภทข้อกำหนดเบื้องต้นที่ต้องการเพิ่ม

คุณควรเห็นกล่องโต้ตอบคล้ายกับด้านล่าง ซึ่งจะช่วยให้คุณเพิ่มข้อกำหนดในโมดูลได้ ทั้งนี้ขึ้นอยู่กับประเภทของข้อกำหนดที่เลือก

ตัวแปรการสร้าง

ในส่วนนี้ของ PSD ให้สร้างและกําหนดค่าตัวแปรของบิลด์และรสชาติของผลิตภัณฑ์สําหรับแต่ละโมดูลในโปรเจ็กต์ คุณสามารถเพิ่มตัวยึดตําแหน่งไฟล์ Manifest, เพิ่มไฟล์ ProGuard และกำหนดคีย์การรับรอง และอื่นๆ

คำแนะนำ

ดูการอัปเดตที่แนะนำสำหรับทรัพยากร Dependency ของโปรเจ็กต์และตัวแปรการสร้างในส่วนคำแนะนำดังที่แสดงด้านล่าง

ผู้จัดการทรัพยากรใหม่

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

  • แสดงภาพทรัพยากร: คุณดูตัวอย่างทรัพยากรที่ถอนออกได้ สี และเลย์เอาต์เพื่อค้นหาทรัพยากรที่ต้องการได้อย่างรวดเร็ว
  • นำเข้าหลายรายการพร้อมกัน: คุณนำเข้าเนื้อหาที่ถอนได้หลายรายการพร้อมกันได้โดยลากและวางเนื้อหาลงในหน้าต่างเครื่องมือเครื่องมือจัดการทรัพยากร หรือใช้วิซาร์ดนำเข้าเนื้อหาที่ถอนออกได้ หากต้องการเข้าถึงวิซาร์ด ให้เลือกปุ่ม (+) ที่มุมซ้ายบนของหน้าต่างเครื่องมือ แล้วเลือกนำเข้าสิ่งที่วาดได้จากเมนูแบบเลื่อนลง
  • แปลง SVG เป็นออบเจ็กต์ VectorDrawable: คุณสามารถใช้วิซาร์ดนําเข้าสิ่งที่วาดได้เพื่อแปลงรูปภาพ SVG เป็นออบเจ็กต์ VectorDrawable
  • ลากและวางชิ้นงาน: จากหน้าต่างเครื่องมือตัวจัดการทรัพยากร คุณสามารถลากและวางรายการที่วาดได้ทั้งในมุมมองการออกแบบและ XML ของเครื่องมือแก้ไขเลย์เอาต์
  • ดูเวอร์ชันอื่น: ตอนนี้คุณดูเวอร์ชันอื่นของทรัพยากรได้โดยดับเบิลคลิกทรัพยากรภายในหน้าต่างเครื่องมือ มุมมองนี้แสดงเวอร์ชันต่างๆ ที่คุณสร้างและตัวกรองที่รวมไว้
  • ไทล์และมุมมองรายการ: คุณสามารถเปลี่ยนมุมมองภายในหน้าต่างเครื่องมือเพื่อแสดงภาพทรัพยากรในการจัดเรียงที่แตกต่างกันได้

หากต้องการดูข้อมูลเพิ่มเติม โปรดอ่านคำแนะนำเกี่ยวกับวิธีจัดการทรัพยากรของแอป

การตรวจสอบรหัสบิลด์เมื่อทำโปรไฟล์และแก้ไขข้อบกพร่องของ APK

เมื่อคุณระบุไฟล์สัญลักษณ์การแก้ไขข้อบกพร่องสำหรับ.soไลบรารีที่แชร์ภายใน APK ของคุณ Android Studio จะตรวจสอบว่ารหัสบิลด์ของไฟล์สัญลักษณ์ที่ระบุตรงกับรหัสบิลด์ของไลบรารี .so ภายใน APK

หากคุณสร้างไลบรารีแบบเนทีฟใน APK ด้วยรหัสบิลด์ Android Studio จะตรวจสอบว่ารหัสบิลด์ในไฟล์สัญลักษณ์ตรงกับรหัสบิลด์ในไลบรารีแบบเนทีฟหรือไม่ และจะปฏิเสธไฟล์สัญลักษณ์หากไม่ตรงกัน หากคุณไม่ได้สร้างด้วยรหัสบิลด์ การให้ไฟล์สัญลักษณ์ที่ไม่ถูกต้องอาจทำให้เกิดปัญหาในการแก้ไขข้อบกพร่อง

เปิดใช้ R8 โดยค่าเริ่มต้น

R8 ผสานรวมเครื่องมือลดน้ำตาล ลดขนาด ปรับให้ยากต่อการอ่าน (Obfuscate) เพิ่มประสิทธิภาพ และถอดรหัสทั้งหมดในขั้นตอนเดียว ซึ่งส่งผลให้เกิดการปรับปรุงประสิทธิภาพบิลด์ที่สังเกตเห็นได้ R8 เปิดตัวในปลั๊กอิน Android Gradle 3.3.0 และ เปิดใช้โดยค่าเริ่มต้นสำหรับทั้งแอปและโปรเจ็กต์ไลบรารี Android ที่ใช้ปลั๊กอิน 3.4.0 ขึ้นไป

รูปภาพด้านล่างแสดงภาพรวมระดับสูงของกระบวนการคอมไพล์ก่อนที่จะมีการเปิดตัว R8

ก่อน R8 ProGuard เป็นขั้นตอนคอมไพล์ที่แตกต่างจากการแยกไฟล์ Dex และการแยก Sugar

ตอนนี้ R8 จะทำการปรับขนาด การทำให้ซอร์สโค้ดอ่านไม่ออก การเพิ่มประสิทธิภาพ และการแปลงโค้ด Java เป็นรูปแบบ DEX (D8) ทั้งหมดให้เสร็จสมบูรณ์ในขั้นตอนเดียวดังที่แสดงด้านล่าง

เมื่อใช้ R8 ระบบจะถอด Sugar, ย่อขนาด, สร้างความสับสน, เพิ่มประสิทธิภาพ และถอด Dex ทั้งหมดในขั้นตอนคอมไพล์เดียว

โปรดทราบว่า R8 ออกแบบมาให้ทำงานร่วมกับกฎ ProGuard ที่มีอยู่ คุณจึงอาจไม่ต้องดำเนินการใดๆ เพื่อรับประโยชน์จาก R8 อย่างไรก็ตาม เนื่องจากเป็นเทคโนโลยีที่แตกต่างจาก ProGuard ซึ่งออกแบบมาเพื่อโปรเจ็กต์ Android โดยเฉพาะ การลดขนาดและการเพิ่มประสิทธิภาพอาจส่งผลให้มีการนำโค้ดออกซึ่ง ProGuard อาจจะไม่นำออก ดังนั้น ในสถานการณ์ที่ไม่น่าจะเกิดขึ้นนี้ คุณอาจต้องเพิ่มกฎเพิ่มเติมเพื่อเก็บโค้ดนั้นไว้ในเอาต์พุตของบิลด์

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

    # Disables R8 for Android Library modules only.
    android.enableR8.libraries = false
    # Disables R8 for all modules.
    android.enableR8 = false
    
  

หมายเหตุ: สำหรับประเภทบิลด์หนึ่งๆ หากคุณตั้งค่า useProguard เป็น false ในไฟล์ build.gradle ของโมดูลแอป ปลั๊กอิน Android Gradle จะใช้ R8 เพื่อลดขนาดโค้ดของแอปสำหรับประเภทบิลด์นั้น ไม่ว่าคุณจะปิดใช้ R8 ในไฟล์ gradle.properties ของโปรเจ็กต์หรือไม่ก็ตาม

ตอนนี้ตัวแก้ไขการนำทางรองรับอาร์กิวเมนต์ทุกประเภทที่คอมโพเนนต์การนำทางรองรับแล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับประเภทที่รองรับได้ที่หัวข้อส่งข้อมูลระหว่างปลายทาง

การปรับปรุงเครื่องมือสร้างเลย์เอาต์ {:#layout-editor}

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

  • ส่วนแอตทริบิวต์ที่ประกาศใหม่จะแสดงรายการแอตทริบิวต์ที่ไฟล์เลย์เอาต์ระบุ และช่วยให้คุณเพิ่มแอตทริบิวต์ใหม่ได้อย่างรวดเร็ว
  • ตอนนี้แผงแอตทริบิวต์ยังมีตัวบ่งชี้ข้างแอตทริบิวต์แต่ละรายการด้วย ซึ่งจะแสดงเป็นสี่เหลี่ยมจัตุรัสเต็มเมื่อค่าของแอตทริบิวต์เป็นการอ้างอิงทรัพยากร และแสดงเป็นสี่เหลี่ยมจัตุรัสว่างในกรณีอื่นๆ
  • ระบบจะไฮไลต์แอตทริบิวต์ที่มีข้อผิดพลาดหรือคำเตือน ข้อความไฮไลต์สีแดงบ่งบอกถึงข้อผิดพลาด (เช่น เมื่อคุณใช้ค่าเลย์เอาต์ที่ไม่ถูกต้อง) และข้อความไฮไลต์สีส้มบ่งบอกถึงคําเตือน (เช่น เมื่อคุณใช้ค่าที่เขียนตายตัว)

การดำเนินการโดยเจตนาใหม่เพื่อนำเข้าทรัพยากร Dependency อย่างรวดเร็ว

หากคุณเริ่มใช้คลาส Jetpack และ Firebase บางคลาสในโค้ด การดําเนินการตามเจตนาใหม่จะแนะนําให้เพิ่มการพึ่งพาไลบรารี Gradle ที่จําเป็นลงในโปรเจ็กต์ หากคุณยังไม่ได้ดำเนินการดังกล่าว เช่น หากคุณอ้างอิงคลาส WorkManager โดยไม่นําเข้าการพึ่งพา android.arch.work:work-runtime ที่จําเป็นก่อน การดําเนินการตามเจตนาจะช่วยให้คุณทําได้อย่างง่ายดายในคลิกเดียว ดังที่แสดงด้านล่าง

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