Tạo và chạy ứng dụng | Android Studio

Để xem ứng dụng sẽ hiển thị thế nào và hoạt động ra sao trên một thiết bị, bạn cần phải tạo và chạy ứng dụng đó. Android Studio sẽ thiết lập các dự án mới để bạn có thể triển khai ứng dụng cho một thiết bị ảo hoặc thiết bị thực chỉ bằng vài lần nhấp.

Phần tổng quan này sẽ tập trung giới thiệu cách dùng Android Studio để tạo và chạy ứng dụng cho mục đích kiểm thử và gỡ lỗi. Hãy xem bài viết Tạo ứng dụng để phát hành cho người dùng, ở đó hướng dẫn cách dùng Android Studio để tạo ứng dụng và phát hành cho người dùng. Nếu bạn muốn biết thêm thông tin chi tiết về cách quản lý và tuỳ chỉnh bản dựng thông qua hoặc không thông qua Android Studio, hãy xem bài viết Định cấu hình bản dựng.

Quy trình tạo và chạy cơ bản

Để tạo và chạy ứng dụng, hãy làm theo các bước sau:

  1. Trong thanh công cụ, hãy chọn ứng dụng của bạn trong trình đơn cấu hình chạy.
  2. Trong trình đơn thiết bị mục tiêu, hãy chọn thiết bị mà bạn muốn chạy ứng dụng trên đó.

    Trình đơn thiết bị mục tiêu.

    Nếu chưa định cấu hình thiết bị nào, bạn cần tạo Thiết bị Android ảo để sử dụng Trình mô phỏng Android hoặc kết nối một thiết bị thực.

  3. Nhấp vào biểu tượng Chạy .

Android Studio sẽ cảnh báo bạn nếu bạn cố gắng chạy dự án của mình trên một thiết bị có lỗi hoặc có cảnh báo liên quan đến dự án đó. Các thay đổi về biểu tượng và văn phong của lỗi (lựa chọn thiết bị khiến cấu hình bị hỏng) sẽ khác so với cảnh báo (lựa chọn thiết bị có thể dẫn đến hành vi không mong muốn nhưng vẫn chạy được).

Theo dõi quy trình xây dựng

Để xem thông tin chi tiết về quy trình xây dựng, hãy chọn View > Tool Windows > Build (Xem > Cửa sổ công cụ > Tạo) hoặc nhấp vào Build (Tạo) trên thanh cửa sổ công cụ. Cửa sổ công cụ Build (Tạo) sẽ hiển thị những nhiệm vụ mà Gradle thực thi để tạo ứng dụng của bạn, như minh hoạ trong hình 1.

Biểu tượng Chạy
Hình 1. Cửa sổ công cụ Build (Tạo) trong Android Studio.
  1. Thẻ Sync (Đồng bộ hoá): Cho thấy những nhiệm vụ mà Gradle thực thi để đồng bộ hoá với các tệp dự án của bạn. Tương tự với thẻ Build Output (Kết quả của bản dựng), nếu bạn gặp lỗi đồng bộ hoá, hãy chọn các phần tử trong cây để tìm thêm thông tin về lỗi.
  2. Thẻ Build Output (Kết quả của bản dựng): Hiển thị những nhiệm vụ mà Gradle thực thi dưới dạng cây, trong đó mỗi nút đại diện cho một giai đoạn tạo bản dựng hoặc một nhóm các phần phụ thuộc của nhiệm vụ. Nếu bạn gặp lỗi thời gian xây dựng hoặc thời gian biên dịch, hãy kiểm tra cây rồi chọn một phần tử để đọc kết quả lỗi, như minh hoạ trong hình 2.
    Biểu tượng Áp dụng thay đổi mã
    Hình 2. Kiểm tra thẻ Build Output (Kết quả của bản dựng) để xem thông báo lỗi.
  3. Thẻ Build Analyzer (Trình phân tích bản dựng): Cung cấp thông tin phân tích hiệu suất của bản dựng liên quan đến bản dựng của bạn. Hãy xem phần Khắc phục sự cố về hiệu suất bản dựng bằng Trình phân tích bản dựng để biết thêm thông tin.
  4. Restart (Khởi động lại): Thực hiện thao tác tương tự như chọn Build > Make Project (Tạo > Tạo dự án), tạo tệp bản dựng trung gian cho tất cả các mô-đun trong dự án của bạn.
  5. Filters (Lọc): Lọc ra các cảnh báo, nhiệm vụ đã hoàn tất thành công hoặc cả hai. Điều này giúp dễ dàng phát hiện thấy các vấn đề trong kết quả.

