Documentation archive · Archivo de documentación
Original recorded source; its language and historical claims are preserved. Download original file
# ADR 0001: núcleo DEX independiente y verificable Fecha: 2026-10-13. Estado: adoptado para el incremento inicial. El objetivo exige emitir DEX real sin herramientas Java ni empaquetadores Android. Se implementa en Go con biblioteca estándar exclusivamente. La salida es DEX 035: no necesitamos invoke-custom, default methods ni versiones container. El runtime experimental se orienta a Android API 26 o posterior; todavía no hay configuración APK que aplique ese mínimo. Se separan modelo simbólico, codificadores, ensamblador, constructor, parser y runtime. La API pública está en `pkg/dex` para que un consumidor externo pueda usar el generador sin importar paquetes `internal`. Los alias públicos evitan dos representaciones incompatibles del mismo IR. La CLI admite JSON del mismo modelo para permitir construir sin compilar un programa Go de usuario. La compilación tiene dos pasadas lógicas: recolección y orden de símbolos, seguida de resolución de instrucciones y emisión con fixups de offsets. El escritor es append-only con fixups de campos reservados; no cambia la longitud de secciones ya posicionadas. Registros de parámetros simbólicos permiten añadir locales sin reescribir manualmente los índices físicos de argumentos. El salto goto usa siempre la forma /32 para evitar un algoritmo de relajación de saltos en este primer incremento. Las ramas condicionales conservan los límites oficiales de 16 bits y fallan explícitamente si no caben. No hay trampolines silenciosos. `const-string` selecciona jumbo cuando lo exige el índice. Se comparte cada type_list exacta, se ordenan clases por dependencias y se ordenan los miembros por identificadores. La misma entrada produce los mismos bytes; reordenar declaraciones equivalentes tampoco cambia el archivo. No se incorporan fechas, paths de host ni nombres de archivos de código inventados. El parser no importa el escritor, builder ni ensamblador. Enumera físicamente las secciones a partir de map_list y comprueba que las referencias apunten a comienzos de ítems reconocidos. Comparte solo las primitivas pequeñas y las reglas de nombres con el emisor: esas primitivas tienen pruebas golden independientes. Rechaza secciones fuera del subconjunto soportado. Este enfoque hace explícito qué puede afirmar la herramienta; no sustituye la resolución ni el análisis de tipos de ART. La Activity se emite únicamente mediante `--activity-experiment`. Usa assets de archivo para una prueba inicial admitida por la especificación del proyecto; no se presenta como solución de producción. No hay AndroidX implícito ni puente addJavascriptInterface. El siguiente runtime requiere una clase WebViewClient generada con interceptación HTTPS local y una política de origen/navegación. No se añaden aún C, JNI, plugins ni módulos vacíos de firmas o APK para simular progreso. El bloqueo es la aceptación real en Android y las capacidades que todavía no están implementadas, no una dependencia externa disimulada. Fuentes: [formato DEX](https://source.android.com/docs/core/runtime/dex-format), [bytecode](https://source.android.com/docs/core/runtime/dalvik-bytecode), [formatos de instrucciones](https://source.android.com/docs/core/runtime/instruction-formats), [Activity](https://developer.android.com/reference/android/app/Activity), [WebView](https://developer.android.com/reference/android/webkit/WebView), [WebSettings](<https://developer.android.com/reference/android/webkit/WebSettings#setAllowFileAccess(boolean)>). La firma APK se diseñará a partir de las [especificaciones v2](https://source.android.com/docs/security/features/apksigning/v2) y [v3](https://source.android.com/docs/security/features/apksigning/v3) ya consultadas.