Các hàm dựng sẵn bởi Bịp Device
ExecAdbCmd
Đây là hàm quan trọng nhất bởi 99% sự tương tác với thiết bị đều thông qua hàm này.
ExecAdbCmd thực thi một lệnh ADB tới thiết bị
Cú pháp
Chi tiết
Tên |
Mô tả |
args |
Mảng các tham số gửi tới ADB |
Ví dụ
| (async function(){
const result = await ExecAdbCmd (["shell", "echo", "Hello BIP"]);
Log(result);
/* Kết quả trả về là một object như sau:
{
"error": null, //Lỗi nêu có khi gọi adb,
"dataOut": "Hello BIP\r\n", //Output từ stdout
"errorOut": "", //Output từ stderr
"result": "Hello BIP\r\n" //Tổng hợp từ cả stdout + stderr
}
*/
// Bạn cũng có thể truyền tham số vào hàm ExecAdbCmd như sau
// const result = await ExecAdbCmd (["shell", "echo 'Hello BIP'"]);
// const result = await ExecAdbCmd ("shell", "echo", "Hello BIP");
// const result = await ExecAdbCmd ("shell", "echo 'Hello BIP'");
})();
|
ExecShell
Cú pháp
(async function(){
// Nếu bạn quá lười để gõ
// await ExecAdbCmd (["shell", "echo", "Hello BIP"]);
// Hãy dùng ExecShell, kết quả trả về như ExecAdbCmd
await ExecShell (["echo", "Hello BIP"]);
// Hoặc
// await ExecShell (["echo 'Hello BIP'"]);
// await ExecShell ("echo", "Hello BIP");
// await ExecShell ("echo 'Hello BIP'");
})();
ChangeInfo
Thay đổi thông số thiết bị, tham số truyền vào là một object với chi tiết mô tả bên dưới
Cú pháp
await ChangeInfo (option);
Chi tiết: Các thuộc tính của {option}
Tham số |
Mô tả |
brand |
Chỉ định brand nào sẽ dùng, VD: samsung , Xem các brand hỗ trợ. Mặc định là random, ngoài ra bạn cũng có thể tự thêm các device riêng và sử dụng như list device tích hợp của tool. |
model |
Chỉ định model nào sẽ dùng, VD: SM-G930F , Xem các model hỗ trợ. Tham số này chỉ có ý nghĩa khi bạn chỉ định brand . Mặc định là random |
version |
Chỉ định phiên bản android cụ thể. Mặc định là random |
country |
Chỉ định country nào để fake SIM, VD: vn , Xem các country hỗ trợ. Mặc định là random |
carrier |
Chỉ định nhà mạng nào để fake SIM, VD: Viettel , Xem các nhà mạng hỗ trợ. Tham số này chỉ có ý nghĩa khi bạn chỉ định country . Mặc định là random, bạn có thể tự thêm hoặc tùy chỉnh lại các nhà mạng. |
wifiEnabled |
Bật tắt wifi sau khi change: true/false, mặc định là true (bật) |
wipeGoogle |
Wipe data các package của google: true/false, mặc định là true |
resetGoogle |
Wipe source của chplay và google service: true/false, mặc định là true, nếu là true, các app google sẽ đc reset về tại thời điểm cài ROM, update sẽ bị mất (CHPlay, GSF) |
changeSim |
Fake thông tin SIM: true/false, mặc định là true |
changeSdk |
Fake số SDK đúng theo phiên bản Android, chú ý có thể gây lỗi một số app: true/false, mặc định là false |
changeSerial |
Fake số serial của máy: true/false, mặc định là false |
changeLocation |
Fake GEO: true/false, mặc định là true |
changeMacAddr |
Fake wifi mac: true/false, mặc định là true |
changeBluetoothMacAddr |
Fake bluetooth mac: true/false, mặc định là true |
changeTimezone |
Fake timezone: true/false, mặc định là true |
customPackages |
Mảng các app tùy chỉnh để wipe trong khi change, VD: ["com.bip.device", "com.chay.khetlet"], Mặc định là mảng rỗng [] |
uninstallPackages |
Gỡ các app từ tùy chọn customPackages ở trên: true/false, mặc định là false |
hideAdb |
Ẩn ADB: true/false, mặc định là false |
factoryReset |
Factory reset máy: true/false, mặc định là false, xóa sạch app những vẫn giữ lại một số setting hệ thống (như wifi) |
factoryResetByFormat |
true hoặc false. Wipe sạch luôn data, app và các setting đều bị reset, chỉ có ý nghĩa khi factoryReset set là true |
apkDir |
Thư mục chứa file APK để install sau khi change. |
override |
Hàm ChangeInfo sẽ tạo ra một tập các thông số để giả mạo một cách ngẫu nhiên hoặc theo chỉ định như brand , model ... Bạn hoàn toàn có thể thay đổi một toàn bộ các thuộc tính mà ChangeInfo sẽ sử dụng, chi tiết dưới phần ví dụ |
Ví dụ
| (async function(){
// Change random với các tham số mặc định
await ChangeInfo ();
// Change random ngoại trừ mac dùng thông số thật của máy
await ChangeInfo ({
changeMacAddr: false
});
// Change random nhưng fake model là Asus Zenfone Max Pro
await ChangeInfo ({
brand: "asus",
model: "ASUS_X00TD"
});
// Change random nhưng fake model là Asus Zenfone Max Pro, mạng là Viettel - Việt Nam
await ChangeInfo ({
brand: "asus",
model: "ASUS_X00TD",
country: "vn",
carrier: "Viettel"
});
// Change random info với model SM-G930F của samsung, wipe dữ liệu app "com.alphalbetlabs.deviceinfo",
// đồng thời đặt sim code cố định là 45204
await ChangeInfo ({
wipeGoogle: true,
customPackages: ["com.alphalbetlabs.deviceinfo"],
brand: "samsung",
model: "SM-G930F",
override: {
"network_numeric": "45204",
}
});
})();
|
Chú ý về override
Tùy chọn này tương đối phức tạp, nếu chỉ thay đổi một vài thông số cơ bản bạn có thể cứ thử, tuy nhiên các thông số khác đòi hỏi bạn cần có sự am hiểu nhất định nếu không có thể dẫn đến lỗi thiết bị. Việc sử dụng override
trong option
của hàm ChangeInfo
giúp bạn thay đổi một vài thông số, hoặc tự xây dựng một tập các thiết bị để thay đổi toàn bộ các thông số cần thiết thay vì chỉ sử dụng các thiết bị được tích hợp sẵn trong Bịp Device. Các thông số mà bạn có thể override
được liệt kê trong ví dụ dưới đây, bạn có thể dùng hoặc bỏ bất cứ thông số nào, ko bắt buộc phải chỉ định toàn bộ:
| (async function(){
await ChangeInfo ({
wipe: true,
customPackages: ["com.alphalbetlabs.deviceinfo"],
override: {
"network_numeric": "45204",
"phone_number": "+1345412823985",
"imsi": "346140278188672",
"iccid": "891345017533893431878",
"network_name": "LIME / Cable & Wirel.",
"network_country": "ky",
"meid": "9960206616805",
"ssid": "Tên wifi",
"android_id": "7e1b980c4823907b",
"imei0": "996020661680524",
"serial_number": "1fb7d51258a7afba",
"description": "b2qsqw-user 11 RP1A.200720.012 F711USQU1AUG7 release-keys",
"bootloader": "F711USQU1AUG7",
"model": "SM-F711U",
"manufacturer": "samsung",
"brand": "samsung",
"hardware": "qualcommsm8350",
"baseband": "F711USQU1AUG7",
"platform": "sm8350",
"incremental": "F711USQU1AUG7",
"product": "b2qsqw",
"board": "sm8350",
"code": "b2q",
"date": "Thu Sep 24 13:47:30 UTC 2020",
"date_utc": "1600955250",
"display_id": "RP1A.200720.012.F711USQU1AUG7",
"fingerprint": "samsung/b2qsqw/b2q:11/RP1A.200720.012/F711USQU1AUG7:user/release-keys",
"build_id": "RP1A.200720.012",
"release": "11", //phien ban android
"security_patch": "2021-07-01",
"build_flavor": "b2qsqw-user",
"build_host": "SWDH86226",
"gl_vendor": "",
"gl_renderer": "",
"timezone": "America/Cayman",
"bssid": "cc:3a:61:d9:b2:0f",
"latitude": "19.1840308727647",
"longitude": "-80.213754421596",
"mac_address": "10:5f:06:2e:42:68",
"bluetooth_mac_addr": "51:f6:6b:e4:21:a6"
}
});
})();
|
Tip
Có vô số cách thiết lập tham số option
để sử dụng hàm ChangeInfo, bạn có thể tự thử theo nhiều cách khác nhau để đạt được yêu cầu của mình.
ChangeSIMInfo
Thay đổi thông tin sim cho thiết bị, tham số truyền vào là một object với chi tiết mô tả bên dưới
Cú pháp
await ChangeSIMInfo (info);
Chi tiết: Các thuộc tính của {info}
Tham số |
Mô tả |
country |
Country iso code |
carrier |
Tên nhà mạng |
timezone |
Timezone id |
netnum |
Mã nhà mạng |
phone |
Số điện thoại |
iccid |
iccid |
imsi |
imsi |
Ví dụ
| (async function(){
await ChangeSIMInfo ({
country: "VN",
carrier: "Viettel",
timezone: "Asia/Ho_Chi_Minh",
phone: "+84986993366",
netnum: "45204",
iccid: "8984015221935449600",
imsi: "452046630912464"
});
})();
|
CreateBackup
Tạo file backup dữ liệu của bạn. Mặc định backup sẽ luôn có các package của Google, ngoài ra bạn có thể
chỉ định thêm các package (app) tùy chỉnh. File backup được tạo ra có đuôi mở rộng là .bip
Cú pháp
await CreateBackup (option);
Chi tiết: Các thuộc tính của {option}
Tham số |
Mô tả |
customPackages |
Mảng các app tùy chỉnh sẽ được backup. |
fileName |
Tên file backup. Mặc định là data-{device}-{gmail}-{timestamp}.bip , b có thể đặt một số biến sau vào fileName, tool sẽ tự thay thế giá trị tương ứng. Các biến khả dụng: {TIME} , {ACCOUNT} , {DEVICE} |
note |
Ghi chú cho file backup |
excludes |
Mảng các mẫu để loại trừ khỏi phải backup, hữu ích khi bạn muốn loại bỏ một số dữ liệu để làm giảm dung lượng file back up. |
extraInfo |
Lưu thêm bất cứ thông tin bổ sung nào bạn cần vào file backup, bạn có thể đọc lại các thông tin này bằng hàm GetbackupInfo |
useExtSDCard |
Lưu file backup ra thẻ nhớ ngoài của điện thoại. true hoặc false |
pullTo |
Pull file backup về thư mục chỉ định sau khi hoàn thành. |
delAfterPull |
Xóa file backup khỏi thiết bị sau khi pull. |
changeOption |
Nếu bạn muốn change luôn sau khi backup, truyền option này vào như tham số trong hàm ChangeInfo. |
Ví dụ
| (async function(){
//Tạo file backup mặc định, lưu trên /sdcard
await CreateBackup();
//Tạo file backup với 2 custom package
await CreateBackup({
customPackages: ["com.bip.device", "com.chay.khetlet"]
});
//Tạo file backup với 2 custom package, loại bỏ 1 số cache
await CreateBackup({
customPackages: ["com.bip.device", "com.chay.khetlet"],
excludes: ["cache/*", "data/system/usagestats/*"],
});
//Tạo file backup với 2 custom package sau đó lưu về ổ D:\\MyBackup
await CreateBackup({
customPackages: ["com.bip.device", "com.chay.khetlet"],
excludes: ["cache/*", "data/system/usagestats/*"],
pullTo: "D:\\MyBackup",
delAfterPull: true
});
//Tạo file backup với 2 custom package sau đó lưu về ổ D:\\MyBackup với tên file tùy chỉnh
await CreateBackup({
fileName: "{DEVICE}-backup-{ACCOUNT}-{TIME}.bip", //ví dụ: [email protected]_21.20.45.bip
customPackages: ["com.bip.device", "com.chay.khetlet"],
excludes: ["cache/*", "data/system/usagestats/*"],
pullTo: "D:\\MyBackup",
delAfterPull: true
});
//Tạo file backup với 2 custom package sau đó lưu về ổ D:\\MyBackup với 1 số thông tin bổ sung
await CreateBackup({
customPackages: ["com.bip.device", "com.chay.khetlet"],
excludes: ["cache/*", "data/system/usagestats/*"],
pullTo: "D:\\MyBackup",
delAfterPull: true,
extraInfo: {
"cai-gi-cung-dc": "Tề thiên đại thánh đã ở đây",
"nguoi-tao-file": "Đã tiêm covid"
}
});
//Tạo file backup với 2 custom package sau đó lưu về ổ D:\\MyBackup và change info máy luôn.
await CreateBackup({
customPackages: ["com.bip.device", "com.chay.khetlet"],
excludes: ["cache/*", "data/system/usagestats/*"],
pullTo: "D:\\MyBackup",
delAfterPull: true,
changeOption: {
wipeGoogle: true,
customPackages: ["com.alphalbetlabs.deviceinfo"],
brand: "samsung",
model: "SM-G930F",
override: {
"network_numeric": "45204"
}
}
});
})();
|
RestoreData
Khôi phục lại dữ liệu từ file backup tạo bởi hàm CreateBackup.
Cú pháp
await RestoreData (option);
Chi tiết: Các thuộc tính của {option}
Tham số |
Mô tả |
file |
Đường dẫn đến file backup, có thể là đường dẫn trên máy tính hoặc trên điện thoại. |
isOnExtSdCard |
Chỉ dẫn cho tool biết nếu file này được lưu trên thẻ nhớ của điện thoại. true hoặc false |
delBackup |
Xóa file backup khỏi thiết bị sau khi hoàn thành, mặc định là false. |
Ví dụ
| (async function(){
//Restore từ file backup đã có sẵn trên thiết bị
await RestoreData({
file: "/sdcard/[email protected]",
delBackup: true,
});
//Restore từ file backup từ máy tính
await RestoreData({
file: "D:\\MyBackup\\[email protected]",
delBackup: true,
});
})();
|
CreateROMBackup
Tạo file backup toàn bộ ROM.
Cú pháp
await CreateROMBackup (option);
Chi tiết: Các thuộc tính của {option}
Tham số |
Mô tả |
fileName |
Tên file backup. Mặc định là ROM-{device}-{gmail}-{timestamp}.bip , b có thể đặt một số biến sau vào fileName, tool sẽ tự thay thế giá trị tương ứng. Các biến khả dụng: {TIME} , {ACCOUNT} , {DEVICE} |
note |
Ghi chú cho file backup |
partitions |
Các phân vùng bạn có thể chọn: S : system, D : data, C : cache, R : recovery, B : boot |
extraInfo |
Lưu thêm bất cứ thông tin bổ sung nào bạn cần vào file backup, bạn có thể đọc lại các thông tin này bằng hàm GetbackupInfo |
useExtSDCard |
Lưu file backup ra thẻ nhớ ngoài của điện thoại. true hoặc false |
pullTo |
Pull file backup về thư mục chỉ định sau khi hoàn thành. |
compress |
true/false: Có nén dữ liệu hay không. |
delAfterPull |
Xóa file backup khỏi thiết bị sau khi pull. |
changeOption |
Nếu bạn muốn change luôn sau khi backup, truyền option này vào như tham số trong hàm ChangeInfo. |
Ví dụ
| (async function(){
//Tạo file backup mặc định, lưu trên /sdcard
await CreateROMBackup();
//Tạo file backup sau đó lưu về ổ D:\\MyBackup
await CreateROMBackup({
pullTo: "D:\\MyBackup",
delAfterPull: true
});
//Tạo file backup sau đó lưu về ổ D:\\MyBackup với tên file tùy chỉnh
await CreateROMBackup({
fileName: `ROM-${await GetGoogleAccount()}-${Date.now()}.bip`,
pullTo: "D:\\MyBackup",
delAfterPull: true
});
//Tạo file backup sau đó lưu về ổ D:\\MyBackup với 1 số thông tin bổ sung và nén file backup
await CreateROMBackup({
compress: true,
pullTo: "D:\\MyBackup",
delAfterPull: true,
extraInfo: {
"cai-gi-cung-dc": "Tề thiên đại thánh đã ở đây",
"nguoi-tao-file": "Sư phụ, đã tiêm covid"
}
});
//Tạo file backup sau đó lưu về ổ D:\\MyBackup với tên file tùy chỉnh, đồng thời change máy luôn
await CreateROMBackup({
fileName: "ROM-{DEVICE}-{TIME}.bip", //ví dụ: ROM-starlte-2023-12-11_21.20.45.bip
pullTo: "D:\\MyBackup",
delAfterPull: true,
changeOption: {
wipeGoogle: true,
customPackages: ["com.alphalbetlabs.deviceinfo"],
brand: "samsung",
model: "SM-G930F",
override: {
"network_numeric": "45204"
}
}
});
//Tạo file backup chỉ cho phân vùng Data, sau đó lưu về ổ D:\\MyBackup với tên file tùy chỉnh, đồng thời change máy luôn
await CreateROMBackup({
fileName: "ROM-{DEVICE}-{TIME}.bip", //ví dụ: ROM-starlte-2023-12-11_21.20.45.bip
pullTo: "D:\\MyBackup",
partitions: "D", //hoặc "SD" backup system và data, "SDCRB" backup all
delAfterPull: true,
changeOption: {
wipeGoogle: true,
customPackages: ["com.alphalbetlabs.deviceinfo"],
brand: "samsung",
model: "SM-G930F",
override: {
"network_numeric": "45204"
}
}
});
})();
|
RestoreROM
Khôi phục lại dữ liệu từ file backup tạo bởi hàm CreateROMBackup.
Cú pháp
await RestoreROM (option);
Chi tiết: Các thuộc tính của {option}
Tham số |
Mô tả |
file |
Đường dẫn đến file backup, có thể là đường dẫn trên máy tính hoặc trên điện thoại. |
isOnExtSdCard |
Chỉ dẫn cho tool biết nếu file này được lưu trên thẻ nhớ của điện thoại. true hoặc false |
delBackup |
Xóa file backup khỏi thiết bị sau khi hoàn thành, mặc định là false. |
Ví dụ
| (async function(){
//Restore từ file backup đã có sẵn trên thiết bị
await RestoreROM({
file: "/sdcard/[email protected]",
delBackup: true,
});
//Restore từ file backup từ máy tính
await RestoreROM({
file: "D:\\MyBackup\\[email protected]",
delBackup: true,
});
})();
|
WipeApps
Xóa dữ liệu của một hoặc nhiều app
Cú pháp
Chi tiết: Các thuộc tính của {option}
Tham số |
Mô tả |
apps |
Mảng các package |
Ví dụ
| (async function(){
await WipeApps(["com.vlxx.shocks", "com.android.dialer"]);
})();
|
Log
Hiện thông tin lên vùng logs của Studio hoặc trên cột status của thiết bị đang chạy script
Ví dụ
| (async function(){
Log("Hello Bip Device");
Log("Hello", [1,2,3], {"Bip": "Device"});
Log((await ExecShell("ls /sdcard"))?.result.trim());
// Nếu bạn là người thích làm màu thì có thể sử dụng các hàm log mở rộng
// LogSuccess
// LogInfo
// LogWarn
// LogError
})();
|
Delay
Delay một khoảng tính bằng mili giây.
Cú pháp
Chi tiết
Tham số |
Mô tả |
ms |
Thời gian delay |
Ví dụ
| (async function(){
await Delay(3000);
Log("Chúc mừng bạn vừa phí 3s cuộc đời!");
})();
|
IsStopRequest
Nếu script của bạn quá phức tạp, bạn nên cân nhắc đặt hàm này tại các vị trí phù hợp, mục đích để script của bạn
có thể dừng một cách mượt hơn khi người dùng bấm nút Stop.
Ví dụ
| (async function(){
//.... rất là nhiều dòng code
while(true) { //một vòng lặp vô tận
if(IsStopRequest()) break;// Nếu có bấm nút stop script sẽ break khỏi vòng lặp trước khi chạy một tác vụ nặng
await MotFunctionRatNangVaLau();
await Delay(3000);
}
//.... rất là nhiều dòng code
})();
|
Hiện một bảng yêu cầu dữ liệu text từ người dùng
Cú pháp
await GetUserInput (title, description);
Chi tiết
Tham số |
Mô tả |
title |
Tiêu đề bảng input |
description |
Mô tả |
Ví dụ
| (async function(){
const arg1 = await GetUserInput();
Log(arg1);
const arg2 = await GetUserInput("Nhập list mail", "Mỗi mail một dòng");
Log(arg2);
})();
|
GetCurrentInfo
Hiện thị các thông tin cơ bản hiện tại của thiết bị.
Cú pháp
Ví dụ
| (async function(){
const info = await GetCurrentInfo();
Log(info);
/*{
"real_serial": "29f1c10f09047ece",
"fake_serial": "6cd32a2c",
"android_id": "188681b0ded2cb7f",
"imei": "987753800344237",
"meid": "9877538003442",
"hardware_serial": "09a4df905fe17022",
"wifi_bssid": "fc:db:b3:18:23:16",
"wifi_mac_addr": "98:f1:70:45:0b:b1",
"bluetooth_mac_addr": "b0:72:bf:0d:f9:bf",
"timezone": "Asia/Singapore",
"wifi_ssid": "martin",
"model": "SM-F721B",
"brand": "samsung",
"latitude": "2.1903635364332485",
"longitude": "104.35435080337665",
"phone_number": "+656601453260",
"imsi": "525050919572715",
"network_country": "sg",
"network_numeric": "52505",
"network_name": "Starhub"
}*/
})();
|
GetBackupInfo
Hiện thị các thông tin của file backup.
Cú pháp
await GetBackupInfo (file);
Chi tiết
Tham số |
Mô tả |
file |
Đường dẫn đến file backup, có thể là đường dẫn trên máy tính hoặc trên điện thoại. |
Ví dụ
| (async function(){
const info = await GetBackupInfo("/sdcard/[email protected]");
// const info = await GetBackupInfo("D:\\MyBackup\\[email protected]");
Log(info);
/*{
"googleAccount": "",
"extraInfo": {
"cai-gi-cung-dc": "Tề thiên đại thánh đã ở đây",
"nguoi-tao-file": "Đã tiêm covid"
},
"android_id": "188681b0ded2cb7f",
"imei": "987753800344237",
"meid": "9877538003442",
"hardware_serial": "09a4df905fe17022",
"wifi_bssid": "fc:db:b3:18:23:16",
"wifi_mac_addr": "98:f1:70:45:0b:b1",
"bluetooth_mac_addr": "b0:72:bf:0d:f9:bf",
"timezone": "Asia/Singapore",
"wifi_ssid": "martin",
"model": "SM-F721B",
"brand": "samsung",
"latitude": "2.1903635364332485",
"longitude": "104.35435080337665",
"phone_number": "+656601453260",
"imsi": "525050919572715",
"network_country": "sg",
"network_numeric": "52505",
"network_name": "Starhub"
}*/
})();
|
SendKeyEvent
Gửi key event đến thiết bị
Cú pháp
await SendKeyEvent ("key_code");
Chi tiết
Ví dụ
| (async function(){
await SendKeyEvent("KEYCODE_HOME");
// await SendKeyEvent(3);
})();
|
Swipe
Vuốt
Cú pháp
await Swipe (x1, y1, x2, y2, dur);
Chi tiết
Tham số |
Mô tả |
x1 |
Tọa độ x điểm bắt đầu |
y1 |
Tọa độ y điểm bắt đầu |
x2 |
Tọa độ x điểm kết thúc |
y2 |
Tọa độ y điểm kết thúc |
dur |
Thời gian vuốt tính bằng mili giây, càng lớn vuốt càng chậm, mặc định 50 |
Ví dụ
| (async function(){
await Swipe(500, 1500, 500, 100);
})();
|
SendText
Gõ văn bản,
Cú pháp
await SendText (text, delayStart, delayEnd);
Chi tiết
Tham số |
Mô tả |
text |
Văn bản cần gõ |
delayStart |
Delay start (miliseconds) |
delayEnd |
Delay end (miliseconds) |
Ví dụ
| (async function(){
await SendText("Hello Bip Device");
await SendText("Hello Bip Device", 50, 100); //gõ chậm lại chút
})();
|
SetClipboardText
Set văn bản vào clipboard của điện thoại.
Cú pháp
await SetClipboardText (text);
Chi tiết
Tham số |
Mô tả |
text |
Văn bản cần đặt |
Ví dụ
| (async function(){
await SetClipboardText("Hê lô Bịp Đì vai!");
})();
|
GetClipboardText
Get văn bản từ clipboard của điện thoại.
Cú pháp
await GetClipboardText ();
Ví dụ
| (async function(){
const text = await GetClipboardText();
Log(text);
})();
|
PasteText
Paste văn bản, hỗ trợ ký tự unicode.
Cú pháp
Chi tiết
Tham số |
Mô tả |
text |
Văn bản cần dán |
Ví dụ
| (async function(){
await PasteText("Hê lô Bịp Đì vai!");
})();
|
GetUIDump
Chạy adb shell uiautomator dump và trả về kết quả
Cú pháp
Ví dụ
| (async function(){
const xml = await GetUIDump();
Log(xml);
})();
|
GetColorByPoints
Trả về giá trị màu RGBA hiện tại trên màn hình của các tọa độ chỉ định. Hoặc bạn có thể sử dụng công cụ lấy mã màu tiện lợi hơn.
Cú pháp
await GetColorByPoints (p1, p2, ..., pn);
Chi tiết
Tham số |
Mô tả |
p1 |
Tọa độ 1 |
pn |
Tọa độ n |
Kết quả trả về: Mảng các tọa độ kèm màu sắc của tọa độ tương ứng
Ví dụ
| (async function(){
const colors = await GetColorByPoints({x: 100, y: 100}, {x: 200, y: 500});
Log(colors);
/*
[
{
"x": 100,
"y": 100,
"r": 8,
"g": 7,
"b": 7,
"a": 255
},
{
"x": 200,
"y": 500,
"r": 182,
"g": 17,
"b": 13,
"a": 255
}
]
*/
})();
|
CheckColorConds
Hàm này được xây dựng dựa trên hàm GetColorByPoints, kiểm tra trạng thái màu sắc các tọa độ trên màn hình.
Bạn có thể sử dụng công cụ lấy mã màu nếu cần thiết.
Cú pháp
await CheckColorConds (type, c1, c2, ..., cn);
Chi tiết
Tham số |
Mô tả |
type |
Kiểu thỏa mãn: all hoặc any |
c1 |
Tọa độ kèm màu điểm thứ nhất |
cn |
Tọa độ kèm màu điểm thứ n |
Kết quả trả về: true/false tùy theo kết quả kiểm màu
Ví dụ
| (async function(){
//Tọa độ 10x10 phải có màu 11.21.32 VÀ 15x15 phải có màu 10.20.30
const isMatched1 = await CheckColorConds("all", {x: 10, y: 10, r: 11, g: 21, b: 32}, {x: 15, y: 15, r:10, g:20, b:30});
//Tọa độ 10x10 phải có màu 11.21.32 HOẶC 15x15 phải có màu 10.20.30
const isMatched2 = await CheckColorConds("any", {x: 10, y: 10, r: 11, g: 21, b: 32}, {x: 15, y: 15, r:10, g:20, b:30});
//Tọa độ 10x10 phải có màu 11.21.32 VÀ 15x15 KHÔNG phải màu 10.20.30 (có diff = true trong tham số)
const isMatched3 = await CheckColorConds("all", {x: 10, y: 10, r: 11, g: 21, b: 32}, {diff: true, x: 15, y: 15, r:10, g:20, b:30});
//Tọa độ 10x10 phải có màu 11.21.32 HOẶC 15x15 KHÔNG phải màu 10.20.30
const isMatched4 = await CheckColorConds("any", {x: 10, y: 10, r: 11, g: 21, b: 32}, {diff: true, x: 15, y: 15, r:10, g:20, b:30});
})();
|
ScreenCap
Chụp ảnh toàn bộ hoặc một phần màn hình. Nếu muốn chụp một phần, bạn có thể sử dụng công cụ này để lấy tọa độ.
Cú pháp
await ScreenCap (x1, y1, x2, y2, quality);
Chi tiết tham số option
Tham số |
Mô tả |
x1 |
Tọa độ x góc trên bên trái vùng cần chụp |
y1 |
Tọa độ y góc trên bên trái vùng cần chụp |
x2 |
Tọa độ x góc dưới bên phải vùng cần chụp |
y2 |
Tọa độ y góc dưới bên phải vùng cần chụp |
quality |
Chất lượng ảnh, giá trị từ 0 - 1 , mặc định là 1 |
Trả về dữ liệu ảnh dạng base64 hoặc chuỗi rỗng nếu thất bại.
Ví dụ
| (async function(){
//Chụp toàn màn hình
const cap1 = await ScreenCap();
//Chụp toàn màn hình với chất lượng 10%
const cap2 = await ScreenCap(null, null, null, null, 0.1);
//Chụp 1 phần màn hình với chất lượng 10%
const cap3 = await ScreenCap(191, 1044, 1245, 1691, 0.1);
})();
|
SubImageSearch
Tìm kiếm tọa độ mẫu ảnh trên màn hình, mẫu có thể tìm thấy ở một hoặc nhiều vị trí khác nhau trên màn hình.
Bạn có thể công cụ cắt ảnh để lấy các mẫu ảnh từ màn hình điện thoại.
Cú pháp
await SubImageSearch (option);
Chi tiết tham số option
Tham số |
Mô tả |
subImage |
Đường dẫn đến file ảnh con trên máy tính |
crop |
Giới hạn vùng tìm kiễm mẫu subImage , nếu không chỉ định sẽ tìm toàn màn hình. Nếu có thể khoanh vùng tìm kiếm subImage sẽ tốt hơn do không phải tìm toàn màn hình, đỡ nhọc CPU. |
all |
Trả về toàn bộ kết quả tìm thấy hay chỉ kết quả đầu tiên. Giá trị true/false, mặc định là false. Nếu không cần thiết phải tìm toàn bộ, hãy đặt là false để tool dừng tìm ngay khi thấy kết quả đầu tiên, đỡ nhọc CPU. |
Kết quả trả về: Mảng các tọa độ tìm thấy, mảng rỗng nếu không tìm thấy
Ví dụ
Trong ví dụ minh họa dưới đây, chung ta sẽ tìm kiếm vị trí của mẫu ảnh CHPlay.
| (async function(){
//Tìm tọa độ đầu tiên xuất hiện mẫu ảnh chplay.png trên màn hình
const coors1 = await SubImageSearch({
subImage: "D:\\bip-imgs\\chplay.png"
});
//KQ: [ [949, 1917, 1034, 1996] ] => [x1, y1, x2, y2] tọa độ góc trên bên trái và góc dưới bên phải của mẫu ảnh.
//Tìm tất cả tọa độ xuất hiện mẫu ảnh chplay.png trên màn hình
const coors2 = await SubImageSearch({
subImage: "D:\\bip-imgs\\chplay.png",
all: true
});
//KQ: [ [949, 1917, 1034, 1996], [1221, 1917, 1306, 1996] ]
//Tìm tất cả tọa độ xuất hiện mẫu ảnh chplay.png xuất hiện trong khu vực ô vuông màu trắng trong hình minh họa phía trên
//(Giả sử tôi biết chắc mẫu ảnh chỉ xuất hiện trong khu vực đó).
const coors3 = await SubImageSearch({
subImage: "D:\\bip-imgs\\chplay.png",
crop: [940, 1908, 1052, 2024], //tọa độ góc top-left và right-bottom của khu vực đc khoanh vùng.
all: true
});
//KQ: [ [949, 1917, 1034, 1996], [1221, 1917, 1306, 1996] ]
})();
|
GetFirstElementBySelector
So với các hàm xử lý màu, hàm xử lý với selector tương đối nặng do phải chạy uidump, một số activity nặng của app như livestream của tiktok có thể sẽ ko thể chạy được do uidump bị lỗi. Hàm này cũng yêu cầu bạn có chút ít skill. Mục đích chính của hàm này để check xem một phần tử, đoạn text... có đang hiển thị trên màn hình hay không, ngoài ra có thể lấy tọa độ của qua thuộc tính bounds
của phần tử đó để có thể tap (click)
Cú pháp
await GetFirstElementBySelector (selector, useLastDump = false);
Chi tiết
Tham số |
Mô tả |
selector |
CSS selector |
useLastDump |
Nếu element bạn cần chọn có thể dùng lại bản uidump đc tạo bởi lệnh get gần nhất trước đó, bạn có thể set tham số này là true , sẽ nhanh và nhẹ hơn |
Kết quả trả về: Một DOM node hoặc null
Ví dụ
Sử dụng UIAutomator sẽ giúp bạn xác định được phần tử cần nhắm được dễ dàng hơn.
Như ảnh minh họa phía trên, chúng ta có thể viết selector nhắm tới nút bàn phím màu đỏ của app gọi điện như sau
| (async function(){
const theKeypad = await GetFirstElementBySelector(`[resource-id="com.android.dialer:id/fab"]`);
// const theKeypad = await GetFirstElementBySelector(`[bounds="[118,2343][1384,2539]"]`);
// const theKeypad = await GetFirstElementBySelector(`[content-desc="key pad"][package="com.android.dialer"]`);
// Hãy tìm hiều thêm về css selector để nâng cao kỹ năng
Log(theKeypad.getAttribute("content-desc")); //In ra thuộc tính content-desc của node.
//key pad
//Giả sử bạn cần lấy thông tin nút Recents như ảnh bên dưới
//Do ta vừa get theKeypad ở trên và màn hình ko có biến động gì, nên bạn có thể set useLastDump=true
//để tránh call lại uidump 1 lần nữa vừa nặng vừa ko cần thiết
const recentLogs = await GetFirstElementBySelector(`[resource-id="com.android.dialer:id/call_log_tab"]`, true);
})();
|
GetAllElementsBySelector
Hàm này tương tự như hàm GetFirstElementBySelector, nhưng trả về tất cả các nodes (array) mà selector thỏa mãn.
BulkGetElements
Để tránh phải gọi nhiều lần hàm GetFirstElementBySelector, bạn có thể dùng hàm này
để get nhiều element cùng lúc cho các selector khác nhau.
Cú pháp
await BulkGetElements (selectors, useLastDump = false);
Chi tiết
Tham số |
Mô tả |
selectors |
Một object chứa các selector |
useLastDump |
Nếu có thể dùng lại bản uidump gần nhất hãy set tham số này là true , sẽ nhanh và nhẹ hơn |
Ví dụ
Lấy lại hình ảnh minh họa ở trên
| (async function(){
const elms = await BulkGetElements({
"bang-quay-so": `[resource-id="com.android.dialer:id/fab"]`,
"lich-su-call": `[resource-id="com.android.dialer:id/call_log_tab"]`,
"ko-ton-tai": `[resource-id="element-nay-ko-ton-tai"]`,
});
Log(elms["bang-quay-so"].getAttribute("content-desc")); //=> log ra "key pad"
//elms["ko-ton-tai"] == null
})();
|
TapByCoordinates
Tap (click) vào màn hình theo tọa độ.
Cú pháp
await TapByCoordinates (x1, y1, x2, y2);
Chi tiết
Tham số |
Mô tả |
x1 |
Tọa độ x góc trên bên trái vùng click |
y1 |
Tọa độ y góc trên bên trái vùng click |
x2 |
Tọa độ x góc dưới bên phải vùng click |
y2 |
Tọa độ y góc dưới bên phải vùng click |
Ví dụ
| (async function(){
// Click random trong vùng tọa độ 100, 150, 300, 500.
await TapByCoordinates(100, 150, 300, 500);
// Click chính xác tọa độ 150, 250
await TapByCoordinates(150, 250);
})();
|
TapElement
Click vào một element dựa trên thuộc tính bounds
của nó, element được lấy từ GetFirstElementBySelector hoặc GetAllElementsBySelector.
Cú pháp
await TapElement (element);
Chi tiết
Tham số |
Mô tả |
element |
Một XML node |
Ví dụ
| (async function(){
//Mở app quay số
await OpenApp("com.android.dialer");
await Delay(1000);
//Click nút mở bàn phím
const theKeypad = await GetFirstElementBySelector(`[resource-id="com.android.dialer:id/fab"]`);
await TapElement(theKeypad);
})();
|
TapBySelector
Get element theo selector truyền vào rồi click vào element đó (bản chất lại úp mặt vào hàm TapElement).
Cú pháp
await TapBySelector (selector, useLastDump);
Chi tiết
Tham số |
Mô tả |
selector |
CSS selector |
useLastDump |
Nếu element bạn cần chọn có thể dùng lại bản uidump gần nhất có thể set tham số này là true , sẽ nhanh và nhẹ hơn |
Ví dụ
| (async function(){
//Mở app quay số
await OpenApp("com.android.dialer");
await Delay(1000);
//Click nút mở bàn phím
await TapBySelector(`[resource-id="com.android.dialer:id/fab"]`);
})();
|
TapMulti
Tap nhiều tọa độ liên tiếp theo tập các tọa độ.
Cú pháp
Chi tiết
Tham số |
Mô tả |
points |
Mảng các tọa độ, xem ví dụ |
Ví dụ
| (async function(){
//tap liên tiếp 3 điểm trên màn hình, mỗi lần tap delay 50 mili giây.
await TapMulti([
{x: 100, y: 100, delay: 50},
{x: 120, y: 130, delay: 50},
{x: 120, y: 150, delay: 0} //lượt tap cuối k cần delay
]);
})();
|
TapByImage
Xây dựng dựa trên SubImageSearch, Click vào vùng tọa độ xuất hiện mẫu ảnh.
Cú pháp
await TapByImage (imagePath, index, crop);
Chi tiết
Tham số |
Mô tả |
imagePath |
Đường dẫn file ảnh con trên máy tính |
index |
Chỉ định kết quả cần click nếu mẫu ảnh xuất hiện nhiều hơn một vị trí, bắt đầu từ 0, hoặc bạn có thể đặt rand để click ngẫu nhiên. Mặc định là 0 |
crop |
Khoanh vùng tìm kiếm vị trí ảnh mẫu. Xem thêm mô tả của hàm SubImageSearch |
Ví dụ
Giả sử chúng ta sẽ thao tác trên hình minh họa của hàm SubImageSearch
| (async function(){
//Click tọa độ mẫu chplay.png đầu tiên
await TapByImage("D:\\bip-imgs\\chplay.png");
// await TapByImage("D:\\bip-imgs\\chplay.png", 0);
//Click tọa độ mẫu chplay.png thứ 2
await TapByImage("D:\\bip-imgs\\chplay.png", 1);
//Click ngẫu nhiên 1 trong 2 vị trí app CHPlay
await TapByImage("D:\\bip-imgs\\chplay.png", "rand");
//Click ngẫu nhiên 1 trong 2 vị trí app CHPlay trong khu vực chỉ định
await TapByImage("D:\\bip-imgs\\chplay.png", "rand", [940, 1908, 1052, 2024]);
})();
|
ORCArea
Hàm này sẽ cố gắng chụp một phần màn hình và xử lý phần ảnh đó để phân tích ra text nếu có thể. Hiện ORC chỉ hỗ trợ bảng chữ cái và số cơ bản, font chữ rõ ràng.
Cú pháp
await ORCArea(x1, y1, x2, y2);
Chi tiết
Tham số |
Mô tả |
x1 |
Tọa độ x góc trên bên trái vùng cần chọn |
y1 |
Tọa độ y góc trên bên trái vùng cần chọn |
x2 |
Tọa độ x góc dưới bên phải vùng cần chọn |
y2 |
Tọa độ y góc dưới bên phải vùng cần chọn |
Ví dụ
Ví dụ dưới đây chúng ta sẽ ORC ở vùng tọa độ khoanh đỏ (0x1443 và 1440x1575).
Bạn có thể sử dụng công cụ lấy tọa độ để xác định vị trí cần ORC.
| (async function(){
const text = await ORCArea(0, 1443, 1440, 1575);
Log(text);
// => No one is on your speed dial yet
})();
|
HttpRequest
Thực thi một HTTP request.
Cú pháp
await HttpRequest(url, data, headers);
Chi tiết
Tham số |
Mô tả |
url |
Target url |
data |
Dữ liệu để gửi đi bằng method POST (tùy chọn) |
headers |
Thêm extra header vào request (tùy chọn) |
Kết quả trả về: object hoặc null nếu có lỗi xảy ra
Ví dụ
| (async function(){
const res = await HttpRequest("http://icanhazip.com");
Log(res);
/*{
"status": 200,
"headers": {
"date": "Tue, 31 Oct 2023 12:05:33 GMT",
"content-type": "text/plain",
"content-length": "16",
"connection": "close",
"access-control-allow-origin": "*",
"access-control-allow-methods": "GET",
"set-cookie": [
"__cf_bm=251B8hrwFFFRPb_Qkr_uBipLzSnyF7AkdwT_oFvQDeE-1698753933-0-AVX9/SUfVcfc6IIKA/7zrvO2QNHpuBijSAIScLZqunggCOfbHnaAeOKOedQ7GOMgMDsTppNdxi+z4l63LpbMJVg=; path=/; expires=Tue, 31-Oct-23 12:35:33 GMT; domain=.icanhazip.com; HttpOnly"
],
"server": "cloudflare",
"cf-ray": "81ebc45529968b6f-HKG",
"alt-svc": "h3=\":443\"; ma=86400"
},
"body": "171.222.111.228\n"
}*/
//post data thông thường (application/x-www-form-urlencoded)
const res = await HttpRequest("http://login.vl/account.php", {
"username": "bip",
"password": "abc123",
});
//post json hoặc raw data (truyền tham sô data là string thay vì object)
const res = await HttpRequest("http://login.vl/json.php", JSON.stringify({
"username": "bip",
"password": "abc123",
}), {
"Content-Type": "application/json",
}) ;
})();
|
OpenAIGenText
Tạo văn bản bằng Open AI.
Cú pháp
await OpenAIGenText(apiKey, prompt, model)
Chi tiết
Tham số |
Mô tả |
apiKey |
OpenAI API Key của bạn |
prompt |
Nội dung yêu cầu |
model |
Chỉ định model, mặc định là gpt-4o-mini |
Ví dụ
| (async function(){
const res = await OpenAIGenText("THAY_OPENAI_API_KEY_CUA_BAN_VAO_DAY", "Tiểu sử Nguyễn Ái Quốc");
if(res.error) LogError(res);
else Log(res.content)
/*{
"content": "Nguyễn Ái Quốc, tên thật là Nguyễn Sinh Cung, sinh ngày 19 tháng 5 năm 1890 tại làng Hoàng Trù, huyện Nam Đàn, tỉnh Nghệ An, Việt Nam. Ông là một nhân vật lịch sử quan trọng trong cuộc đấu tranh giành độc lập cho Việt Nam và là người sáng lập Đảng Cộng sản Việt Nam.
Nguyễn Ái Quốc đã rời quê hương từ sớm để tìm kiếm một con đường giải phóng dân tộc. Ông đã sống và hoạt động ở nhiều nước khác nhau, bao gồm Pháp, Trung Quốc và Liên Xô. Trong thời gian ở Pháp, ông đã tham gia vào các phong trào cách mạng và viết nhiều bài báo, tài liệu kêu gọi độc lập cho Việt Nam.
Năm 1930, ông đóng vai trò quan trọng trong việc thành lập Đảng Cộng sản Việt Nam, đánh dấu sự chuyển mình cho phong trào cách mạng Việt Nam. Ông cũng là người đại diện cho Việt Nam tại Hội nghị Bonn và thành lập Mặt trận Việt Minh vào năm 1941.
Nguyễn Ái Quốc đã lãnh đạo cuộc Tổng khởi nghĩa tháng Tám năm 1945, dẫn đến việc thành lập nước Việt Nam Dân chủ Cộng hoà vào ngày 2 tháng 9 năm 1945, và ông trở thành Chủ tịch đầu tiên của nước này. Dưới sự lãnh đạo của ông, Việt Nam đã trải qua nhiều thử thách, bao gồm cuộc chiến tranh chống thực dân Pháp và chiến tranh đế quốc Mỹ khốn nạn.
Ông mất ngày 2 tháng 9 năm 1969, để lại một di sản vĩ đại đối với đất nước và dân tộc Việt Nam. Tên gọi Nguyễn Ái Quốc không chỉ là một cái tên, mà còn là biểu tượng cho tinh thần đấu tranh, lòng yêu nước và sự hy sinh vì sự nghiệp giải phóng dân tộc."
}
*/
})();
|
OpenAIGenImage
Tạo ảnh bằng Open AI với model dall-e-3.
Cú pháp
await OpenAIGenImage(apiKey, prompt, type, size, quality, style)
Chi tiết
Tham số |
Mô tả |
apiKey |
OpenAI API Key của bạn |
prompt |
Nội dung mô tả về hình ảnh bạn muốn tạo |
type |
Kiểu dữ liệu trả về, url hoặc b64_json , mặc định là url , lưu ý khi bạn chọn là url thì url của ảnh chỉ tồn tại trong vòng 60 phút! |
size |
Kích thước ảnh, rộng x cao, chỉ sử dụng một trong các giá trị sau: 1024x1024 , 1024x1792 , 1792x1024 , mặc định là 1024x1024 |
quality |
Chất lượng ảnh, standard hoặc hd , mặc định là standard |
style |
Style ảnh, vivid hoặc natural , mặc định là vivid |
Ví dụ
| (async function(){
const res = await OpenAIGenImage("THAY_OPENAI_API_KEY_CUA_BAN_VAO_DAY", "cute Doraemon");
if(res.error) LogError(res);
else Log(res)
/* Kết quả minh họa
{
"created": 1725805782,
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-q3XdZ77JOR7...",
"revised_prompt": "An adorable, round..."
}
//await OpenAIGenImage("THAY_OPENAI_API_KEY_CUA_BAN_VAO_DAY", "cute Doraemon", "b64_json");
{
"created": 1725805782,
"b64_json": "iVBOR...",
"revised_prompt": "An adorable, round..."
}
//Trường hợp có lỗi xảy ra
{
"error": {
"code": "content_policy_violation",
"message": "Your request was rejected as a result of our safety system. Your prompt may contain text that is not allowed by our safety system.",
"param": null,
"type": "invalid_request_error"
}
}
*/
})();
|
CallOpenAIApi
Gửi request đến OpenAI API server. Bạn có thể thực thi bất cứ API nào theo tài liệu của OpenAI.
Về cơ bản OpenAIGenText và OpenAIGenImage đều được xây dựng dựa trên hàm này.
Cú pháp
await CallOpenAIApi(apiKey, path, params)
Chi tiết
Tham số |
Mô tả |
apiKey |
OpenAI API Key của bạn |
path |
Đường dẫn đến hàm API |
params |
Các tham số theo yêu cầu dạng JSON |
Ví dụ
| (async function(){
const text = await CallOpenAIApi("THAY_OPENAI_API_KEY_CUA_BAN_VAO_DAY", "/chat/completions", {
model: "gpt-4o-mini",
messages: [
{
role: "user",
content: "Tiểu sử Nguyễn Ái Quốc"
}
]
});
const image = await CallOpenAIApi("THAY_OPENAI_API_KEY_CUA_BAN_VAO_DAY", "/images/generations", {
model: "dall-e-3",
n: 1,
prompt: "cute Doraemon",
size: "1024x1024"
});
})();
|
StartProcess
Start một process trên máy tính và trả về kết quả
Cú pháp
await StartProcess(path, args);
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn đến file thực thi |
args |
Mạng các tham số |
Kết quả trả về: null hoặc object
Ví dụ
| (async function(){
const result = await StartProcess("cmd", ["/C", "echo bip-device"]);
Log(result);
/*{
"stdout": "bip-device\r\n",
"stderr": ""
}*/
})();
|
GetUserPackages
Get các app cài bởi người dùng.
Cú pháp
Ví dụ
| (async function(){
const apps = await GetUserPackages();
Log(apps);
})();
|
InstallApk
Cài đặt app từ file apk
Cú pháp
await InstallApk(apkFile);
Chi tiết
Tham số |
Mô tả |
apkFile |
Đường dẫn đến file apk trên máy tính |
Ví dụ
| (async function(){
await InstallApk("D:\\pornhub.apk");
})();
|
UninstallApp
Gỡ cài đặt app
Cú pháp
await UninstallApp(package);
Chi tiết
Tham số |
Mô tả |
package |
Tên package cần gỡ |
Ví dụ
| (async function(){
await UninstallApp("com.alphabetlabs.deviceinfo");
})();
|
AirplaneModeEnable
AirplaneModeDisable
Bật / tắt Airplane mode
Ví dụ
| (async function(){
await AirplaneModeEnable();
await AirplaneModeDisable();
})();
|
MobileDataEnable
MobileDataDisable
Bật / tắt mạng 3G/4G...
Ví dụ
| (async function(){
await MobileDataEnable();
await MobileDataDisable();
})();
|
WifiEnable
WifiDisable
Bật / tắt wifi
Ví dụ
| (async function(){
await WifiEnable();
await WifiDisable();
})();
|
WaitForWifiState
Chờ wifi cho đến khi có state chỉ định
Cú pháp
await WaitForWifiState(state, timeout);
Chi tiết
Tham số |
Mô tả |
state |
CONNECTED hoặc DISCONNECTED |
timeout |
tính bằng giây, mặc định là 120s |
Ví dụ
| (async function(){
await WifiDisable();
await WaitForWifiState("DISCONNECTED");
Log("wifi disconnected");
await WifiEnable();
await WaitForWifiState("CONNECTED");
Log("wifi connected");
})();
|
WaitForBootCompleted
Chờ cho đến khi máy khởi động xong hoàn toàn.
Cú pháp
await WaitForBootCompleted();
Ví dụ
| (async function(){
await ChangeInfo();
await WaitForBootCompleted();
Log("Máy đã khởi động xong!");
})();
|
GetScreenSize
Trả về screen size
Cú pháp
Ví dụ
| (async function(){
Log(await GetScreenSize());
/*{
"width": 1440,
"height": 2960
}*/
})();
|
OpenApp
CloseApp
Mở / đóng ứng dụng
Ví dụ
| (async function(){
await OpenApp("com.android.dialer");
await Delay(3000);
await CloseApp("com.android.dialer");
})();
|
SetProxy
Set proxy cho thiết bị, lưu ý hàm này chỉ set global setting qua ADB, và chỉ có tác dụng với browser, bạn nên tham khảo các hàm SetHTTPProxy và SetSocks5Proxy.
Cú pháp
Chi tiết
Tham số |
Mô tả |
proxy |
proxy server |
Ví dụ
| (async function(){
await SetProxy("1.2.3.4:6969");
})();
|
GetProxy
Lấy proxy hiện tại đã set bởi SetProxy
Ví dụ
| (async function(){
Log(await GetProxy());
})();
|
UnsetProxy
Bỏ set proxy đã set bởi SetProxy
Ví dụ
| (async function(){
await UnsetProxy();
})();
|
SetSocks5Proxy
Set socks5 proxy cho thiết bị bằng app SocksDroid
Cú pháp
await SetSocks5Proxy (server, user, pw, fakeRtcIP);
Chi tiết
Tham số |
Mô tả |
server |
proxy server |
user |
user (tùy chọn) |
pw |
password (tùy chọn) |
fakeRtcIP |
fakeRtcIP (tùy chọn) |
Ví dụ
| (async function(){
await SetSocks5Proxy("127.0.0.1:1080");
// await SetSocks5Proxy("127.0.0.1:1080", "", "", "172.32.54.111"); //fake webrtc
})();
|
SetHTTPProxy
Set http proxy cho thiết bị bằng app TunProxy
Cú pháp
await SetHTTPProxy (server);
Chi tiết
Tham số |
Mô tả |
server |
proxy server |
Ví dụ
| (async function(){
await SetHTTPProxy("127.0.0.1:1080");
})();
|
KillAllBipVPN
Kill tất cả vpn đang chạy bởi SocksDroid hoặc TunProxy
Cú pháp
Ví dụ
| (async function(){
await KillAllBipVPN();
})();
|
SetLocation
Giả mạo tọa độ GPS
Cú pháp
await SetLocation (location);
location là một object với các thuộc tính sau
Tham số |
Mô tả |
provider |
Một trong các giá trị: gps , network , passive , fused . Mặc định là gps |
latitude |
Vĩ độ |
longitude |
Kinh độ |
accuracy |
Độ chính xác tọa độ (tính bằng mét) |
altitude |
Độ cao (tính bằng mét) |
verticalAccuracy |
Độ chính xác độ cao nêu có (tính bằng mét) |
speed |
Tốc độ di chuyển (tính bằng mét/giây) |
speedAccuracy |
Độ chính xác của speed (tính bằng mét/giây) |
bearing |
Hướng di chuyển, tính bằng độ (0-360) |
bearingAccuracy |
Độ chính xác của bearing |
Bất cứ thông số nào không chỉ định, thông số thật sẽ được áp dụng, chỉ định bằng null để xóa bỏ thông số thật.
Ví dụ
| (async function(){
// Fake 3 thông số latitude, longitude và accuracy, các thông số khác đặt theo thông số thật
await SetLocation({
latitude: 21.020756,
longitude: 105.833988,
accuracy: 10.5
});
// Fake 3 thông số latitude, longitude và accuracy, xóa bỏ hết các thông số còn lại
await SetLocation({
latitude: 21.020756,
longitude: 105.833988,
accuracy: 10.5,
altitude: null,
verticalAccuracy: null,
speed: null,
bearing: null,
speedAccuracy: null,
bearingAccuracy: null,
});
// Fake hết các thông số
await SetLocation({
provider: "gps",
latitude: 21.020756,
longitude: 105.833988,
accuracy: 10.5,
altitude: 10,
verticalAccuracy: 5,
speed: 10,
speedAccuracy: 1,
bearing: 20,
bearingAccuracy: 1,
});
})();
|
MoveByLocations
Giả lập di chuyển theo chuỗi tọa độ. Xem demo
Cú pháp
await MoveByLocations (locations, delay);
Tham số
Tham số |
Mô tả |
locations |
Mảng các object location như trên hàm SetLocation |
delay |
Khoảng trễ giữa các lần nhảy tọa độ, tính bằng giây |
Ví dụ
| (async function(){
//Di chuyển vòng quanh Hồ Văn Chương: https://maps.app.goo.gl/fRAVBWRBFRk6jTWv8
//Delay mặc đinh được set là 1s, b có thể tùy chỉnh giữa 2 tọa độ bất kỳ bằng cách thêm tham số delay vào location object
await MoveByLocations([
{"provider":"gps","latitude":21.020799,"longitude":105.833976,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.021035,"longitude":105.83407,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.021275,"longitude":105.83411,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.0215,"longitude":105.83407,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
//delay lâu hơn chút
{"delay": 5, "provider":"gps","latitude":21.021711,"longitude":105.834041,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.021986,"longitude":105.834019,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.022149,"longitude":105.833834,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.022277,"longitude":105.83352,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.022284,"longitude":105.833276,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.022109,"longitude":105.833,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.021929,"longitude":105.832976,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.021711,"longitude":105.832978,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.021435,"longitude":105.833078,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.021218,"longitude":105.833188,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.021045,"longitude":105.833255,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.020802,"longitude":105.833367,"altitude":0,"speed":10,"accuracy":10,"verticalAccuracy":5},
{"provider":"gps","latitude":21.020614,"longitude":105.833598,"altitude":0,"speed":0,"accuracy":10,"verticalAccuracy":5}
], 1); //delay 1s giữa các lần nhảy
})();
|
ResetLocation
Đặt lại vị trí mặc định, (nếu thiết bị có fake GEO khi change thì về tọa độ fake).
Cú pháp
Ví dụ
| (async function(){
await ResetLocation();
})();
|
OpenUrl
Mở một url bằng trình duyệt mặc định trên thiết bị
Cú pháp
Chi tiết
Tham số |
Mô tả |
url |
url cần mở |
Ví dụ
| (async function(){
await OpenUrl("https://google.com");
})();
|
GetGoogleAccount
Lấy địa chỉ mail của tài khoản google nếu có
Ví dụ
| (async function(){
Log(await GetGoogleAccount());
})();
|
GetComputerUniqueId
Trả về mã unique của máy tính đang chạy tool, bạn có thể cần nếu là một coder muốn bán bản quyền script của bạn.
Ví dụ
| (async function(){
const uniqueId = GetComputerUniqueId();
Log(uniqueId)
})();
|
Hashes
Các hàm băm lấy mã hash
Ví dụ
| (async function(){
const input = "Rau lang + cu chuoi";
LogWarn("input:", input);
Log("MD5:", MD5(input));
Log("SHA1:", SHA1(input));
Log("SHA224:", SHA224(input));
Log("SHA256:", SHA256(input));
Log("SHA384:", SHA384(input));
Log("SHA512:", SHA512(input));
LogSuccess("Xong nồi cám lợn!");
})();
|
AES
Mã hóa và giải mã bằng thuật toán aes, mode là aes-128-ecb.
Ví dụ
| (async function(){
const bi_mat_vung_kin = "Khong mot ai biet";
const pass = "chi_minh_minh_biet";
const encrypted = EncryptAes(bi_mat_vung_kin, pass);
const decrypted = DecryptAes(encrypted, pass);
Log("Cả làng đã biết:", bi_mat_vung_kin);
Log("Mã hóa:", encrypted);
Log("Giải mã:", decrypted);
})();
|
Base64
Mã hóa và giải mã base64, nếu không tin tool bạn có thể sử dụng btoa
hoặc atob
cũng được.
Ví dụ
| (async function(){
const encrypted = Base64Encode("Hello BIP");
const decrypted = Base64Decode(encrypted);
Log("Mã hóa:", encrypted);
Log("Giải mã:", decrypted);
})();
|
RandomArray
Trả về ngẫu nhiên một phần tử từ mảng.
Cú pháp
Chi tiết
Tham số |
Mô tả |
arr |
Mảng dữ liệu |
Ví dụ
| (async function(){
const arr = ["hoa", "hồng", "có", "lông"];
Log(RandomArray(arr));
Log(RandomArray(arr));
Log(RandomArray(arr));
})();
|
RandomInt
Tạo một số nguyên ngẫu nhiên
Cú pháp
Chi tiết
Tham số |
Mô tả |
min |
Số đầu khoảng |
max |
Số cuối khoảng |
Ví dụ
| (async function(){
Log(RandomInt(0, 9));
//chú ý: kết quả có thể là cả 0 hoặc 9 chữ k phải chỉ 1 -> 8
})();
|
GetCurrentDir
Trả về thư mục gốc của tool.
Cú pháp
Ví dụ
| (async function(){
const dir = await GetCurrentDir ();
Log(GetCurrentDir);
})();
|
WriteFile
Ghi dữ liệu vào file trên máy tính, nếu file đã tồn tại dữ liệu sẽ bị ghi đè.
Cú pháp
Chi tiết
Tham số |
Mô tả |
file |
Đường dẫn file cần lưu |
data |
Dữ liệu ghi |
Ví dụ
| (async function(){
WriteFile("D:\\test.txt", "Hello BIP");
})();
|
AppendFile
Ghi dữ liệu vào file trên máy tính, nếu file đã tồn tại dữ liệu mới sẽ được ghi nối thêm.
Cú pháp
AppendFile (file, data, newLine);
Chi tiết
Tham số |
Mô tả |
file |
Đường dẫn file cần ghi |
data |
Dữ liệu ghi |
newLine |
Thêm dòng mới sau khi ghi dữ liệu, giá trị true hoặc false , mặc định là false |
Ví dụ
| (async function(){
AppendFile("D:\\test.txt", "Hello BIP 1", true);
AppendFile("D:\\test.txt", "Hello BIP 2");
})();
|
ReadFile
Đọc file trên máy tính
Cú pháp
Chi tiết
Tham số |
Mô tả |
file |
Đường dẫn file cần đọc |
Ví dụ
| (async function(){
Log(ReadFile("D:\\test.txt"));
})();
|
ReadFileAsLines
Đọc file text và trả về dữ liệu các dòng dưới dạng mảng (array).
Cú pháp
Chi tiết
Tham số |
Mô tả |
file |
Đường dẫn file cần đọc |
Ví dụ
| (async function(){
Log(ReadFileAsLines("D:\\test.txt"));
})();
|
ReadDir
List tất cả các file hoặc thư mục con trong một thư mục trên máy tính
Cú pháp
Chi tiết
Tham số |
Mô tả |
dir |
Đường dẫn thư mục cần đọc |
Kết quả trả về: Mảng các file/folder trong thư mục dir
Ví dụ
| (async function(){
Log(ReadDir("D:\\"));
})();
|
MkDir
Tạo thư mục trên máy tính
Cú pháp
Chi tiết
Tham số |
Mô tả |
dir |
Đường dẫn thư mục cần tạo |
Ví dụ
| (async function(){
MkDir("D:\\MyBackup");
})();
|
PathExists
Check xem đường dẫn (file/folder) có tồn tại
Cú pháp
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn thư mục/file cần check |
Ví dụ
| (async function(){
if(PathExists("D:\\MyBackup"))
Log("OK");
else
Log("Không tồn tại");
})();
|
MoveFile
Di chuyển hoặc ĐỔI TÊN file
Cú pháp
MoveFile (oldPath, newPath);
Chi tiết
Tham số |
Mô tả |
oldPath |
File nguồn |
newPath |
File đích |
Ví dụ
| (async function(){
MoveFile("D:\\test.txt", "D:\\test_2.txt");
MoveFile("D:\\test2.txt", "E:\\test.txt");
})();
|
Rename
Như MoveFile
CopyFile
Sao chép file
Cú pháp
Chi tiết
Tham số |
Mô tả |
src |
File nguồn |
dest |
File đích |
Ví dụ
| (async function(){
CopyFile("D:\\test.txt", "D:\\test_3.txt");
})();
|
Remove
Xóa file / thư mục
Cú pháp
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn file/folder cần xóa |
Ví dụ
| (async function(){
Remove("D:\\TaiLieuHoc\\ToanCaoCap\\TuTuongMac-Lenin\\Co-giao-thao");
})();
|
Stat
Xem thông số file / folder
Cú pháp
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn file/folder cần xóa |
Ví dụ
| (async function(){
const info = Stat("D:\\TaiLieuHoc\\ToanCaoCap\\TuTuongMac-Lenin\\Co-giao-thao");
Log(info);
})();
|
PushToAlbum
Upload ảnh/video vào album của điện thoại.
Cú pháp
await PushToAlbum (path);
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn file/folder của ảnh/video cần upload |
Ví dụ
| (async function(){
//push một file ảnh
await PushToAlbum("D:\\Avatar\\supper_cute.jpg");
//push tất cả file có trong một thư mục
await PushToAlbum("D:\\Avatar");
})();
|
GetIndex
Lấy thứ tự của device trong list device trên tool, bắt đầu từ 0.
Ví dụ
| (async function(){
Log(GetIndex());
})();
|
GetSerial
Lấy serial device.
Ví dụ
| (async function(){
Log(GetSerial());
})();
|
SetNote1
SetNote2
GetNote1
GetNote2
Trên tool, mỗi device có 2 ô note 1 và note 2 để bạn có thể tùy chỉnh đặt bất cứ thông tin nào cho tiện theo dõi.
Khi thiết bị được load lên list, nếu có note, chúng sẽ được hiển thị. Bạn cũng có thể thay đổi trực tiếp note trên tool.
Ví dụ
| (async function(){
SetNote1("note1");
Log(GetNote1());
SetNote2("note2");
Log(GetNote2());
})();
|
GetBuiltInBrands
Trả về các brand được tích hợp sẵn có thể dùng cho hàm ChangeInfo
Ví dụ
| (async function(){
Log(GetBuiltInBrands());
})();
|
GetBuiltInModels
Trả về các model của một brand được tích hợp sẵn có thể dùng cho hàm ChangeInfo
Ví dụ
| (async function(){
Log(GetBuiltInModels("samsung"));
})();
|
GetBuiltInCountries
Trả về các country được tích hợp sẵn có thể dùng cho hàm ChangeInfo
Ví dụ
| (async function(){
Log(GetBuiltInCountries());
})();
|
GetBuiltInCarriers
Trả về các nhà mạng của một country được tích hợp sẵn có thể dùng cho hàm ChangeInfo
Ví dụ
| (async function(){
Log(GetBuiltInCarriers("vn"));
})();
|
EvalLocalScript
Hai hàm Eval dưới đây giúp bạn chia nhỏ script để dễ dàng quản lý, cũng như có thể chia sẻ với người khác. script có thể là file js thuần hoặc mã hóa bằng nút Encrypt trên studio
Load script (đã mã hóa hoặc không) từ file trên máy tính và chạy.
Cú pháp
await EvalLocalScript (file);
Chi tiết
Tham số |
Mô tả |
file |
File .js hoặc .bs |
Ví dụ
| (async function(){
Log("Begin...");
// Rất là vừa vừa dòng code
//....
await EvalLocalScript("D:\\my-script\\xxx.js");
//....
// Tiếp tục vài dòng code
Log("Done");
})();
|
EvalRemoteScript
Load script (đã mã hóa hoặc không) từ url và chạy.
Cú pháp
await EvalRemoteScript (url);
Chi tiết
Tham số |
Mô tả |
url |
Địa chỉ url đến file .js hoặc .bs |
Ví dụ
| (async function(){
Log("Begin...");
// Rất là vừa vừa dòng code
//....
await EvalRemoteScript(`http://god-of-code.vl/dich-vu.js?rand=${Date.now()}`); //them rand vào querystring để tránh bị cache
//....
// Tiếp tục vài dòng code
Log("Done");
})();
|