Có thể khó tự động hoá quy trình kiểm thử trò chơi khi các ứng dụng trò chơi được xây dựng trên nhiều khung giao diện người dùng. Các bài kiểm thử Vòng lặp trò chơi cho phép bạn tích hợp các bài kiểm thử gốc với Test Lab và dễ dàng chạy các bài kiểm thử đó trên những thiết bị bạn chọn. Thử nghiệm Vòng lặp trò chơi chạy thử nghiệm thông qua ứng dụng trò chơi của bạn, đồng thời mô phỏng hành động của người chơi thực. Hướng dẫn này cho bạn biết cách chạy thử nghiệm Vòng lặp trò chơi, sau đó xem và quản lý kết quả thử nghiệm trong bảng điều khiển Firebase.
Thử nghiệm vòng lặp trò chơi là gì?
Vì ứng dụng trò chơi kết xuất trên nhiều khung và công cụ giao diện người dùng, chẳng hạn như mã C++ Unity, Unreal hoặc OpenGL/Vulkan, nên các công cụ tự động hoá tiêu chuẩn không thể kiểm tra hoặc tương tác với các phần tử trên giao diện người dùng. Kiểm thử vòng lặp trò chơi cho phép bạn tích hợp các kiểm thử công cụ gốc với Test Lab bằng cách khởi chạy trò chơi của bạn với một ý định chứa số kịch bản cụ thể. Số kịch bản này nhắc ứng dụng của bạn chạy logic được viết sẵn, mô phỏng AI hoặc kiểm tra hiệu suất ngay trong công cụ phát triển trò chơi.
Sau khi khởi chạy, Test Lab sẽ không tương tác thêm với giao diện người dùng của trò chơi. Thay vào đó, Test Lab đóng vai trò là môi trường và phương tiện vận chuyển thử nghiệm: khởi chạy tình huống cụ thể, theo dõi sự cố và thời gian chờ, đồng thời thu thập mọi nhật ký kết quả tuỳ chỉnh khi ứng dụng của bạn chạy xong vòng lặp.
Sự khác biệt giữa vòng lặp trò chơi và kiểm thử đo lường
- Kiểm thử đo lường (chẳng hạn như Espresso hoặc Trình tự động hoá giao diện người dùng) dựa vào các khung bên ngoài để thúc đẩy hoạt động tương tác trên giao diện người dùng, nhấp vào nút và xác nhận trạng thái ứng dụng trên hệ phân cấp Chế độ xem Android từ bên ngoài ứng dụng.
- Kiểm thử vòng lặp trò chơi uỷ quyền logic kiểm thử cho ứng dụng của bạn. Ứng dụng của bạn chạy vòng lặp kiểm thử nội bộ hoặc mô phỏng riêng mà không có hoạt động tương tác giao diện người dùng bên ngoài, trong khi Test Lab kích hoạt kịch bản của bạn và thu thập kết quả kiểm thử.
Ví dụ
Giả sử bạn muốn xác minh rằng trò chơi của mình duy trì ít nhất 60 khung hình/giây trên nhiều thiết bị thực. Bạn có thể triển khai kịch bản 1 bên trong mã trò chơi để tải cấp độ phức tạp nhất về mặt hình ảnh và cho phép người chơi AI hoặc tập lệnh tự động chơi trong 2 phút.
Khi Test Lab kích hoạt kịch bản 1, trò chơi của bạn sẽ bắt đầu lượt chơi AI, theo dõi thời gian kết xuất khung hình và mức sử dụng bộ nhớ, truyền trực tuyến các chỉ số đó đến tệp nhật ký đầu ra tuỳ chỉnh (logFile) và gọi finish() khi hoàn tất.
Sau đó, Test Lab sẽ ghi lại tệp nhật ký và cung cấp tệp đó cho bạn trong Cloud Storage và bảng điều khiển Firebase.
Trường hợp sử dụng
Tuỳ thuộc vào công cụ phát triển trò chơi, bạn có thể triển khai các chương trình kiểm thử có một hoặc nhiều vòng lặp. Vòng lặp là một lần chạy thử nghiệm toàn bộ hoặc một phần trên ứng dụng trò chơi của bạn. Bạn có thể dùng vòng lặp trò chơi để:
- Chạy một cấp độ trong trò chơi của bạn theo cách mà người dùng cuối sẽ chơi. Bạn có thể tạo tập lệnh cho hoạt động đầu vào của người dùng, để người dùng ở trạng thái rảnh hoặc thay thế người dùng bằng AI nếu điều đó hợp lý trong trò chơi của bạn (ví dụ: nếu bạn có một ứng dụng trò chơi đua xe và đã triển khai AI, bạn có thể đặt một người lái xe AI phụ trách hoạt động đầu vào của người dùng).
- Chạy trò chơi ở chế độ cài đặt chất lượng cao nhất để xem thiết bị có hỗ trợ hay không.
- Chạy kiểm thử kỹ thuật (biên dịch nhiều chương trình đổ bóng, thực thi các chương trình đó, kiểm tra xem kết quả có như mong đợi hay không, v.v.).
Bạn có thể chạy thử nghiệm Vòng lặp trò chơi trên một thiết bị thử nghiệm, một nhóm thiết bị thử nghiệm hoặc trên Test Lab. Tuy nhiên, bạn không nên chạy thử nghiệm Vòng lặp trò chơi trên thiết bị ảo vì các thiết bị này có tốc độ khung hình đồ hoạ thấp hơn thiết bị thực.
Trước khi bắt đầu
Để triển khai một thử nghiệm, trước tiên, bạn phải định cấu hình ứng dụng cho các thử nghiệm Vòng lặp trò chơi.
Trong tệp kê khai ứng dụng, hãy thêm một bộ lọc ý định mới vào hoạt động của bạn:
<activity android:name=".MyActivity"> <intent-filter> <action android:name="com.google.intent.action.TEST_LOOP"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="application/javascript"/> </intent-filter> <intent-filter> ... (other intent filters here) </intent-filter> </activity>Nhờ đó, Test Lab có thể khởi chạy trò chơi của bạn bằng cách kích hoạt trò chơi bằng một ý định cụ thể.
Trong mã của bạn (bạn nên thêm vào bên trong phần khai báo phương thức
onCreate), hãy thêm đoạn mã sau:Kotlin
val launchIntent = intent if (launchIntent.action == "com.google.intent.action.TEST_LOOP") { val scenario = launchIntent.getIntExtra("scenario", 0) // Code to handle your game loop here }
Java
Intent launchIntent = getIntent(); if(launchIntent.getAction().equals("com.google.intent.action.TEST_LOOP")) { int scenario = launchIntent.getIntExtra("scenario", 0); // Code to handle your game loop here }
Điều này cho phép hoạt động của bạn kiểm tra ý định khởi chạy hoạt động đó. Bạn cũng có thể thêm mã này sau nếu muốn (ví dụ: sau khi tải công cụ phát triển trò chơi ban đầu).
Nên làm: Ở cuối quy trình kiểm thử, hãy thêm:
Kotlin
yourActivity.finish()
Java
yourActivity.finish();
Thao tác này sẽ đóng ứng dụng khi quá trình kiểm thử Vòng lặp trò chơi hoàn tất. Bài kiểm thử dựa vào khung giao diện người dùng của ứng dụng để bắt đầu vòng lặp tiếp theo và việc đóng ứng dụng sẽ cho biết rằng bài kiểm thử đã hoàn tất.
Tạo và chạy thử nghiệm Vòng lặp trò chơi
Sau khi định cấu hình ứng dụng cho các thử nghiệm Vòng lặp trò chơi, bạn có thể ngay lập tức tạo một thử nghiệm và chạy thử nghiệm đó trong ứng dụng trò chơi của mình. Bạn có thể chọn chạy thử nghiệm trong Test Lab bằng cách sử dụng bảng điều khiển Firebase hoặc giao diện dòng lệnh (CLI) gcloud, hoặc trên thiết bị cục bộ bằng Trình quản lý vòng lặp thử nghiệm.
Chạy trên thiết bị cục bộ
Trình quản lý vòng lặp thử nghiệm của Test Lab là một ứng dụng nguồn mở giúp bạn tích hợp các thử nghiệm Vòng lặp trò chơi và chạy các thử nghiệm đó trên thiết bị cục bộ. Điều này cũng cho phép nhóm Đảm bảo chất lượng chạy cùng một vòng lặp trò chơi trên thiết bị của họ.
Cách chạy kiểm thử trên thiết bị cục bộ bằng Trình quản lý vòng lặp thử nghiệm:
- Tải Trình quản lý vòng lặp thử nghiệm xuống điện thoại hoặc máy tính bảng rồi cài đặt bằng cách chạy:
adb install testloopmanager.apk
- Trên thiết bị, hãy mở ứng dụng Test Loop Apps (Ứng dụng vòng lặp kiểm thử) trên điện thoại hoặc máy tính bảng. Ứng dụng này sẽ hiển thị danh sách các ứng dụng trên thiết bị của bạn có thể chạy bằng vòng lặp trò chơi. Nếu bạn không thấy ứng dụng trò chơi của mình ở đây, hãy đảm bảo bộ lọc ý định của bạn khớp với bộ lọc được mô tả trong bước đầu tiên của phần Trước khi bắt đầu.
- Chọn ứng dụng trò chơi của bạn, sau đó chọn số vòng lặp bạn muốn chạy. Lưu ý: Ở bước này, bạn có thể chọn chạy một nhóm nhỏ các vòng lặp thay vì chỉ một vòng lặp. Để biết thêm thông tin về cách chạy nhiều vòng lặp cùng một lúc, hãy xem phần Tính năng không bắt buộc.
- Nhấp vào Chạy thử nghiệm. Thử nghiệm của bạn sẽ bắt đầu chạy ngay lập tức.
Chạy trong Test Lab
Bạn có thể chạy thử nghiệm Vòng lặp trò chơi trong Test Lab bằng cách sử dụng bảng điều khiển Firebase hoặc gcloud CLI. Trước khi bắt đầu, nếu bạn chưa làm, hãy mở bảng điều khiển Firebase rồi tạo một dự án.
Sử dụng bảng điều khiển Firebase
- Trong bảng điều khiển Firebase, hãy nhấp vào Test Lab trong bảng điều khiển bên trái.
- Nhấp vào Run Your First Test (Chạy thử nghiệm đầu tiên) (hoặc Run a Test (Chạy thử nghiệm) nếu dự án của bạn đã chạy thử nghiệm trước đó).
- Chọn Vòng lặp trò chơi làm loại thử nghiệm, rồi nhấp vào Tiếp tục.
- Nhấp vào Browse (Duyệt qua), sau đó duyệt đến tệp
.apkcủa ứng dụng. Lưu ý: Ở bước này, bạn có thể chọn chạy một nhóm nhỏ các vòng lặp thay vì chỉ một vòng lặp. Để biết thêm thông tin về cách chạy nhiều vòng lặp cùng một lúc, hãy xem phần Tính năng không bắt buộc. - Nhấp vào Tiếp tục.
- Chọn thiết bị thực để kiểm thử ứng dụng.
- Nhấp vào Bắt đầu kiểm thử.
Để biết thêm thông tin về cách bắt đầu sử dụng bảng điều khiển Firebase, hãy xem bài viết Bắt đầu kiểm thử bằng bảng điều khiển Firebase.
Sử dụng giao diện dòng lệnh (CLI) gcloud
Nếu bạn chưa có, hãy tải xuống và cài đặt Google Cloud SDK
Đăng nhập vào gcloud CLI bằng Tài khoản Google của bạn:
gcloud auth loginĐặt dự án Firebase của bạn trong gcloud, trong đó
PROJECT_IDlà mã dự án Firebase của bạn:gcloud config set project PROJECT_ID
Chạy kiểm thử đầu tiên:
gcloud firebase test android run \ --type=game-loop --app=<var>path-to-apk</var> \ --device model=herolte,version=23
Để biết thêm thông tin về cách bắt đầu sử dụng gcloud CLI, hãy xem phần Bắt đầu kiểm thử từ dòng lệnh gcloud.
Các tính năng không bắt buộc
Test Lab cung cấp một số tính năng không bắt buộc cho phép bạn tuỳ chỉnh thêm các thử nghiệm của mình, bao gồm khả năng ghi dữ liệu đầu ra, hỗ trợ nhiều vòng lặp trò chơi và nhãn cho các vòng lặp liên quan.
Ghi dữ liệu đầu ra
Khi Test Lab chạy trò chơi của bạn, công cụ này sẽ chỉ định một URL trỏ đến tệp kết quả cục bộ trên thiết bị kiểm thử, có thể truy cập bằng launchIntent.getData(). Trò chơi của bạn có thể ghi kết quả kiểm thử, chỉ số hiệu suất và nhật ký (logFile) trực tiếp vào vị trí này trong quá trình chạy kiểm thử.
Bạn có thể ghi bất kỳ nội dung tuỳ ý nào vào logFile, chẳng hạn như văn bản thuần túy, dữ liệu CSV, thời gian kết xuất khung hình hoặc báo cáo chẩn đoán tuỳ chỉnh. Không có quy định hạn chế hoặc yêu cầu định dạng nào đối với nội dung bạn viết; nội dung này sẽ ghi lại tệp khi quá trình kiểm thử hoàn tất và tải tệp lên bộ chứa Cloud Storage cùng với các cấu phần phần mềm kiểm thử khác.
Test Lab tuân theo các phương pháp hay nhất đã được thiết lập để chia sẻ tệp giữa các ứng dụng được mô tả trong phần Chia sẻ tệp.
Trong phương thức onCreate() của hoạt động, nơi chứa ý định, bạn có thể truy xuất và kiểm tra tệp đầu ra dữ liệu bằng cách chạy mã sau:
Kotlin
val launchIntent = intent val logFile = launchIntent.data logFile?.let { Log.i(TAG, "Log file ${it.encodedPath}") // ... }
Java
Intent launchIntent = getIntent(); Uri logFile = launchIntent.getData(); if (logFile != null) { Log.i(TAG, "Log file " + logFile.getEncodedPath()); // ... }
Nếu muốn ghi vào tệp từ phía C++ của ứng dụng trò chơi, bạn có thể truyền chỉ số mô tả tệp thay vì đường dẫn tệp:
Kotlin
val launchIntent = intent val logFile = launchIntent.data var fd = -1 logFile?.let { Log.i(TAG, "Log file ${it.encodedPath}") fd = try { contentResolver .openAssetFileDescriptor(logFile, "w")!! .parcelFileDescriptor .fd } catch (e: FileNotFoundException) { e.printStackTrace() -1 } catch (e: NullPointerException) { e.printStackTrace() -1 } } // C++ code invoked here. // native_function(fd);
Java
Intent launchIntent = getIntent(); Uri logFile = launchIntent.getData(); int fd = -1; if (logFile != null) { Log.i(TAG, "Log file " + logFile.getEncodedPath()); try { fd = getContentResolver() .openAssetFileDescriptor(logFile, "w") .getParcelFileDescriptor() .getFd(); } catch (FileNotFoundException e) { e.printStackTrace(); fd = -1; } catch (NullPointerException e) { e.printStackTrace(); fd = -1; } } // C++ code invoked here. // native_function(fd);
C++
#include <unistd.h> JNIEXPORT void JNICALL Java_my_package_name_MyActivity_native_function(JNIEnv *env, jclass type, jint log_file_descriptor) { // The file descriptor needs to be duplicated. int my_file_descriptor = dup(log_file_descriptor); }
Ví dụ về tệp đầu ra
Mặc dù Test Lab không yêu cầu định dạng cụ thể cho logFile, nhưng việc định cấu trúc kết quả dưới dạng JSON khớp với giản đồ bên dưới cho phép bảng điều khiển Firebase (https://console.firebase.google.com/project/_/testlab) phân tích cú pháp và hiển thị các chỉ số tóm tắt cho kiểm thử vòng lặp trò chơi.
Thông tin chi tiết quan trọng về ví dụ này:
- Người cung cấp dữ liệu: Bạn (nhà phát triển kiểm thử) chịu trách nhiệm tính toán và ghi tất cả chỉ số vào tệp này từ mã trò chơi của bạn. Test Lab không tự động thu thập hoặc tạo các điểm dữ liệu này cho bạn.
- Thêm trường tuỳ chỉnh: Các khu vực được đánh dấu là
/.../cho biết nơi bạn có thể thêm các cặp khoá-giá trị tuỳ chỉnh tuỳ ý (ví dụ:"rendered_vertices": 12000hoặc"ai_error_count": 0). Bạn có thể thêm bất kỳ thuộc tính JSON hợp lệ nào vào kết quả khi ghi tệp từ ứng dụng, miễn là tên trường không xung đột với các trường giản đồ nhưnamehoặcstart_timestamp. - Nơi tìm tệp đầu ra: Sau khi quá trình kiểm thử hoàn tất, tệp đầu ra thô sẽ được lưu trữ và có thể tải xuống trong bộ chứa kết quả Cloud Storage (
GCS) của dự án bên trong thư mục cấu phần phần mềm chạy kiểm thử. Bạn cũng có thể xem và kiểm tra kết quả phân tích cú pháp trên trang Test Lab của bảng điều khiển Firebase.
Sau đây là ví dụ về tệp đầu ra JSON có cấu trúc:
{
"name": "test name",
"start_timestamp": 0, // Timestamp of the test start (in us).
Can be absolute or relative
"driver_info": "...",
"frame_stats": [
{
"timestamp": 1200000, // Timestamp at which this section was written
It contains value regarding the period
start_timestamp(0) -> this timestamp (1200000 us)
"avg_frame_time": 15320, // Average time to render a frame in ns
"nb_swap": 52, // Number of frame rendered
"threads": [
{
"name": "physics",
"Avg_time": 8030 // Average time spent in this thread per frame in us
},
{
"name": "AI",
"Avg_time": 2030 // Average time spent in this thread per frame in us
}
],
/.../ // Any custom field you want (vertices display on the screen, nb units …)
},
{
// Next frame data here, same format as above
}
],
"loading_stats": [
{
"name": "assets_level_1",
"total_time": 7850, // in us
/.../
},
{
"name": "victory_screen",
"total_time": 554, // in us
/.../
}
],
/.../, // You can add custom fields here
}
Nhiều vòng lặp trò chơi
Bạn có thể thấy việc chạy nhiều vòng lặp trò chơi trong ứng dụng là hữu ích. Vòng lặp là một lần chạy hoàn chỉnh ứng dụng trò chơi của bạn từ đầu đến cuối. Ví dụ: nếu trò chơi của bạn có nhiều cấp độ, bạn có thể muốn có một vòng lặp trò chơi để khởi chạy từng cấp độ thay vì có một vòng lặp lặp lại tất cả các cấp độ đó. Bằng cách đó, nếu ứng dụng của bạn gặp sự cố ở cấp 32, bạn có thể trực tiếp chạy vòng lặp trò chơi đó để tái hiện sự cố và kiểm thử bản sửa lỗi.
Cách cho phép ứng dụng chạy nhiều vòng lặp cùng một lúc:
Nếu bạn đang chạy thử nghiệm bằng Trình quản lý vòng lặp thử nghiệm:
Thêm dòng sau vào tệp kê khai của ứng dụng, bên trong phần tử
<application>:<meta-data android:name="com.google.test.loops" android:value="5" />
Ý định khởi chạy này chứa vòng lặp mục tiêu dưới dạng tham số số nguyên. Trong trường
android:value, bạn có thể chỉ định một số nguyên từ 1 đến 1024 (số vòng lặp tối đa được phép cho một lần kiểm thử). Lưu ý rằng các vòng lặp được lập chỉ mục bắt đầu từ 1, không phải 0.Trong ứng dụng Trình quản lý vòng lặp thử nghiệm, một màn hình lựa chọn sẽ xuất hiện để bạn chọn(các) vòng lặp mà bạn muốn chạy. Nếu bạn chọn nhiều vòng lặp, thì mỗi vòng lặp sẽ được khởi chạy theo trình tự sau khi vòng lặp trước đó hoàn tất.
Nếu bạn đang chạy thử nghiệm bằng bảng điều khiển Firebase, hãy nhập danh sách hoặc dải số vòng lặp vào trường Scenarios (Kịch bản).
Nếu bạn đang chạy kiểm thử bằng CLI gcloud, hãy chỉ định danh sách số vòng lặp bằng cách sử dụng cờ
--scenario-numbers. Ví dụ:--scenario-numbers=1,3,5chạy vòng lặp 1, 3 và 5.Nếu bạn đang viết mã C++ và muốn thay đổi hành vi của vòng lặp, hãy truyền thêm thông tin sau vào mã C++ gốc:
Kotlin
val launchIntent = intent val scenario = launchIntent.getIntExtra("scenario", 0)
Java
Intent launchIntent = getIntent(); int scenario = launchIntent.getIntExtra("scenario", 0);
Giờ đây, bạn có thể thay đổi hành vi của vòng lặp dựa trên giá trị
intthu được.
Gắn nhãn vòng lặp trò chơi
Khi gắn nhãn cho các vòng lặp trò chơi bằng một hoặc nhiều nhãn kịch bản, bạn và nhóm QA có thể dễ dàng khởi chạy một tập hợp các vòng lặp trò chơi có liên quan (ví dụ: "tất cả vòng lặp trò chơi tương thích") và thử nghiệm các vòng lặp đó trong một ma trận duy nhất. Bạn có thể tạo nhãn của riêng mình hoặc sử dụng nhãn được xác định trước do Test Lab cung cấp:
com.google.test.loops.player_experience: Vòng lặp For dùng để tái tạo trải nghiệm của người dùng thực khi chơi trò chơi. Mục tiêu của việc kiểm thử bằng các vòng lặp này là tìm ra những vấn đề mà người dùng thực tế sẽ gặp phải khi chơi trò chơi.com.google.test.loops.gpu_compatibility: Đối với các vòng lặp dùng để kiểm thử các vấn đề liên quan đến GPU. Mục tiêu của việc kiểm thử bằng các vòng lặp này là thực thi mã GPU có thể không chạy đúng cách trong phiên bản chính thức, nhằm phát hiện các vấn đề về phần cứng và trình điều khiển.com.google.test.loops.compatibility: Đối với các vòng lặp dùng để kiểm thử nhiều vấn đề về khả năng tương thích, bao gồm cả vấn đề về I/O và OpenSSL.com.google.test.loops.performance: Vòng lặp for dùng để kiểm tra hiệu suất của thiết bị. Ví dụ: một trò chơi có thể chạy ở chế độ cài đặt đồ hoạ phức tạp nhất để xem cách thiết bị mới hoạt động.
Cách cho phép ứng dụng chạy các vòng lặp có cùng nhãn:
Nếu bạn đang chạy thử nghiệm bằng Trình quản lý vòng lặp thử nghiệm:
Trong tệp kê khai của ứng dụng, hãy thêm dòng siêu dữ liệu sau và thay thế LABEL_NAME bằng nhãn bạn chọn:
<meta-data android:name="com.google.test.loops.LABEL_NAME" android:value="1,3-5" />
Trong trường
android:value, bạn có thể chỉ định một dải ô hoặc một tập hợp số nguyên từ 1 đến 1024 (số vòng lặp tối đa được phép cho một lần kiểm thử) đại diện cho các vòng lặp mà bạn muốn gắn nhãn. Xin lưu ý rằng các vòng lặp được lập chỉ mục bắt đầu từ 1, không phải 0. Ví dụ:android:value="1,3-5"áp dụng LABEL_NAME cho các vòng lặp 1, 3, 4 và 5.Trong ứng dụng Trình quản lý vòng lặp thử nghiệm, hãy nhập một hoặc nhiều nhãn vào trường Nhãn.
Nếu bạn đang chạy kiểm thử bằng bảng điều khiển Firebase, hãy nhập một hoặc nhiều nhãn vào trường Labels (Nhãn).
Nếu bạn đang chạy kiểm thử bằng CLI gcloud, hãy chỉ định một hoặc nhiều nhãn kịch bản bằng cách sử dụng cờ
--scenario-labels(ví dụ:--scenario-labels=performance,gpu).
Hỗ trợ cấp phép ứng dụng
Test Lab hỗ trợ các ứng dụng sử dụng dịch vụ Cấp phép ứng dụng do Google Play cung cấp. Để kiểm tra thành công giấy phép khi thử nghiệm ứng dụng bằng Test Lab, bạn phải phát hành ứng dụng lên kênh phát hành công khai trong Cửa hàng Play. Để kiểm thử ứng dụng trong kênh alpha hoặc Kênh thử nghiệm Beta bằng Test Lab, hãy xoá quy trình kiểm tra giấy phép trước khi tải ứng dụng lên Test Lab.
Các vấn đề đã biết
Các thử nghiệm Vòng lặp trò chơi trong Test Lab có các vấn đề đã biết sau đây:
- Một số sự cố không hỗ trợ dấu vết ngăn xếp. Ví dụ: một số bản phát hành có thể chặn kết quả của quy trình
debuggerdbằng cách sử dụngprctl(PR_SET_DUMPABLE, 0). Để tìm hiểu thêm, hãy xemdebuggerd. - API cấp 19 hiện không được hỗ trợ do lỗi quyền truy cập tệp.