代码之家  ›  专栏  ›  技术社区  ›  Catalin Morosan

检测Android emulator何时完全启动

  •  27
  • Catalin Morosan  · 技术社区  · 14 年前

    我想创建一个脚本,启动一个模拟器,在系统完全启动后,我想安装一个.apk。

    http://developer.android.com/guide/developing/tools/adb.html 据说 adb wait-for-device install <app>.apk 不正确。

    那么我该如何做到这一点呢?有可能吗?是我唯一的选择睡眠几分钟,直到我可以确定模拟器已启动?

    5 回复  |  直到 14 年前
        1
  •  40
  •   neuron    11 年前

    这将告诉您引导动画是否正在运行。这是我们在无头构建服务器上用来检查仿真器是否启动的。这个sys.boot\u已完成从2009年开始我找到了那面旗帜。我们使用初始化.svc.bootanim相反,因为boot\u completed有过早触发的趋势。

        2
  •  22
  •   Sebo gabisajr    8 年前
    while [ "`adb shell getprop sys.boot_completed | tr -d '\r' `" != "1" ] ; do sleep 1; done
    

    此代码从sys.boot\u已完成如果系统引导完成,则删除换行符并将结果值与1进行比较。如果它没有完全启动,它只会休眠1秒然后再试一次。

    把你的电脑。。。在这行代码之后。

        3
  •  14
  •   dac2009    12 年前

    我不确定这是否适用于所有设备,但它在我测试过的设备上工作。

    如果进入shell,可以键入getprop,并获得电话属性列表。

        4
  •  3
  •   Torbik    5 年前

    只需运行emulator -delay-adb adb wait-for-device . adb 将在模拟器启动时退出。

        5
  •  0
  •   Pebermynte Lars    3 年前

    使用中提供的引导状态 service.bootanim.exit 可能会产生不稳定的结果,如果你试图安装一个应用程序后不久。

    尤其是当你用它来检查重启后 adb shell su 0 setprop ctl.restart zygote

    是模拟器启动时显示在白色背景上的“google”图标。完成后,下一个状态是“Phone is starting”屏幕,此时无法立即安装应用程序。

    我发现监视从无网络到LTE或WIFI的切换是在UI完成渲染之后发生的。这样模拟器就可以进行用户输入,包括应用程序加载。

    adb shell dumpsys connectivity | sed -e '/[0-9] NetworkAgentInfo.*CONNECTED/p' -n 
    

    用户界面加载完成后,仿真器网络将状态从无网络更改为LTE,最后更改为WIFI。在Android 10上测试,支持googleapi。

    没有 sed 你得到的信息太多了。尝试 grep

        6
  •  -1
  •   Luminger    14 年前

    如果以“-logcat VERBOSE”启动模拟器并等待指示模拟器已启动的消息,则可以解析模拟器的标准输出。

    我现在在输出中没有看到任何好消息,但您可以编写一个正在侦听的应用程序“android.intent.action操作.BOOT\u COMPLETED”并将某些内容写入日志。

    参考 http://developer.android.com/guide/developing/tools/emulator.html

        7
  •  -1
  •   Brad Larson Code Synthesis    9 年前

    您可以设置广播接收器,它可以通知设备引导已完成

    android:name="android.intent.action.BOOT_COMPLETED"