Nếu các biến thể bản dựng của bạn sử dụng các phiên bản sản phẩm, thì Gradle cũng sẽ gọi các nhiệm vụ để tạo các phiên bản sản phẩm đó. Để xem danh sách tất cả các nhiệm vụ có sẵn trong bản dựng, hãy nhấp vào View > Tool Windows > Gradle (Xem > Cửa sổ công cụ > Gradle) hoặc nhấp vào Gradle trong thanh cửa sổ công cụ.

Nếu xảy ra lỗi trong quy trình xây dựng, thì Gradle có thể đề xuất các tuỳ chọn dòng lệnh để giúp bạn giải quyết sự cố, chẳng hạn như -stacktrace hoặc -debug. Cách sử dụng các tuỳ chọn dòng lệnh với quy trình xây dựng:

  1. Mở hộp thoại Settings (Cài đặt) hoặc Preferences (Lựa chọn ưu tiên):
    • Trên Windows hoặc Linux, hãy chọn File > Settings (Tệp > Cài đặt) trong thanh trình đơn.
    • Trên macOS, hãy chọn Android Studio > Preferences (Lựa chọn ưu tiên) trong thanh trình đơn.
  2. Chuyển đến phần Build, Execution, Deployment > Compiler (Xây dựng, Thực thi, Triển khai > Trình biên dịch).
  3. Trong trường văn bản bên cạnh mục Command-line Options, hãy nhập các tuỳ chọn dòng lệnh.
  4. Nhấp vào OK để lưu và thoát.

Gradle sẽ áp dụng các lựa chọn dòng lệnh này khi bạn thử tạo ứng dụng vào lần tiếp theo.

Các tính năng tạo và chạy nâng cao

Cách mặc định để tạo và chạy ứng dụng trong Android Studio là đủ để kiểm thử một ứng dụng đơn giản. Tuy nhiên, bạn có thể dùng các tính năng tạo và chạy sau đây cho những trường hợp sử dụng nâng cao hơn:

  • Để triển khai ứng dụng ở chế độ gỡ lỗi, hãy nhấp vào biểu tượng Gỡ lỗi . Bằng cách chạy ứng dụng ở chế độ gỡ lỗi, bạn có thể đặt các điểm ngắt trong đoạn mã, kiểm tra các biến và đánh giá biểu thức trong thời gian chạy cũng như chạy các công cụ gỡ lỗi. Hãy xem bài viết Gỡ lỗi ứng dụng để hiểu rõ hơn.

  • Nếu bạn có một ứng dụng lớn và phức tạp hơn, hãy dùng tính năng Áp dụng các thay đổi thay vì nhấp vào biểu tượng Chạy . Điều này giúp tiết kiệm thời gian do bạn không cần khởi động lại ứng dụng mỗi khi muốn triển khai một thay đổi. Để biết thêm thông tin về tính năng Áp dụng các thay đổi, hãy xem phần Triển khai nhanh hơn bằng tính năng Áp dụng các thay đổi.

  • Nếu bạn đang dùng Jetpack Compose, thì tính năng Chỉnh sửa trực tiếp là một tính năng thử nghiệm cho phép bạn cập nhật các thành phần kết hợp theo thời gian thực mà không cần phải nhấp lại vào biểu tượng Chạy

Đọc thêm:  Các đề đọc hiểu về tác phẩm Ai đã đặt tên cho dòng sông

. Như vậy, bạn có thể tập trung viết mã giao diện người dùng mà gần như không bị gián đoạn. Để biết thêm thông tin, hãy xem phần Chỉnh sửa trực tiếp (thử nghiệm).

  • Nếu ứng dụng của bạn có nhiều biến thể bản dựng hoặc phiên bản, thì bạn có thể dùng cửa sổ công cụ Build Variants (Biến thể bản dựng) để chọn biến thể bản dựng cần triển khai. Để biết thêm thông tin về cách chạy một biến thể bản dựng cụ thể, hãy xem phần Thay đổi biến thể bản dựng.

  • Nếu muốn tinh chỉnh các lựa chọn cài đặt, chạy và kiểm thử ứng dụng, bạn có thể thay đổi cấu hình chạy/gỡ lỗi. Để biết thêm thông tin về cách tạo cấu hình chạy/gỡ lỗi tuỳ chỉnh, hãy xem phần Tạo cấu hình chạy/gỡ lỗi.

  • Bạn nên dùng Android Studio cho các nhu cầu phát triển ứng dụng, nhưng cũng có thể triển khai ứng dụng cho thiết bị thực hoặc thiết bị ảo từ dòng lệnh. Hãy xem bài viết Tạo ứng dụng từ dòng lệnh để biết thêm thông tin.

