Android Studio Dolphin | 2021.3.1 (Tháng 9 năm 2022)

Sau đây là các tính năng mới trong Android Studio Dolphin.

Tính năng mới trong Compose

Sau đây là các tính năng mới và điểm cải tiến cho Jetpack Compose trong Android Studio.

Điều phối ảnh động Compose

Nếu các ảnh động được mô tả trong một bản xem trước là thành phần kết hợp, thì giờ đây bạn có thể sử dụng tính năng Xem trước ảnh động để kiểm tra và điều phối tất cả ảnh động đó cùng một lúc. Bạn cũng có thể cố định một ảnh động cụ thể.

Ảnh GIF cho thấy quá trình kiểm tra bằng giao diện người dùng Tất cả ảnh động

Chú thích Nhiều bản xem trước (Multipreview) của Compose

Giờ đây, bạn có thể định nghĩa một lớp chú thích bao gồm nhiều định nghĩa Bản xem trước và sử dụng chú thích mới đó để tạo các bản xem trước đó cùng một lúc. Hãy sử dụng chú thích mới này để xem trước nhiều thiết bị, phông chữ và chủ đề cùng lúc mà không cần lặp lại các định nghĩa đó cho mọi thành phần kết hợp.

Giao diện người dùng của chú thích Nhiều bản xem trước

Số lần kết hợp lại ở Compose trong Layout Inspector

Khi gỡ lỗi bố cục Compose, bạn cần phải biết thời điểm thành phần kết hợp được hoặc không được kết hợp lại để xem giao diện người dùng đã có cách triển khai phù hợp hay chưa. Ví dụ: nếu quá trình kết hợp lại xảy ra quá nhiều lần, có thể ứng dụng của bạn làm nhiều việc hơn mức cần thiết. Mặt khác, những thành phần không kết hợp lại như dự kiến có thể là nguyên nhân dẫn đến các hành vi không mong muốn.

Layout Inspector nay cho phép bạn xem khi nào thành phần kết hợp riêng trong hệ phân cấp bố cục được kết hợp lại hoặc bỏ qua. Thông tin này sẽ hiện trực tiếp trong khi bạn tương tác với ứng dụng. Để bắt đầu, hãy đảm bảo ứng dụng của bạn đang sử dụng Compose 1.2.0-alpha03 trở lên. Sau đó, hãy triển khai ứng dụng như bình thường.

Bộ đếm số lần kết hợp và bỏ qua trong Layout Inspector.

Mở cửa sổ Layout Inspector (Trình kiểm tra bố cục) rồi kết nối với quá trình của ứng dụng. Trong Component Tree (Cây thành phần), bạn sẽ thấy hai cột mới xuất hiện bên cạnh hệ phân cấp bố cục. Cột đầu tiên hiện số lần kết hợp cho mỗi nút. Cột thứ hai hiện số lần bỏ qua cho mỗi nút. Bạn cũng có thể xem thông tin tương tự trong ngăn Attributes (Thuộc tính) khi chọn một thành phần kết hợp từ Component Tree (Cây thành phần) hoặc Layout Display (Màn hình bố cục).

Nếu bạn muốn đặt lại bộ đếm, hãy nhấp vào Reset (Đặt lại) ở gần đầu bảng Component Tree (Cây thành phần). Khi đặt lại bộ đếm, bạn sẽ nắm được các lần kết hợp lại hoặc bỏ qua trong một tương tác cụ thể với ứng dụng của mình.

Bật bộ đếm số lần kết hợp và bỏ qua trong Layout Inspector

Trợ lý ghép nối trình mô phỏng Wear OS mới được cập nhật

Kể từ Android Studio Dolphin Canary 3, trợ lý ghép nối trình mô phỏng Wear OS đã cải tiến các tính năng giúp quản lý và kết nối trình mô phỏng Wear dễ dàng hơn. Bạn nay có thể thực hiện các thao tác sau:

  • Xem thiết bị Wear trong Device Manager (Trình quản lý thiết bị).
  • Ghép nối nhiều thiết bị Wear với một điện thoại ảo hoặc điện thoại thực.
  • Tự động kết nối lại các thiết bị đã ghép nối trước đó khi các thiết bị này khởi chạy. Android Studio nay ghi nhớ và ghép nối lại theo chế độ ghép nối gần đây nhất.

