Kivy buildozer: как развернуть на конкретное устройство c android - PullRequest
0 голосов
/ 17 января 2020

У меня есть несколько устройств (как AVD, так и аппаратных), подключенных к моему P C, но я хочу развернуть на определенном c устройстве с buildozer. Как я могу сделать это, если отключение других устройств не вариант?

Ответы [ 2 ]

0 голосов
/ 18 января 2020

Как и 18 января 2020 года:

Кажется, что buildozer 1.0.1-dev0 не обладает достаточной гибкостью для выполнения sh этой задачи. Такие команды, как buildozer android deploy adb -s <DEVICE_ID>, просто игнорируют DEVICE_ID и устанавливают apk на все доступные устройства. Есть удобная команда buildozer serve, но она медленная и требует ручного ответа на все диалоги безопасности.

Прямое использование adb является приемлемым вариантом, например:

adb -s DEVICE_ID install -r your.apk

Но если устройств много (armv7 и x86), набирать их каждый раз было бы непросто. Таким образом, я получил скрипт, который помещен в каталог проекта:

import sys
import subprocess

# TODO: edit your custom settings
ADB_EXE = "/home/your_username/Android/Sdk/platform-tools/adb"
APK_X86 = "/path/to/apk/x86/bin/your_project__x86-0.1-x86-debug.apk"
APK_ARMV7 = "/path/to/apk/armv7/bin/your_project__armeabi-v7a-0.1-armeabi-v7a-debug.apk"

DEVICES = {
    # DEVICE_PSEUDO_NAME: ("DEVICE_ID", "PATH_TO_APK")
    "pixtab": ("emulator-5554", APK_X86),
    "pix": ("emulator-5556", APK_X86),
    "nexus4": ("004a900e1b268111", APK_ARMV7),
    "nomi": ("SSI1216C111031288", APK_ARMV7),
}


def run():
    global ADB_EXE
    global DEVICES
    if len(sys.argv) == 1:
        print("Please, specify device.")
        return
    if sys.argv[1] == "list":
        # print all available android devices
        res = subprocess.check_output([ADB_EXE, "devices"])
        for line in res.splitlines():
            print(line)
        return

    dev_name = sys.argv[1]
    print(f"Selected device: {dev_name}")
    if dev_name not in DEVICES:
        print(f"Device is not in the list, skipping.")
        return

    dev_id, apk = DEVICES[dev_name]
    # "-r" means force install
    res = subprocess.check_output([ADB_EXE, "-s", dev_id, "install", "-r", apk])
    for line in res.splitlines():
        print(line)

    print(f"-- Deployment into {dev_id} complete.")


if __name__ == "__main__":
    run()

Чтобы вывести список всех устройств:

python3 dp.py list

Для развертывания укажите c apk для указания c устройство:

python3 dp.py YOUR_DEVICE_PSEUDO_NAME
0 голосов
/ 17 января 2020

Buildozer устанавливается на android через adb. Поэтому вы должны проверить документацию по adb и проверить, как она была изменена в скрипте запуска buildozer.

http://www.appsdeveloperblog.com/install-apk-on-device-adb/ и https://pypi.org/project/buildozer/ Думаю, команда будет выглядеть как

buildozer android deploy adb --s <DEVICE_NAME>
...