EmuLabZip logo EmuLabZip

Cómo funcionan las herramientas oficiales

Actualizado el · Editar esta página en GitHub

Antes de escribir EmuLabZip estudiamos cómo Xcode Instruments y los profilers de Android Studio recogen sus datos. El estudio fue estático: miramos los paquetes de las aplicaciones tal como se distribuyen, las bibliotecas que enlazan, las clases y paquetes dentro de los archivos JAR y las cadenas de los binarios que corren en el dispositivo. No se parcheó ni se redistribuyó nada. El objetivo era entender qué fuentes de datos existen y después elegir las que una herramienta de código abierto puede usar mediante interfaces públicas y documentadas.

Xcode Instruments#

ÁreaQué encontramos
Lenguajes e interfazSwift y Objective-C, AppKit con SwiftUI, además de frameworks privados de gráficos y de árboles de llamadas
PluginsPaquetes .xrplugin y paquetes de instrumentos .instrdst (Networking, HTTP Tracing, SwiftUI, Hangs, Hitches, System Trace…)
TransporteDTX, un protocolo RPC privado, sobre sockets, puertos Mach o memoria compartida, con compresión
Agente en el dispositivoDTServiceHub expone canales como sysmontap (estadísticas de procesos y del sistema), coreprofilesessiontap (traza del kernel), objectalloc, vmtracking y activitytracetap (os_log y signposts)
Fuentes de datosTrazado del kernel (ktrace, kperf), el sistema de logging unificado y los signposts, simbolicación
RedEstadísticas de conexión (netstats) y trazado HTTP de CFNetwork emitido a través del log unificado, no un proxy
Línea de comandosxctrace record y xctrace export

Xcode y el simulador#

simctl controla CoreSimulator mediante un servicio XPC. Puede listar y arrancar dispositivos, ejecutar comandos dentro de un simulador (simctl spawn … log stream), capturar la pantalla (simctl io screenshot, recordVideo), listar apps y sus contenedores, sobrescribir la barra de estado, fijar la ubicación, enviar notificaciones push y añadir certificados raíz. Una app de simulador es un proceso normal de macOS, así que el host puede leer directamente su uso de CPU y de memoria.

Android Studio#

ÁreaQué encontramos
PlataformaIntelliJ Platform sobre JetBrains Runtime, Kotlin y Java, Swing con Compose for Desktop para la interfaz nueva del profiler
Acceso al dispositivoddmlib y adblib (ADB), y la API gRPC del emulador, descubierta a partir de los archivos avd/running/pid_*.ini
ProfilersUna tubería de transporte: grpc-java y protobuf entre Studio y un daemon en el dispositivo
Daemon del dispositivotransport (antes perfd), enviado a /data/local/tmp/perfd/. Ejecuta dumpsys meminfo --checkin, dumpsys SurfaceFlinger --latency, perfetto, simpleperf, am dumpheap y carga un agente JVMTI en las apps depurables
TrazasPerfetto (trace_processor como servicio gRPC), informes de simpleperf, trazas de métodos de ART
MemoriaVolcados de heap .hprof analizados con Shark, asignaciones nativas mediante heapprofd en Perfetto
RedAntes, reescritura de bytecode de OkHttp y HttpURLConnection con ASM (profilers-transform.jar); hoy, el inspector de red de App Inspection, que se engancha a las pilas HTTP dentro de las apps depurables

Qué usa EmuLabZip#

Solo usamos interfaces públicas y documentadas. El protocolo DTX de Apple y los agentes en el dispositivo de Google son privados, cambian entre versiones y no nos corresponde redistribuirlos.

DatoAndroidSimulador de iOS
DispositivosProtocolo host de ADB (host:devices-l), hablado directamente desde Rustxcrun simctl list devices -j
Datos del dispositivogetprop, wm, dumpsys battery, /procJSON de simctl, lista de runtimes, defaults dentro del simulador
Appspm list packages, pssimctl listapps, launchctl list dentro del simulador
Logslogcat -v threadtimelog stream --style ndjson dentro del simulador
Capturas de pantallascreencap -psimctl io screenshot
CPU y memoria (Fase 2)/proc/<pid>/stat, dumpsys meminfoEstadísticas de procesos del host
Fotogramas (Fase 2)dumpsys gfxinfo framestatsSignposts y xctrace (Fase 4)
Trazas (Fase 4)Perfetto, simpleperfxctrace record y export
Red (Fase 3)Proxy HTTP con una CA de usuario, emulator -tcpdumpProxy del host, simctl keychain add-root-cert

Esto mantiene EmuLabZip pequeño, seguro para ejecutarlo contra cualquier imagen de emulador y estable frente a las actualizaciones de Xcode y Android Studio. También significa que no se instala nada en el dispositivo: cada consulta es algo que tú mismo podrías escribir en adb shell o xcrun simctl.