14a3e502dSEvgeniy Stepanovimport os, sys, subprocess, tempfile 20dc3ef37SVitaly Bukaimport time 30dc3ef37SVitaly Buka 4*f98ee40fSTobias HietaANDROID_TMPDIR = "/data/local/tmp/Output" 5*f98ee40fSTobias HietaADB = os.environ.get("ADB", "adb") 60dc3ef37SVitaly Buka 70dc3ef37SVitaly Bukaverbose = False 8*f98ee40fSTobias Hietaif os.environ.get("ANDROID_RUN_VERBOSE") == "1": 90dc3ef37SVitaly Buka verbose = True 100dc3ef37SVitaly Buka 11*f98ee40fSTobias Hieta 124a3e502dSEvgeniy Stepanovdef host_to_device_path(path): 134a3e502dSEvgeniy Stepanov rel = os.path.relpath(path, "/") 144a3e502dSEvgeniy Stepanov dev = os.path.join(ANDROID_TMPDIR, rel) 154a3e502dSEvgeniy Stepanov return dev 164a3e502dSEvgeniy Stepanov 17*f98ee40fSTobias Hieta 18dd0b8b94SVitaly Bukadef adb(args, attempts=1, timeout_sec=600): 190dc3ef37SVitaly Buka if verbose: 2094210b12SVitaly Buka print(args) 210dc3ef37SVitaly Buka tmpname = tempfile.mktemp() 22*f98ee40fSTobias Hieta out = open(tmpname, "w") 230dc3ef37SVitaly Buka ret = 255 240dc3ef37SVitaly Buka while attempts > 0 and ret != 0: 250dc3ef37SVitaly Buka attempts -= 1 26*f98ee40fSTobias Hieta ret = subprocess.call( 27*f98ee40fSTobias Hieta ["timeout", str(timeout_sec), ADB] + args, 28*f98ee40fSTobias Hieta stdout=out, 29*f98ee40fSTobias Hieta stderr=subprocess.STDOUT, 30*f98ee40fSTobias Hieta ) 310dc3ef37SVitaly Buka if ret != 0: 3294210b12SVitaly Buka print("adb command failed", args) 3394210b12SVitaly Buka print(tmpname) 340dc3ef37SVitaly Buka out.close() 35*f98ee40fSTobias Hieta out = open(tmpname, "r") 3694210b12SVitaly Buka print(out.read()) 370dc3ef37SVitaly Buka out.close() 380dc3ef37SVitaly Buka os.unlink(tmpname) 390dc3ef37SVitaly Buka return ret 400dc3ef37SVitaly Buka 41*f98ee40fSTobias Hieta 420dc3ef37SVitaly Bukadef pull_from_device(path): 430dc3ef37SVitaly Buka tmp = tempfile.mktemp() 44*f98ee40fSTobias Hieta adb(["pull", path, tmp], 5, 60) 45*f98ee40fSTobias Hieta text = open(tmp, "r").read() 460dc3ef37SVitaly Buka os.unlink(tmp) 470dc3ef37SVitaly Buka return text 480dc3ef37SVitaly Buka 49*f98ee40fSTobias Hieta 500dc3ef37SVitaly Bukadef push_to_device(path): 514a3e502dSEvgeniy Stepanov dst_path = host_to_device_path(path) 52*f98ee40fSTobias Hieta adb(["push", path, dst_path], 5, 60) 53