Triển khai nhanh hơn bằng tính năng Áp dụng các thay đổi

Với tính năng Áp dụng các thay đổi trong Android Studio 3.5 trở lên, bạn có thể áp dụng các thay đổi về tài nguyên và mã cho ứng dụng đang chạy mà không cần khởi động lại ứng dụng. Trong một số trường hợp, bạn không cần khởi động lại hoạt động hiện tại. Tính linh hoạt này giúp bạn kiểm soát số lượng ứng dụng được khởi động lại khi muốn triển khai và thử nghiệm các thay đổi nhỏ, tăng dần trong khi vẫn duy trì trạng thái hiện tại của thiết bị.

Tính năng Áp dụng các thay đổi sử dụng những chức năng trong quá trình triển khai JVMTI Android được hỗ trợ trên các thiết bị chạy Android 8.0 (API cấp 26) trở lên. Để tìm hiểu thêm về cách hoạt động của tính năng Áp dụng thay đổi, hãy xem Android Studio Project Marble: Apply Changes (Android Studio Project Marble: Áp dụng các thay đổi).

Yêu cầu

Bạn chỉ có thể áp dụng các hành động Áp dụng thay đổi khi đáp ứng các điều kiện sau:

  • Bạn tạo APK của ứng dụng bằng cách sử dụng biến thể bản dựng gỡ lỗi.
  • Bạn triển khai ứng dụng của mình cho một thiết bị mục tiêu hoặc trình mô phỏng chạy Android 8.0 (API cấp 26) trở lên.

Sử dụng tuỳ chọn Apply Changes (Áp dụng thay đổi)

Hãy sử dụng các tuỳ chọn sau đây khi bạn muốn triển khai các thay đổi đối với một thiết bị tương thích:

Biểu tượng Áp dụng các thay đổi và khởi động lại hoạt động Biểu tượng Chạy: Cố gắng áp dụng cả các thay đổi về tài nguyên và mã bằng cách khởi động lại hoạt động nhưng không khởi động lại ứng dụng. Nhìn chung, bạn có thể sử dụng lựa chọn này khi sửa đổi mã trong phần nội dung của phương thức hoặc sửa đổi một tài nguyên hiện có.

Bạn cũng có thể thực hiện thao tác này bằng cách nhấn tổ hợp phím Control + Alt + F10 (Control + Command + Shift + R trên macOS).

Biểu tượng Áp dụng thay đổi mã Nút giao diện người dùng: Cố gắng chỉ áp dụng các thay đổi đối với mã mà hoàn toàn không cần khởi động lại. Nhìn chung, bạn có thể sử dụng lựa chọn này khi sửa đổi mã trong phần nội dung của phương thức nhưng chưa sửa đổi bất kỳ tài nguyên nào. Nếu bạn đã sửa đổi cả mã và tài nguyên, hãy dùng tính năng Áp dụng các thay đổi và bắt đầu lại hoạt động.

Bạn cũng có thể thực hiện thao tác này bằng cách nhấn tổ hợp phím Control + F10 (Control + Command + R trên macOS).

Biểu tượng Chạy : Triển khai tất cả các thay đổi và khởi động lại ứng dụng. Hãy sử dụng lựa chọn này khi không thể áp dụng các thay đổi bạn đã thực hiện bằng một trong các lựa chọn Áp dụng các thay đổi. Để tìm hiểu thêm về các loại thay đổi yêu cầu khởi động lại ứng dụng, hãy xem phần Các giới hạn của tính năng Áp dụng các thay đổi.

Bật tính năng chạy dự phòng cho hành động Áp dụng các thay đổi

Khi bạn nhấp vào Apply Changes and Restart Activity (Áp dụng các thay đổi và khởi động lại hoạt động) hoặc Apply Code Changes (Áp dụng thay đổi mã), Android Studio sẽ tạo một APK mới và xác định xem có thể áp dụng các thay đổi đó hay không. Nếu các thay đổi đó không áp dụng được và sẽ khiến tính năng Áp dụng các thay đổi bị lỗi, thì Android Studio sẽ nhắc bạn Chạy lại ứng dụng.

