我有多个设备(AVD 和硬件(连接到我的 PC,但我想部署到具有buildozer
的特定设备。如果无法断开其他设备的连接,我该怎么做?
Buildozer 通过 adb 安装到 android 上。因此,您必须检查 adb 的文档,并检查如何在构建器启动脚本中修改它。
http://www.appsdeveloperblog.com/install-apk-on-device-adb/和 https://pypi.org/project/buildozer/认为命令会像
buildozer android deploy adb --s <DEVICE_NAME>
截至 2020 年 1 月 18 日:
似乎buildozer 1.0.1-dev0
没有足够的灵活性来完成这项任务。像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
要将特定apk
部署到特定设备,请执行以下操作:
python3 dp.py YOUR_DEVICE_PSEUDO_NAME