Tối giao thừa thấy co người lắc ***Pay cũng được khá nên mấy ngày này cũng chuyển hóa it bánh chưng thành VND xem được ít nào không.
- Phân tích vấn đề.
- Cả mấy ngày qua số người được 6 con số không quá trăm người mà ứng dụng trên kho đã lên tóp một tải về nên nói chung là trừ khi cả năm ăn chay niệm phật không thì chỉ ăn với lắc thôi -> Code một tool tự động.
- Tìm giải pháp.
- Ứng dụng được tải từ kho -> máy ảo cần có kho ứng dụng.
- Cần giả lập được sự kiện lắc và bấm nút nhân thưởng -> có API.
- Không chiếm chuột + bàn phím.!
=> Rất may máy ảo đu kèm SDK của android studio có đủ.
Mình dùng bản neus5 máy lap ram4 + i3-2x nhưng vẫn chạy OK.
- Chuẩn bị máy ảo.
- Sau khi khởi tạo xong cần update và đăng nhập tải ***Pay chạy thử như máy thật.
- Bật chức năng USB debug để dùng adb và gửi sự kiện chạm nhận quà (Mình dùng ubuntu nên thêm biến môi trường là gọi thẳng lệnh adb)
- Code.
- Rất may google cung cấp đủ thuốc cho ca này.
- Một đoạn kịch bản python nữa :
import getpass
import telnetlib
import time
import math
import subprocess
import random
tn = telnetlib.Telnet(host="localhost", port=5554)
line = tn.read_until(b"OK").decode('ascii')
print(line)
tn.write(b"auth <Key đi theo máy>\n")
line = tn.read_until(b"OK").decode('ascii')
print(line)
MAX = 0.1
PHI = math.pi * 3.5
last = count = 0
TICK_TAP = 2.5
SLEEP = 0.01
while True:
a = -MAX * PHI ** 2 * math.cos(PHI * count)
data_byte = "sensor set acceleration {}:9.81:0.0\n".format(a).replace(".", ",").encode('ascii')
tn.write(data_byte)
time.sleep(SLEEP)
count += SLEEP
if count - last > TICK_TAP:
last = count
subprocess.run(["adb", "shell", "input", "tap", "300", "1708"])
print("Tap {}".format(count))
Giờ thì treo máy và nhận quà thôi.
P/S
Một chút về cách gửi sự kiện lắc thông qua cảm biến gia tốc. Chính xác là gia tốc, bình thường mặc định là 9.81 theo trục thẳng đứng. Để giả lập sự kiện lắc cần thay đổi các giá trị này đi sensor set acceleration x:z:y
vấn đề là các giá trị này là bao nhiêu ?
Phân tích hành động lắc điện thoại dưới cách nhìn vật lý thì có thể coi nó là một dao động điều hòa đơn giản hóa công thức dạng x = Acos(2πt + ϕ)
Trong đó A là biên độ MAX = 0.1
mét, 2π là tốc độ góc PHI = math.pi * 3.5
tương đương lắc 1,75 cái trên một giây. Từ công thức tọa độ x theo thời gian đạo hàm hai lần để được công thức gia tốc theo phương x theo thời gian a = -MAX * PHI ** 2 * math.cos(PHI * t)
bỏ qua pha ban đầu vì lắc liên tục nên không cần thiết.