Để sử dụng những tính năng mới này, hãy đảm bảo rằng trình mô phỏng điện thoại của bạn ở cấp độ API 30 trở lên và đã cài đặt Cửa hàng Google Play. Ngoài ra, hãy đảm bảo rằng trình mô phỏng Wear của bạn ở cấp độ API 28 trở lên. Để nâng cấp lên ảnh hệ thống mới nhất cho các thiết bị được mô phỏng, hãy chuyển đến Tools > SDK Manager (Công cụ > Trình quản lý SDK).

Để biết thêm thông tin, hãy xem phần Sử dụng trợ lý ghép nối trình mô phỏng Wear OS.

Thanh công cụ của trình mô phỏng Wear OS mới được cập nhật

Kể từ Android Studio Dolphin Canary 2, đối với các trình mô phỏng Wear có API cấp 28 trở lên, thanh công cụ của trình mô phỏng giờ đã có các nút mô phỏng các nút vật lý và các thao tác phổ biến trên thiết bị. Các nút mới bao gồm: Nút 1 và Nút 2 (Nút 2 chỉ có trên API cấp 30 trở lên), nút Palm và nút Tilt. Sau đây là một số thao tác bạn có thể thực hiện bằng các nút mới trên trình mô phỏng Wear:

  • Để thiết lập thiết bị của bạn ở chế độ môi trường xung quanh, hãy nhấp vào nút Palm.
  • Để đưa thiết bị về màn hình cuối cùng trước khi bật chế độ môi trường xung quanh, hãy nhấp vào nút Tilt.

Để biết thêm thông tin, hãy xem phần Thực hiện các thao tác phổ biến trong trình mô phỏng.

Trình mô phỏng Wear có các nút dành riêng cho Wear

Cấu hình chạy mới cho Wear OS

Các cấu hình chạy mới đã được thêm vào để nhanh chóng chạy và gỡ lỗi các bề mặt dành riêng cho Wear OS như mặt đồng hồ, Thẻ thông tin và các chức năng. Khi chạy ứng dụng, bạn có thể tạo các cấu hình mới này qua hộp thoại Run/Debug Configurations (Cấu hình chạy/gỡ lỗi).

Để biết thêm thông tin, hãy xem phần Cấu hình chạy/gỡ lỗi trên Wear OS.

Cấu hình phát hành mới của WearOS

Logcat mới

Logcat được cập nhật để giúp việc phân tích cú pháp, truy vấn và theo dõi nhật ký dễ dàng hơn.

Trình định dạng mới

Logcat hiện định dạng nhật ký để có thể dễ dàng quét thông tin hữu ích, chẳng hạn như thẻ và thông báo, đồng thời xác định nhiều loại nhật ký, chẳng hạn như cảnh báo và lỗi.

Định dạng mới cho nhật ký trong Logcat

Tạo nhiều cửa sổ Logcat

Giờ đây, bạn có thể tạo nhiều thẻ trong Logcat để có thể dễ dàng chuyển đổi giữa các thiết bị hoặc truy vấn khác nhau. Bạn có thể nhấp chuột phải vào một thẻ để đổi tên thẻ đó, đồng thời có thể nhấp và kéo để sắp xếp lại các thẻ.

Ngoài ra, để giúp bạn dễ dàng so sánh giữa hai tập hợp nhật ký, giờ đây, bạn có thể phân tách chế độ xem trong một thẻ bằng cách nhấp chuột phải vào chế độ xem nhật ký rồi chọn Split Right (Tách bên phải) hoặc Split Down (Tách bên dưới). Để đóng phần đã tách, hãy nhấp chuột phải rồi chọn Close (Đóng). Bạn có thể thiết lập kết nối thiết bị, tuỳ chọn chế độ xem và truy vấn riêng cho mỗi phần đã tách.