Đọc thêm:  Cách bỏ gạch đỏ trong Word các phiên bản cập nhật mới nhất

Nếu không muốn nhận lời nhắc mỗi khi điều này xảy ra, thì bạn có thể định cấu hình để Android Studio tự động chạy lại ứng dụng khi không thể áp dụng các thay đổi. Để bật hành vi này, hãy làm theo các bước sau:

  1. Mở hộp thoại Settings (Cài đặt) hoặc Preferences (Tuỳ chọn):

    • Trên Windows hoặc Linux, hãy chọn File > Settings (Tệp > Cài đặt) trong trình đơn.
    • Trên macOS, hãy chọn Android Studio > Preferences (Android Studio > Lựa chọn ưu tiên) trong trình đơn.
  2. Chuyển đến mục Build, Execution, Deployment > Deployment (Tạo, Thực thi, Triển khai > Triển khai).

  3. Chọn các hộp đánh dấu để bật tính năng tự động chạy dự phòng cho một hoặc cả hai hành động Áp dụng các thay đổi.

  4. Nhấp vào OK.

Lưu ý: Một số loại thay đổi không khiến tính năng Áp dụng các thay đổi bị lỗi, nhưng bạn vẫn phải khởi động lại ứng dụng theo cách thủ công trước khi có thể thấy những thay đổi đó. Ví dụ: nếu bạn thực hiện các thay đổi đối với phương thức onCreate() của một hoạt động, thì các thay đổi đó chỉ có hiệu lực sau khi hoạt động đó được chạy lại, vì vậy, bạn phải khởi động lại ứng dụng để thấy các thay đổi đó.

Các thay đổi tuỳ thuộc vào nền tảng

Một số tính năng của Áp dụng thay đổi phụ thuộc vào các phiên bản cụ thể của nền tảng Android. Để áp dụng những loại thay đổi này, bạn phải triển khai ứng dụng trên một thiết bị chạy phiên bản Android đó (trở lên). Ví dụ: để thêm một phương thức, cần có Android 11 trở lên.

Giới hạn của tính năng Áp dụng các thay đổi

Tính năng Áp dụng thay đổi được thiết kế để tăng tốc quá trình triển khai ứng dụng. Tuy nhiên, có một số giới hạn về thời điểm có thể dùng tính năng này.

Các thay đổi đối với mã yêu cầu khởi động lại ứng dụng

Một số thay đổi đối với mã và tài nguyên sẽ không thể áp dụng được cho đến khi ứng dụng được khởi động lại, bao gồm:

* Adding or removing a field * Removing a method * Changing method signatures * Changing modifiers of methods or classes * Changing class inheritance * Changing values in enums * Adding or removing a resource * Changing the app manifest * Changing native libraries (SO files)

Thư viện và trình bổ trợ

Một số thư viện và trình bổ trợ tự động thực hiện các thay đổi đối với tệp kê khai của ứng dụng hoặc tài nguyên được tham chiếu trong tệp kê khai đó. Việc cập nhật tự động này có thể ảnh hưởng đến tính năng Áp dụng các thay đổi theo những cách sau:

  • Nếu thư viện hoặc trình bổ trợ thực hiện các thay đổi đối với tệp kê khai của ứng dụng, thì bạn không thể dùng tính năng Áp dụng các thay đổi. Bạn phải khởi động lại ứng dụng để xem các thay đổi của mình.
  • Nếu thư viện hoặc trình bổ trợ thực hiện các thay đổi đối với tệp tài nguyên của ứng dụng, thì bạn không thể dùng tính năng Áp dụng thay đổi mã Nút giao diện người dùng. Bạn phải dùng tính năng Áp dụng các thay đổi và bắt đầu lại hoạt động Biểu tượng Chạy (hoặc khởi động lại ứng dụng) để xem các thay đổi.

Để tránh những giới hạn này, hãy tắt mọi bản cập nhật tự động cho các biến thể bản dựng gỡ lỗi của bạn.

Ví dụ: Firebase Crashlytics cập nhật các tài nguyên ứng dụng bằng một mã bản dựng duy nhất trong mỗi bản dựng. Điều này sẽ ngăn bạn sử dụng tính năng Áp dụng thay đổi mã Nút giao diện người dùng và yêu cầu bạn khởi động lại hoạt động của ứng dụng để xem những thay đổi của mình. Hãy vô hiệu hoá hành vi này để sử dụng tính năng Áp dụng thay đổi mã cùng Crashlytics với các bản gỡ lỗi.

