🔧 Programmierung 🕛 vor 6 Monaten 4 Min Lesezeit
0

Pockr | Part 6 — Test Results and What's Next

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht




Test Results, Firebase Test Lab, and What's Next for Pockr




Part 6 of 6 — the final chapter of building Pockr, a single APK that runs Docker on non-rooted Android.

— v1.0.0 · ARM64 · 163 MB




Requires Android 9+ (API 28), ARM64 device. Enable "Install from unknown sources" before installing.








How We Test: Firebase Test Lab



Physical device testing on a Mac with an Android emulator is unreliable for this project — QEMU needs hardware virtualisation, and nested virtualisation in emulators doesn't work.



Instead, every build gets tested on Firebase Test Lab with a Robo test:
































Setting Value
Device Pixel 2 (arm64)
Android version 11 (API 30)
Test type Robo (automated UI crawler)
Timeout 600 seconds
Architecture ARM64 (same as real phones)


The Robo crawler explores the UI systematically — tapping every button it finds, navigating every screen, filling forms. It's brutal but effective at finding race conditions and edge cases that manual testing misses.







Test History































































Version Result What Changed
v11–v20 ❌ Various crashes ELF/linker issues, asset extraction bugs
v22 ✅ Pass VmManager as Application singleton — QEMU survives Activity relaunch
v23 ✅ Pass DNS fix (use-vc + 8.8.8.8 fallback) — Docker Hub reachable
v24 ✅ Pass Flutter ScaffoldMessenger context fix
v25 ✅ Pass
First container pull + run — busybox and nginx from Docker Hub (~78s)
v28 ✅ Pass Release APK + Pockr branding
v30 ✅ Pass Corrected APK filename in test script
v33 ✅ Pass Race condition fix in VmManager.getStatus() — no more restart loop
v34 ❌ Fail Double-start found — Robo tapped Start during starting→running transition, launching a second QEMU instance
v35 ✅ Pass Double-start guard in VmState.startVm() — confirmed no double-start, containers running






What a Passing Test Looks Like



From the v35 logcat (second boot — Docker image cache already warm):




CODE
03:38:02  VmManager: Starting VM...
03:38:02 VmManager: Reusing existing user.qcow2 (Docker image cache preserved)
03:38:02 VmManager: VM process launched

... Alpine second boot: ~50 seconds ...
... API server comes up ...

03:38:53 VmApiClient: Container started: alpine_1772710722409 ✅
03:39:28 VmApiClient: Container started: test_1772710762640 ✅






From cold install (first boot, Docker + Python setup):




CODE
03:35:33  VmManager: Starting VM...
03:35:33 VmManager: Extracted vm/base.qcow2 (fresh install)
03:35:33 VmManager: VM process launched

... Alpine first boot: ~2–5 minutes ...
... Docker installs, API server bootstraps ...






From cold install to running container: ~5 minutes.

Second boot (Docker image cache warm): ~50 seconds.









What Works Today




  • ✅ Install APK → tap Start → QEMU boots Alpine Linux

  • ✅ Docker pulls images from Docker Hub over SLIRP networking

  • busybox, alpine, nginx confirmed running on real hardware (ARM64, Android 11)

  • ✅ Persistent overlay disk — pulled images survive VM restarts

  • ✅ No root. No Termux. No PC required after install.

  • ✅ Foreground service keeps VM alive when app is backgrounded

  • ✅ Auto-start option to launch VM on app open









Current Limitations
































Limitation Notes
First boot ~5 min Docker + Python bootstrap on Alpine; subsequent boots ~50s
ARM64 only QEMU binary targets aarch64 only (no ARM32/x86)
Storage driver: vfs
Less efficient than overlay2, but works without kernel modules

--network host only
No isolated container networks without bridge module
APK size ~163 MB Includes full Alpine disk image + QEMU binary + 50 libraries








What's Next




  • [ ] Stop container / view logs in app UI

  • [ ] ARM32 device support

  • [ ] Reduce first-boot time

  • [ ] Custom container image support from UI









The Full Series







  1. What is Pockr? Start here


    1

    Executing Binaries — The SELinux Problem


    3

    Docker Without Kernel Modules


    5

    Test Results and What's Next




GitHub:

Vollständiger Original-Artikel
Den kompletten Beitrag mit allen Details direkt auf dev.to lesen.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
6 Quellen
CVE-2022-44255 | TOTOLINK LR350 9.3.5u.6369_B20220309 buffer overflow (EUVD-2022-47204)
2 Quellen
CVE-2026-68426 | Linux Kernel up to 6.18.41/7.1.5/7.2-rc3 xfrm validate_xmit_skb_list use after free (Nessus ID 346426)
1 Quelle
Windows 11 Probleme mit gültiger Domänenanmeldung nach September-Update [Workaround]
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Pockr | Part 6 — Test Results and What's Next

Thematisch verwandte Begriffe: Pockr, Part, Test, Results · 6 Treffer

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...