Tạo nhiều cửa sổ logcat bằng tính năng phân tách

Chuyển đổi giữa các giá trị đặt trước cho thành phần hiển thị

Logcat giờ đây cho phép bạn nhanh chóng chuyển đổi giữa các chế độ xem — Standard (Chuẩn), Compact (Thu gọn)Custom (Tuỳ chỉnh) — bằng cách nhấp vào biểu tượng Bộ chọn chế độ xem. Mỗi chế độ xem cung cấp một chế độ cài đặt mặc định để trình bày thông tin (chẳng hạn như dấu thời gian, thẻ và mã quy trình — PID) nhiều hoặc ít hơn. Bạn cũng có thể tuỳ chỉnh từng chế độ xem mặc định này, cũng như chế độ xem tuỳ chỉnh, bằng cách chọn Modify View (Sửa đổi chế độ xem).

Ảnh chụp màn hình lúc chuyển đổi giữa các chế độ xem

Trong phiên bản Logcat trước, bạn có thể sử dụng tính năng tìm kiếm chuỗi (có hỗ trợ biểu thức chính quy) hoặc tạo một bộ lọc mới bằng cách dùng giao diện người dùng Logcat điền sẵn nhiều trường. Cách đầu tiên làm cho việc tìm kiếm trở nên phức tạp hơn và cách thứ hai khiến việc chia sẻ và thiết lập truy vấn trở nên khó khăn hơn. Hiện tại, chúng tôi đã đơn giản hoá trải nghiệm bằng cách đưa ra tính năng tìm kiếm khoá-giá trị ngay từ trường truy vấn chính.

Ảnh chụp màn hình cú pháp truy vấn mới với tính năng tự động hoàn thành

Hệ thống truy vấn mới này có thể xử lý chính xác nội dung bạn muốn truy vấn mà không cần dựa vào biểu thức chính quy và có thể gọi lại các truy vấn trước đây từ nhật ký, cũng như chia sẻ các truy vấn đó với người khác. Ngoài ra, bạn vẫn có thể sử dụng RegEx và cũng sẽ loại trừ nhật ký dựa trên khoá-giá trị. Sau đây là một số ví dụ về cách sử dụng hệ thống truy vấn mới, tuy nhiên bạn cũng có thể đơn giản là bắt đầu nhập vào trường truy vấn để xem các đề xuất:

  • PID cho dự án ứng dụng cục bộ: package:mine
  • Giá trị cụ thể:
    • package:<package-ID>
    • tag:<tag>
    • level:[VERBOSE | INFO | ASSERT |DEBUG | WARN | ERROR ]
  • Loại trừ một giá trị cụ thể bằng cách dùng - để đặt trước khoá:
    • -tag:<exclude-tag>
  • Sử dụng biểu thức chính quy với một khoá nhất định bằng cách đặt ~ sau khoá:
    • tag~:<regular-expression-tag>
    • Kết hợp với thẻ loại trừ: -tag~:<exclude-regular-expression-tag>

Bạn cũng có thể xem nhật ký truy vấn bằng cách nhấp vào biểu tượng Bộ chọn nhật ký truy vấn trong trường truy vấn rồi chọn các truy vấn đó từ trình đơn thả xuống. Để đưa một truy vấn vào danh sách yêu thích sao cho truy vấn đó nằm ở đầu danh sách trong tất cả các dự án Studio, hãy nhấp vào biểu tượng Truy vấn yêu thích ở cuối trường truy vấn.

Ảnh chụp màn hình cho thấy nhật ký truy vấn với mục ưa thích

Theo dõi nhật ký về những lần xảy ra sự cố/khởi động lại ứng dụng

Logcat mới nay giúp bạn dễ dàng theo dõi nhật ký từ ứng dụng của mình trong những lần xảy ra sự cố và ứng dụng khởi động lại, để bạn không bỏ lỡ các nhật ký quan trọng về các sự kiện này. Khi Logcat nhận thấy quá trình ứng dụng của bạn đã dừng và khởi động lại, bạn sẽ thấy một thông báo trong kết quả đầu ra — chẳng hạn như PROCESS ENDEDPROCESS STARTED — như minh hoạ dưới đây:

Ảnh chụp màn hình cho thấy quá trình ứng dụng khởi động lại trong logcat

Đồng thời, việc khởi động lại Logcat sẽ giữ lại cấu hình phiên, chẳng hạn như các phần phân tách thẻ, bộ lọc và các chế độ xem để bạn có thể dễ dàng tiếp tục phiên của mình.

Thiết bị do Gradle quản lý

Để cải thiện tính nhất quán, hiệu suất và độ tin cậy khi sử dụng Thiết bị Android ảo cho các hoạt động kiểm thử được đo lường tự động, chúng tôi sẽ ra mắt tính năng Thiết bị do Gradle quản lý. Tính năng này có sẵn cho cấp độ API 27 trở lên, cho phép bạn định cấu hình các thiết bị kiểm thử ảo trong các tệp Gradle của dự án. Hệ thống xây dựng sử dụng các cấu hình để quản lý hoàn toàn, tức là tạo, triển khai và chia nhỏ các thiết bị đó khi thực thi các kiểm thử tự động.

Tính năng này cấp quyền truy cập Gradle vào không chỉ các thử nghiệm bạn đang chạy, mà còn vòng đời của các thiết bị, nhờ đó cải thiện chất lượng của bạn thử nghiệm trong các cách sau:

  • Xử lý các vấn đề liên quan đến thiết bị để đảm bảo thử nghiệm của bạn được thực thi
  • Sử dụng ảnh chụp nhanh của trình mô phỏng để cải thiện thời gian khởi động thiết bị và mức sử dụng bộ nhớ, đồng thời khôi phục thiết bị về trạng thái sạch giữa các lần kiểm thử
  • Lưu các kết quả kiểm thử vào bộ nhớ đệm và chỉ chạy lại các chương trình kiểm thử có khả năng cung cấp kết quả khác
  • Cung cấp một môi trường nhất quán để chạy các chương trình kiểm thử giữa các lần chạy kiểm thử cục bộ và từ xa

Ngoài ra, Thiết bị do Gradle quản lý hỗ trợ một loại thiết bị trình mô phỏng mới, được gọi là Thiết bị thử nghiệm tự động (ATD), được tối ưu hoá để cải thiện hiệu suất khi chạy kiểm thử đo lường. Kết hợp với tính năng hỗ trợ phân đoạn kiểm thử, bạn có thể thử nghiệm việc chia tách bộ kiểm thử trên nhiều thực thể ATD để giảm thời gian thực thi kiểm thử tổng thể. Để tìm hiểu thêm về Thiết bị do Gradle quản lý và các tính năng liên quan, hãy xem bài viết Điều chỉnh quy mô kiểm thử bằng Thiết bị do Gradle quản lý.

Tính năng hỗ trợ trình rút gọn mã R8 bằng cách sử dụng các tệp ánh xạ dựa trên các địa chỉ offset của bộ lệnh DEX

Khi tối ưu hoá thông tin dòng, R8 hiện có thể mã hoá thông tin trong các đối tượng thông tin gỡ lỗi dùng chung bằng bảng dòng dựa trên các địa chỉ offset của bộ lệnh. Điều này làm giảm đáng kể mức hao tổn thông tin dòng. Kết quả là các dòng trong phương thức không còn liên tiếp nữa mà có thể chuyển tiếp giữa các khoảng nghỉ tuỳ thuộc vào kích thước của bộ lệnh. Xin lưu ý rằng một số công cụ không thừa nhận phương pháp mã hoá dùng chung này.

Ngoài ra, máy ảo Android bắt đầu từ O (API cấp 26) hỗ trợ địa chỉ offset lệnh in trong dấu vết ngăn xếp nếu phương thức không có thông tin số dòng. Khi biên dịch bằng minSdk 26 trở lên và không có thông tin tệp nguồn, R8 sẽ loại bỏ hoàn toàn thông tin về số dòng.