Mã tham chiếu trực tiếp nội dung trong một APK đã cài đặt

Nếu mã của bạn tham chiếu trực tiếp nội dung từ APK của ứng dụng đã được cài đặt trên thiết bị, thì mã đó có thể gây ra sự cố hoặc không hoạt động bình thường sau khi bạn nhấp vào biểu tượng Áp dụng thay đổi mã Nút giao diện người dùng. Hành vi này xảy ra do khi bạn nhấp vào biểu tượng Áp dụng thay đổi mã, tệp APK cơ sở trên thiết bị sẽ bị thay thế trong quá trình cài đặt. Trong những trường hợp này, bạn có thể nhấp vào biểu tượng Áp dụng các thay đổi và khởi động lại hoạt động Biểu tượng Chạy hoặc Chạy .

Nếu bạn gặp bất kỳ vấn đề nào khác khi dùng tính năng Áp dụng các thay đổi, hãy báo cáo lỗi.

Chỉnh sửa trực tiếp

Chỉnh sửa trực tiếp là một tính năng thử nghiệm trong Android Studio. Tính năng này cho phép bạn cập nhật các thành phần kết hợp trong trình mô phỏng và thiết bị thực theo thời gian thực. Tính năng này giảm thiểu việc chuyển đổi ngữ cảnh giữa thao tác viết và tạo ứng dụng, cho phép bạn tập trung viết mã trong thời gian dài hơn mà không bị gián đoạn.

Tìm hiểu thêm về tính năng Chỉnh sửa trực tiếp

Đọc thêm:  Tả cô giáo chủ nhiệm lớp em (30 mẫu) SIÊU HAY | Tập làm văn lớp 3

Thay đổi biến thể bản dựng

Theo mặc định, Android Studio sẽ tạo phiên bản gỡ lỗi của ứng dụng (chỉ dùng trong quá trình phát triển) khi bạn nhấp vào biểu tượng Chạy .

Để thay đổi biến thể bản dựng mà Android Studio sử dụng, hãy làm theo một trong những cách sau:

  • Chọn Build > Select Build Variant (Tạo > Chọn biến thể bản dựng) trong trình đơn.
  • Chọn View > Tool Windows > Build Variants (Xem > Cửa sổ công cụ > Biến thể bản dựng) trong trình đơn.
  • Nhấp vào thẻ Build Variants (Biến thể bản dựng) trên thanh cửa sổ công cụ.

Đối với các dự án không có mã gốc/C++, bảng Build Variants (Biến thể bản dựng) có 2 cột: Module (Mô-đun) và Active Build Variant (Biến thể bản dựng đang hoạt động). Giá trị Active Build Variant (Biến thể bản dựng đang hoạt động) của mô-đun xác định biến thể bản dựng mà IDE triển khai cho thiết bị được kết nối của bạn và xuất hiện trong trình chỉnh sửa.

Hình 9. Bảng Build Variants (Biến thể bản dựng) có 2 cột cho các dự án không có mã gốc/C++.

Để chuyển đổi giữa các biến thể, hãy nhấp vào ô Active Build Variant (Biến thể bản dựng đang hoạt động) của một mô-đun và chọn biến thể mong muốn trong danh sách.

Đối với các dự án có mã gốc/C++, bảng Build Variants (Biến thể bản dựng) có 3 cột sau:

  • Module (Mô-đun)
  • Active Build Variant (Biến thể bản dựng đang hoạt động)
  • Active ABI (ABI đang hoạt động)

Giá trị Active Build Variant (Biến thể bản dựng đang hoạt động) của mô-đun xác định biến thể bản dựng mà IDE triển khai cho thiết bị của bạn và xuất hiện trong trình chỉnh sửa. Đối với các mô-đun gốc, giá trị Active ABI (ABI đang hoạt động) xác định ABI mà trình chỉnh sửa sử dụng, nhưng không ảnh hưởng đến nội dung được triển khai.

Hình 10. Bảng Build Variants (Biến thể bản dựng) sẽ thêm cột Active ABI (ABI đang hoạt động) cho các dự án có mã gốc/C++.