Các biểu thức lambda không trạng thái không còn được đơn giản hoá dưới dạng singleton

Các biểu thức lambda không trạng thái không còn được phân bổ dưới dạng singleton khi đơn giản hoá. Cách biểu thị dưới dạng singleton sẽ làm tăng mức hao tổn kích thước mã do việc khởi chạy trường và trình khởi chạy lớp cũng như mức hao tổn khởi động do khởi chạy lớp tĩnh. Các biểu thức lambda không trạng thái hiện được phân bổ tại các trang web sử dụng theo cách tương tự như các lambda có trạng thái (lambda có mệnh đề bắt giữ).

R8 giúp bạn tránh tình trạng xác minh chậm trên môi trường thời gian chạy Android

Để loại bỏ các vấn đề về hiệu suất trên thời gian chạy Android (Dalvik và ART), R8 (không phải D8) hiện sử dụng các mã giả lập thư viện và đưa ra lệnh gọi tới các phương thức thư viện cho các lớp và phương thức thư viện có thể không tồn tại trong thời gian chạy. Cách này sẽ loại bỏ được nhiều vấn đề về việc xác minh và cải thiện hiệu suất trong thời gian chạy. Tính năng này luôn bật.

Tính năng đơn giản hoá API Java 8+ nhằm hỗ trợ API JDK-11

Hiện tại, thư viện triển khai dựa trên JDK-11 đã được hỗ trợ khi sử dụng phần phụ thuộc coreLibraryDesugaring. Hãy xemdesugar_jdk_libs nhật ký thay đổi để biết thêm thông tin.

Phát hành bản vá

Dưới đây là danh sách bản phát hành của Bản vá trong Android Studio Dolphin.

Android Studio Dolphin | 2021.3.1 Bản vá 1 (Tháng 10 năm 2022)

Với Bản vá 1 đã phát hành, Android Studio Dolphin hiện hỗ trợ trình bổ trợ Kotlin 1.7.20. Bản cập nhật nhỏ này cũng bao gồm các bản sửa lỗi sau:

Vấn đề đã khắc phục
Trình bổ trợ Android cho Gradle
Các quy trình kiểm thử Android đang chạy được đo lường thông qua Gradle không thể áp dụng chính xác tính năng đơn giản hoá
AGP 7.3.0 phá vỡ tính năng đồng bộ hoá gradle cho các dự án nền tảng gradle
Dexer (D8)
Thêm một API công khai để giải quyết xung đột khi hợp nhất DEX (đối với Bazel để cho phép các lớp trùng lặp)
Nhập/Đồng bộ hoá
Không nhập được dự án Gradle sau khi nâng cấp từ Chipmunk Patch 2 (2021.2.1)
Tài nguyên
NPE trong AarResourceRepositoryCache.createCachingData (AS Dolphin trở lên)
Trình rút gọn (R8)
Siêu dữ liệu Kotlin không được sao chép khi nhập các trường thay thế
Lượt chuyển đổi không mong muốn đối với kiểu dữ liệu không chính xác: HÀNG ĐẦU (mọi thứ)
Gradle 7.3.0 gây ra lỗi bản dựng APK com.android.tools.r8.CompilationFailedException
Xoá các hàm khởi tạo mặc định không được dùng ở chế độ tương thích.
Xung đột với JetBrains Markdown
Hỗ trợ ThreadLocal.withInitial(java.util.function.Supplier)
AGP 7.3 tạo tệp dex cho các lớp có hàm khởi tạo bị hỏng
Nỗ lực không mong muốn để xác định xem mã không phải CF có cần đơn giản hoá hay không
ktor VerifyError
Giá trị không xác định gặp phải trong quá trình biên dịch được gửi khi xử lý okio-jvm 3.2.0
Lỗi biên dịch ở lớp đối tượng cùng dòng với phiên bản gián tiếp của người dùng
java.lang.IllegalAccessError với R8 3.3.75