Để thay đổi biến thể bản dựng hoặc ABI, hãy nhấp vào ô của cột Active Build Variant (Biến thể bản dựng đang hoạt động) hoặc Active ABI (ABI đang hoạt động) và chọn biến thể hoặc ABI mong muốn trong danh sách. Sau khi bạn thay đổi lựa chọn, IDE sẽ tự động đồng bộ hoá dự án của bạn. Khi một ứng dụng hoặc mô-đun thư viện có thay đổi thì thay đổi đó sẽ áp dụng cho tất cả các hàng phụ thuộc.

Theo mặc định, các dự án mới được thiết lập với 2 biến thể bản dựng: 1 biến thể gỡ lỗi và 1 biến thể bản phát hành. Bạn cần xây dựng biến thể bản phát hành để chuẩn bị ứng dụng cho bản phát hành công khai. Để xác định các biến thể khác của ứng dụng có các tính năng hoặc yêu cầu khác nhau về thiết bị, bạn có thể xác định các biến thể bản dựng bổ sung.

Các xung đột trong hộp thoại Build Variants (Biến thể bản dựng) của Android Studio

Trong hộp thoại Build Variants (Biến thể bản dựng) của Android Studio, bạn có thể thấy thông báo lỗi cho biết xung đột giữa các biến thể bản dựng, chẳng hạn như sau:

Lỗi này không chỉ ra vấn đề về bản dựng với Gradle. Lỗi này cho biết IDE của Android Studio không thể phân giải các biểu tượng giữa những biến thể của các mô-đun đã chọn.

Ví dụ: nếu bạn có một mô-đun M1 phụ thuộc vào biến thể v1 của mô-đun M2, nhưng M2 có biến thể v2 được chọn trong IDE, thì bạn sẽ thấy biểu tượng chưa phân giải trong IDE. Giả sử M1 phụ thuộc vào một lớp chỉ có trong v1; khi bạn chọn v2, lớp đó không được IDE xác định. Do đó, IDE không phân giải được tên lớp và hiển thị lỗi trong mã của mô-đun M1.

Những thông báo lỗi này xuất hiện do IDE không thể tải mã cho nhiều biến thể cùng một lúc. Tuy nhiên, xét về bản dựng ứng dụng, biến thể được chọn trong hộp thoại này sẽ không tạo ra tác động vì Gradle tạo ứng dụng của bạn bằng mã nguồn được chỉ định trong hướng dẫn cho bản dựng Gradle, chứ không dựa trên nội dung hiện được tải trong IDE.

Thay đổi cấu hình chạy/gỡ lỗi

Khi bạn chạy ứng dụng của mình lần đầu tiên, Android Studio sẽ sử dụng cấu hình chạy mặc định. Cấu hình chạy sẽ chỉ định việc triển khai ứng dụng của bạn từ một tệp APK hay Android App Bundle, cũng như chỉ định mô-đun sẽ chạy, gói sẽ triển khai, hoạt động sẽ bắt đầu, thiết bị mục tiêu, chế độ cài đặt trình mô phỏng, tuỳ chọn Logcat và nhiều tuỳ chọn khác.

Cấu hình chạy/gỡ lỗi mặc định sẽ tạo một APK, khởi chạy hoạt động dự án mặc định và sử dụng hộp thoại Select Deployment Target (Chọn đối tượng triển khai) để lựa chọn thiết bị mục tiêu. Nếu các chế độ cài đặt mặc định không phù hợp với dự án hoặc mô-đun của bạn, bạn có thể tuỳ chỉnh cấu hình chạy/gỡ lỗi hoặc tạo một cấu hình mới, ở cấp dự án, mặc định và mô-đun.

Để chỉnh sửa cấu hình chạy/gỡ lỗi, hãy chọn Run > Edit Configurations (Chạy > Chỉnh sửa cấu hình). Để biết thêm thông tin, hãy xem bài viết Tạo và chỉnh sửa cấu hình chạy/gỡ lỗi.

Đánh giá bài viết

Theo dõi chúng tôi www.hql-neu.edu.vn để có thêm nhiều thông tin bổ ích nhé!!!

Dustin Đỗ

Tôi là Dustin Đỗ, tốt nghiệp trường ĐH Harvard. Hiện tôi là quản trị viên cho website: www.hql-neu.edu.vn. Hi vọng mọi kiến thức chuyên sâu của tôi có thể giúp các bạn trong quá trình học tập!!!

Related Articles

Back to top button