τTau SolutionsReferencias

Código fuente de referencia

panorama · Revisado el 12 de agosto de 2026

1. Qué es y por qué existe

El documento anterior termina con una lista de catorce cosas que ninguna especificación cubre: el layout de resources.arsc, el de AXML, las reglas de match de ResTable_config, la tolerancia del lector de ZIP de Android, la gramática completa de mapping.txt, los formatos de perfil de ART. Este documento dice qué fichero abrir para cada una.

Es el más práctico del bloque y también el más frágil, por dos motivos que conviene tener presentes desde la primera línea:

  • Las rutas se mueven. Entre versiones de Android, los ficheros cambian de sitio, se parten y desaparecen. art/dexlayout/ ya no existe en la rama main; ARSCDecoder.java de apktool tampoco. Ambas se comprobaron el 12 de agosto de 2026 y ambas se citaban habitualmente hace poco.
  • Leer main es leer el futuro. La rama de desarrollo de AOSP contiene código que no está en ningún dispositivo. Documentar desde main es la forma más rápida de escribir algo que es cierto en el repositorio y falso en el mundo. La sección 2.3 es la regla que evita eso, y es la parte más importante del documento.

Todas las rutas de aquí se comprobaron el 12 de agosto de 2026 y devolvieron HTTP 200, salvo las que se señalan expresamente como inexistentes (que se señalan precisamente porque alguien las va a buscar).

2. Cómo leer AOSP sin clonarlo

AOSP son más de un centenar de gigabytes repartidos en cientos de repositorios git. No hace falta clonar nada para leer un fichero, y para el trabajo de este corpus clonar es contraproducente: un clon envejece en silencio.

Hay tres vías, y sirven para cosas distintas.

2.1 cs.android.com — navegar y buscar

https://cs.android.com/android/platform/superproject/main

Es Code Search: el buscador de código de Google sobre AOSP. Lo que aporta y las otras vías no: referencias cruzadas. Al pinchar sobre un símbolo muestra dónde se define y todos los sitios donde se usa, que es exactamente lo que hace falta cuando uno se pregunta «¿quién escribe este campo?».

Formato de enlace directo a un fichero:

https://cs.android.com/android/platform/superproject/main/+/main:<ruta>

Y con número de línea, añadiendo ;l=<n>:

https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h;l=200

Búsqueda por símbolo en todo AOSP:

https://cs.android.com/search?q=ResTable_package&ss=android

Cuándo: para explorar y para entender. Los cuatro enlaces de arriba devuelven 200, comprobado.

Su límite: sirve HTML pensado para un navegador. No es la vía para descargar el fichero.

2.2 android.googlesource.com — el fichero crudo y fijado

https://android.googlesource.com/ es la instancia de Gitiles sobre los repositorios reales. El patrón general:

https://android.googlesource.com/<repo>/+/<ref>/<ruta>

Y el detalle que lo hace útil de verdad: añadiendo ?format=TEXT devuelve el fichero en base64, sin HTML alrededor. Eso permite descargar y procesar sin clonar:

curl -s 'https://android.googlesource.com/platform/frameworks/base/+/refs/heads/main/libs/androidfw/include/androidfw/ResourceTypes.h?format=TEXT' \
  | base64 -d > ResourceTypes.h
wc -c ResourceTypes.h
   86255 ResourceTypes.h

(Ejecutado el 12 de agosto de 2026 en la máquina de referencia.)

Cuándo: siempre que haya que leer el contenido de verdad, extraer constantes o comparar dos versiones.

2.3 La regla: fijar una etiqueta, no leer main

Las dos formas de <ref>:

<ref> Qué da Cuándo
refs/heads/main La rama de desarrollo. Contiene código que aún no ha salido en ningún dispositivo Para ver hacia dónde va algo
refs/tags/android-16.0.0_r4 Una release concreta y congelada Para documentar y para implementar

Comprobado el 12 de agosto de 2026: la etiqueta más alta publicada es android-17.0.0_r1, y existen también android-16.0.0_r1 a _r4 y android-15.0.0_r1 a _r36. Se verificó además que la misma etiqueta resuelve en los distintos repositoriosplatform/art, platform/tools/apksig y platform/system/libziparchive devuelven 200 para android-15.0.0_r1, android-16.0.0_r4 y android-17.0.0_r1—, lo que permite fijar una release y leer todos los componentes coherentes entre sí.

TAG=android-16.0.0_r4
BASE=https://android.googlesource.com/platform/frameworks/base/+/refs/tags/$TAG
curl -s "$BASE/libs/androidfw/include/androidfw/ResourceTypes.h?format=TEXT" | base64 -d | head -40

Por qué importa tanto. El corpus ya usa esta técnica para fechar cambios: la tabla 7.4 de XML binario determina en qué versión de Android se introdujo la validación del tipo del chunk raíz comparando seis etiquetas, y la tabla 8.2 de Tabla de recursos reconstruye el historial de campos de ResTable_config del mismo modo. Sin etiquetas eso no se puede hacer, y con solo main uno acaba afirmando que un campo «existe» cuando no existe en ningún teléfono.

2.4 La API de GitHub, para los espejos y la comunidad

Parte de AOSP se espeja en github.com/aosp-mirror, y todas las herramientas de la comunidad viven en GitHub. La API sirve contenido y metadatos sin clonar:

# ¿existe esta ruta? (200 / 404) y metadatos del fichero
curl -s -o /dev/null -w '%{http_code}\n' \
  https://api.github.com/repos/skylot/jadx/contents/jadx-core/src/main/java/jadx/core/Jadx.java

# el contenido en crudo
curl -s https://raw.githubusercontent.com/google/bundletool/master/src/main/proto/commands.proto | head -30

# la rama por defecto, que no siempre es la que uno supone
curl -s https://api.github.com/repos/pxb1988/dex2jar | python3 -c 'import sys,json;print(json.load(sys.stdin)["default_branch"])'

Aviso sobre la rama por defecto. No dar por hecho master ni main: se comprobaron las diez y no coinciden (tabla en §4.11). pxb1988/dex2jar usa 2.x, y cualquier URL con master sobre ese repositorio falla.

3. AOSP: dónde está cada cosa

3.1 Los recursos — la autoridad sin especificación

Este es el bloque que justifica el documento entero.

Ruta Qué define
frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h La cabecera. Todas las estructuras: ResChunk_header, ResStringPool_header, ResTable_header, ResTable_package, ResTable_typeSpec, ResTable_type, ResTable_config, ResTable_entry, Res_value, y las constantes RES_*, TYPE_*, COMPLEX_*, SORTED_FLAG, UTF8_FLAG
frameworks/base/libs/androidfw/ResourceTypes.cpp El lector. validate_chunk, las dos decodeLength (UTF-8 y UTF-16), ResStringPool::setTo, ResXMLTree::setTo, ResXMLParser::nextNode, y la lógica de configuración: match(), isBetterThan(), isMoreSpecificThan()
frameworks/base/libs/androidfw/LoadedArsc.cpp VerifyResTableType, VerifyResTableEntry, GetEntryOffset con la búsqueda binaria sobre entradas dispersas, y el límite de 65.536 entradas por tipo
frameworks/base/libs/androidfw/AssetManager2.cpp Cómo se resuelve un resource ID en tiempo de ejecución, con overlays y configuración del dispositivo
frameworks/base/tools/aapt2/format/binary/TableFlattener.cpp El escritor. Las condiciones exactas con que aapt2 emite FLAG_SPARSE, FLAG_OFFSET16 y FLAG_COMPACT, y kSparseEncodingThreshold = 60
frameworks/base/tools/aapt2/format/binary/XmlFlattener.cpp El escritor del AXML: cómo se construye el resource map y en qué orden salen los atributos
frameworks/base/tools/aapt2/Resource.h kAppPackageId = 0x7f, kFrameworkPackageId = 0x01 y la descripción canónica de 0xPPTTEEEE
frameworks/base/tools/aapt2/cmd/Link.cpp La validación del rango de --package-id, el 0x00 de --shared-lib y el rango reservado 0x020x7e

Por qué es la autoridad. No hay documento que describa resources.arsc. Lo que ResourceTypes.cpp acepta al leer es el formato; lo que TableFlattener.cpp escribe es lo que hay en los ficheros reales. Y no son lo mismo: el lector acepta bastante más de lo que el escritor produce, y esa diferencia es donde viven las malformaciones deliberadas que documenta XML binario §7.3.

Por dónde entrar: ResourceTypes.h primero, entero. Son unos 86 KB y es la mejor hora que se puede invertir en este dominio. Después TableFlattener.cpp si se va a escribir, o LoadedArsc.cpp si se va a leer.

3.2 El código — DEX y bytecode

Ruta Qué define
art/libdexfile/dex/dex_file.h kDexEndianConstant, kDexNoIndex32, kSha1DigestSize, kDexContainerVersion = 41 (el DEX de contenedor, que la spec no documenta) y los campos container_size_ y header_offset_
art/libdexfile/dex/standard_dex_file.h kNumDexVersions = 6
art/libdexfile/dex/standard_dex_file.cc kDexMagicVersions con las seis versiones aceptadas — y el motivo de que no exista la 036
art/libdexfile/dex/dex_instruction.h El bytecode. kNumPackedOpcodes = 0x100, enum Code con los opcodes, kPackedSwitchSignature = 0x0100, kSparseSwitchSignature = 0x0200, kArrayDataSignature = 0x0300, kMaxVarArgRegs = 5 y los flags kVerify*
art/libdexfile/dex/dex_instruction_list.h La macro que enumera todas las instrucciones con su formato y sus flags. Es la tabla de opcodes en forma ejecutable
art/libdexfile/dex/dex_file_structs.h Las estructuras del fichero (ClassDef, CodeItem, TryItem…) tal como las modela ART
art/libdexfile/dex/dex_file_verifier.cc Qué comprobaciones estructurales hace ART antes de aceptar un DEX. Es la lista de lo que un fichero generado a mano tiene que cumplir
art/runtime/verifier/method_verifier.cc La verificación de bytecode: VerifyInstruction, CodeFlowVerifyMethod y los mensajes de Fail(VERIFY_ERROR_BAD_CLASS_HARD)
art/dexdump/dexdump.cc El volcador de referencia. Útil como oráculo: si dexdump lee algo distinto que tu parser, el equivocado eres tú

Los valores de dex_instruction.h citados arriba se leyeron del fichero el 12 de agosto de 2026 con ?format=TEXT.

Ruta que ya no existe: ⚠️ art/dexlayout/ fue eliminado de la rama main. Se comprobó el 12 de agosto de 2026 listando el árbol de platform/art: los directorios relacionados con DEX que quedan son dexdump, dexlist, libdexfile, dex2oat, dexoptanalyzer y dexopt_chroot_setup. Quien busque dexlayout.cc por una referencia antigua tiene que ir a una etiqueta anterior.

3.3 La firma — tools/apksig

apksig es la biblioteca que hay detrás de apksigner, y es el mejor código de todo AOSP para este propósito: está en Java, es autocontenido y sus comentarios son buenos.

Raíz: https://android.googlesource.com/platform/tools/apksig/+/refs/heads/main/ Prefijo común de las rutas: src/main/java/com/android/apksig/

Ruta (bajo el prefijo) Qué define
ApkVerifier.java El flujo completo de verificación. Qué esquema se intenta en qué orden, bajo qué condiciones, y los códigos de error (V31_BLOCK_FOUND_WITHOUT_V3_BLOCK…). Si solo se puede leer un fichero, es este
ApkSigner.java El lado de la firma: orden de operaciones y qué se recalcula
internal/apk/ApkSigningBlockUtils.java APK_SIGNING_BLOCK_MAGIC, VERITY_PADDING_BLOCK_ID = 0x42726577, CONTENT_DIGESTED_CHUNK_MAX_SIZE_BYTES, generateApkSigningBlock y la normalización del offset del Central Directory en el EOCD
internal/apk/SignatureAlgorithm.java La tabla de algoritmos: identificador, parámetros PSS exactos y minSdkVersion de cada uno. Esto no está completo en ninguna spec
internal/apk/ContentDigestAlgorithm.java Los algoritmos de digest de contenido y sus tamaños de bloque
internal/apk/v1/V1SchemeVerifier.java El JAR signing: MANIFEST.MF, .SF y el bloque PKCS#7
internal/apk/v2/V2SchemeConstants.java 0x7109871a y STRIPPING_PROTECTION_ATTR_ID = 0xbeeff00d
internal/apk/v2/V2SchemeVerifier.java La verificación de v2 paso a paso
internal/apk/v2/V2SchemeSigner.java La generación de v2
internal/apk/v3/V3SchemeConstants.java 0xf05368c0 (v3), 0x1b93ad61 (v3.1), 0x3ba06f8c (proof-of-rotation), y los umbrales MIN_SDK_WITH_V3_SUPPORT / MIN_SDK_WITH_V31_SUPPORT
internal/apk/v3/V3SchemeVerifier.java La verificación de v3 y v3.1
SigningCertificateLineage.java Las capacidades del lineage con sus valores y la advertencia sobre PAST_CERT_ROLLBACK
internal/apk/v3/V3SigningCertificateLineage.java El formato binario del lineage, en el comentario // FORMAT (little endian):
internal/apk/v4/V4Signature.java El .idsig: CURRENT_VERSION, HASHING_ALGORITHM_SHA256, LOG2_BLOCK_SIZE_4096_BYTES y el orden de campos de HashingInfo y SigningInfo
internal/util/VerityTreeBuilder.java CHUNK_SIZE = 4096 y calculateLevelOffset: la construcción real del árbol de Merkle
internal/apk/stamp/SourceStampConstants.java stamp-cert-sha256, 0x2b09189e, 0x6dff800d, 0x9d6303f7 y 0xe43c5946

Por dónde entrar: ApkVerifier.java, y desde ahí seguir las llamadas. La estructura del paquete internal/apk/vN/ es tan regular que una vez visto un esquema se leen los otros solos.

Lo que no está aquí: las constantes de v3.2 no aparecen en la rama pública de apksig. Se obtuvieron del apksigner.jar de las build-tools 37.0.0 con javap -constants (20-firma/01 §2). Y los identificadores de bloque de terceros —dependency metadata, frosting, Meituan— no están en AOSP en absoluto: para eso, §4.10.

3.4 El contenedor — ZIP y alineación

Ruta Qué define
system/libziparchive/zip_archive.cc El lector de ZIP de Android. El barrido hacia atrás en busca del EOCD, y sobre todo qué acepta y qué rechaza: la tolerancia real, que la spec de PKWARE no describe
system/libziparchive/zip_archive_common.h kMaxCommentLen = 65535 y las estructuras zip64 (Zip64EocdRecord, Zip64EocdLocator)
system/libziparchive/zip_writer.cc El escritor: qué produce Android cuando escribe un ZIP
build/tools/zipalign/ZipAlign.cpp getAlignment(): la alineación se decide por extensión de fichero, y las entradas comprimidas se copian sin alinear

Por qué importa zip_archive.cc más que APPNOTE.TXT para este dominio: la especificación describe el ZIP correcto; los APK del mundo real no siempre lo son. La divergencia entre Local File Header y Central Directory, el data descriptor ausente con el flag del bit 3 puesto, el comentario del EOCD con basura — todo eso solo se resuelve viendo qué hace este fichero. Es la raíz de las vulnerabilidades históricas Master Key y Janus (Contenedor ZIP §12).

3.5 Los artefactos auxiliares

Ruta Qué define
art/libprofile/profile/profile_compilation_info.cc kProfileMagic, kProfileVersion y las secciones de baseline.prof. Es la única autoridad: no hay spec
art/runtime/oat/oat_file_assistant.cc La ruta oat/<isa>/ y la relación entre .odex, .vdex y .art
frameworks/support/.../profileinstaller/ProfileTranscoder.java MAGIC_PROF y MAGIC_PROFM — el lado de AndroidX. Vive en la rama androidx-main, no en main

4. Herramientas de la comunidad: por dónde se entra

Un enlace al repositorio no sirve de nada. Lo que sirve es el fichero por el que se empieza. Todas las rutas de esta sección se verificaron contra la API de GitHub el 12 de agosto de 2026 y devuelven HTTP 200.

4.1 jadx — rama master

El decompilador de referencia. Su arquitectura es de plugins de entrada más un pipeline de visitors.

Fichero Qué se aprende
jadx-core/src/main/java/jadx/core/Jadx.java El mapa del pipeline entero. getPassesList() enumera en orden todos los visitors. Es el mejor punto de entrada global de todo el proyecto
jadx-plugins/jadx-dex-input/src/main/java/jadx/plugins/input/dex/DexReader.java La lectura del contenedor DEX que alimenta al core
jadx-core/src/main/java/jadx/core/dex/instructions/InsnDecoder.java La traducción de opcodes Dalvik a la IR interna
jadx-core/src/main/java/jadx/core/codegen/ClassGen.java La generación del texto Java final

https://github.com/skylot/jadx/blob/master/jadx-core/src/main/java/jadx/core/Jadx.java

Empieza por Jadx.java. La lista de passes explica en cincuenta líneas por qué decompilar es difícil, mejor que cualquier artículo.

4.2 apktool — rama main

Fichero (bajo brut.apktool/apktool-lib/src/main/java/brut/androlib/) Qué se aprende
ApkDecoder.java El orquestador de apktool d
res/decoder/BinaryResourceParser.java El parser de resources.arsc: parseTable(), parsePackage() y el switch sobre RES_TABLE_PACKAGE_TYPE, RES_TABLE_TYPE_SPEC_TYPE
res/decoder/BinaryXmlResourceParser.java La decodificación de AXML a XML de texto
res/AaptInvoker.java La invocación literal de aapt2: cómo construye los argumentos de compile y link. Aquí se ve de dónde vienen la mitad de sus fallos de reempaquetado

⚠️ Rutas que ya no existen: ARSCDecoder.java y ResourcesDecoder.java fueron refactorizados y no están en el árbol actual. Se siguen citando en documentación de terceros. El sustituto es BinaryResourceParser.java.

4.3 smali / baksmali (google/smali) — rama main

Fichero Qué se aprende
smali/src/main/antlr/smaliParser.g La gramática ANTLR: la especificación real del lenguaje smali. No existe otra
dexlib2/src/main/java/com/android/tools/smali/dexlib2/dexbacked/DexBackedDexFile.java El corazón de dexlib2: lectura perezosa del DEX a partir de offsets del header
baksmali/src/main/java/com/android/tools/smali/baksmali/Main.java Entrada del desensamblador
smali/src/main/java/com/android/tools/smali/smali/Main.java Entrada del ensamblador

⚠️ Aviso: el repositorio contiene un árbol duplicado bajo third_party/smali/. Usar siempre las rutas sin ese prefijo.

4.4 ARSCLib — rama main

La reimplementación en Java de los formatos de recursos, sin aapt2. Es la referencia de diseño obligada para cualquier lector de resources.arsc escrito desde cero.

Fichero (bajo src/main/java/com/reandroid/) Qué se aprende
arsc/chunk/TableBlock.java La raíz de resources.arsc: Chunk<TableHeader> con su string pool y sus paquetes
arsc/chunk/PackageBlock.java El paquete: tipos, specs e IDs
arsc/chunk/xml/ResXmlDocument.java La estructura de un documento AXML
apk/ApkModule.java La API de alto nivel; es por donde entran APKEditor y los demás consumidores

Por qué leerlo: es el ejemplo trabajado de modelar los chunks fielmente para poder reescribirlos, que es exactamente el problema del round-trip byte-exacto.

4.5 APKEditor — rama master

Fichero Qué se aprende
src/main/java/com/reandroid/apkeditor/merge/Merger.java El comando merge completo: runCommand() crea un ApkBundle, lo fusiona, y luego sanitizeManifest() y fixFilePermissions()
src/main/java/com/reandroid/apkeditor/merge/MergerOptions.java Los flags del comando

Matiz importante: la fusión real no está aquí, está en ApkBundle de ARSCLib (§4.4). APKEditor es la CLI; la lógica es de la biblioteca.

4.6 dex2jar — rama 2.x

Fichero Qué se aprende
dex-reader/src/main/java/com/googlecode/d2j/reader/DexFileReader.java La lectura del DEX
dex-translator/src/main/java/com/googlecode/d2j/converter/Dex2IRConverter.java Paso 1: bytecode Dalvik → IR propia
dex-translator/src/main/java/com/googlecode/d2j/dex/Dex2Asm.java Paso 2 y núcleo: convertClass() emite bytecode JVM con ASM. Aquí está el problema difícil, que es pasar de registros a pila
dex-translator/src/main/java/com/googlecode/d2j/dex/Dex2jar.java La fachada que escribe el .jar

⚠️ La rama por defecto es 2.x. Las URL con master no funcionan. Último push del repositorio: julio de 2024.

4.7 APKiD — rama master

Fichero Qué se aprende
apkid/rules.py RulesManager: cómo se recopilan y compilan las reglas YARA
apkid/apkid.py Scanner: scan_file_obj(), _scan_zip() y _should_scan()la lógica de qué entradas del APK merece la pena escanear
apkid/rules/dex/compilers.yara El ejemplo canónico de regla: identificar el compilador que produjo el DEX
apkid/rules/apk/packers.yara Las huellas de packer a nivel de contenedor

Las reglas se organizan en apkid/rules/{apk,dex,elf,dll,res}/ con categorías repetidas (common, obfuscators, packers, protectors, anti-vm, abnormal).

Sobre el alcance: estas reglas son material de detección e identificación, que es exactamente lo que el corpus documenta. Leerlas no enseña a desempaquetar nada; enseña qué cadenas y qué estructuras delatan a cada familia.

4.8 bundletool — rama master

Fichero (bajo src/main/java/com/android/tools/build/bundletool/) Qué se aprende
commands/BuildApksCommand.java La superficie del comando: todos los flags y modos
commands/BuildApksManager.java La lógica real de execute()
splitters/SplitApksGenerator.java La generación de splits: variantes y dimensiones de targeting
io/ApkSerializerManager.java Cómo se serializan los splits al .apks final

⚠️ ShardedApksGenerator no existe en el árbol actual. El directorio splitters/ contiene los splitters por dimensión (AbiNativeLibrariesSplitter, CountrySetAssetsSplitter…).

Y sus .proto (§6.2 del documento 01) son la autoridad sobre el APK Set.

4.9 R8 — r8.googlesource.com, rama main

No está en GitHub. Se lee con el mismo patrón de Gitiles que AOSP: https://r8.googlesource.com/r8/+/refs/heads/main/<ruta>

Fichero (bajo src/main/java/com/android/tools/r8/) Qué se aprende
naming/ProguardMapReader.java La lectura de mapping.txt: parse(), parseClassMappings(), parseMemberMappings(), parseSignature(), parseRange(). Es la gramática real, que doc/retrace.md solo cubre a medias
naming/ProguardMapSupplier.java La escritura: writeProguardMap(), y el ProguardMapId que es el SHA-256 del contenido
naming/ClassNameMapper.java El modelo de datos del mapping
R8.java El punto de entrada del compilador

⚠️ naming/ProguardMapWriter.java no existe (404 comprobado). No hay ninguna clase *MapWriter: el lado de escritura es ProguardMapSupplier.java. Es un error de búsqueda natural y por eso se deja anotado.

4.10 avast/apkverifier — rama master

Verificador de firma independiente, en Go. Vale la pena precisamente porque no es de Google: documenta los identificadores de bloque que AOSP no reconoce.

Fichero Qué se aprende
signingblock/signingblock.go El parseo del APK Signing Block: la magia partida en apkSigBlockMagicHi/Lo, la localización desde el EOCD y pickAndVerify()
signingblock/frosting.go El bloque 0x2146444e de Google Play, del que no hay documentación oficial
signingblock/schemev2.go, schemev3.go, schemev31.go Cada esquema por separado
apkverifier.go La API pública

De aquí salen los tres identificadores de APK Signing Block §11 que no están en apksig.

4.11 Ramas por defecto y estado — comprobado el 12 de agosto de 2026

Repositorio Rama por defecto Último push
skylot/jadx master 5 ago 2026
iBotPeaches/Apktool main 11 ago 2026
google/smali main 14 jul 2026
REAndroid/ARSCLib main 1 jul 2026
REAndroid/APKEditor master 19 may 2026
pxb1988/dex2jar 2.x 21 jul 2024
rednaga/APKiD master 27 jul 2026
google/bundletool master 15 dic 2025
avast/apkverifier master 10 jul 2026
R8 (r8.googlesource.com) main

El análisis de mantenimiento y bus factor de estos proyectos está en Mapa del ecosistema; aquí solo interesa la rama, porque de ella dependen todas las URL de arriba.

5. Tabla de trazabilidad

El mapa del corpus: qué código sostiene cada documento. Si una afirmación de la columna izquierda se pone en duda, se comprueba en la de la derecha.

Documento Fuentes de código que lo respaldan
10-formatos/01 · Contenedor ZIP system/libziparchive/zip_archive.cc, zip_archive_common.h; build/tools/zipalign/ZipAlign.cpp
10-formatos/02 · Formato DEX art/libdexfile/dex/dex_file.h, standard_dex_file.{h,cc}, dex_file_structs.h, dex_file_verifier.cc
10-formatos/03 · Bytecode Dalvik art/libdexfile/dex/dex_instruction.h, dex_instruction_list.h; art/runtime/verifier/method_verifier.cc; google/smali (smaliParser.g, dexlib2)
10-formatos/04 · XML binario androidfw/ResourceTypes.h y .cpp; aapt2/format/binary/XmlFlattener.cpp; ARSCLib ResXmlDocument.java; apktool BinaryXmlResourceParser.java
10-formatos/05 · Tabla de recursos androidfw/ResourceTypes.h y .cpp, LoadedArsc.cpp; aapt2/format/binary/TableFlattener.cpp, Resource.h, cmd/Link.cpp; ARSCLib TableBlock.java; apktool BinaryResourceParser.java
10-formatos/06 · AAB y splits bundletool (commands.proto, config.proto, targeting.proto, SplitApksGenerator.java); aapt2/Resources.proto
10-formatos/07 · Código nativo gABI y AAELF64 (spec, no código); build/tools/zipalign/ZipAlign.cpp
10-formatos/08 · Artefactos auxiliares art/libprofile/.../profile_compilation_info.cc; art/runtime/oat/oat_file_assistant.cc; apksig/.../SourceStampConstants.java; ProfileTranscoder.java
20-firma/01 · Esquemas v1-v3 apksig: ApkVerifier.java, V3SchemeConstants.java, V2SchemeConstants.java, SigningCertificateLineage.java, V3SigningCertificateLineage.java, ApkSigningBlockUtils.java
20-firma/02 · APK Signing Block apksig: ApkSigningBlockUtils.java, SignatureAlgorithm.java, ContentDigestAlgorithm.java, los *SchemeConstants.java, SourceStampConstants.java; avast/apkverifier para los bloques de terceros
20-firma/03 · Firma v4 apksig: V4Signature.java, V4SchemeSigner.java, V4SchemeVerifier.java, VerityTreeBuilder.java, ApkVerifier.java
20-firma/04 · Alineación build/tools/zipalign/ZipAlign.cpp
40-ofuscacion/01 · R8 y ProGuard R8: ProguardMapReader.java, ProguardMapSupplier.java, ClassNameMapper.java, MapVersion.java, dex/Marker.java; platform/tools/base para las reglas por defecto de AGP
40-ofuscacion/02 · Ofuscadores comerciales APKiD: apkid/rules/{apk,dex,elf}/obfuscators.yara y packers.yara
40-ofuscacion/03 · Packers y protectores APKiD: apkid/rules/apk/packers.yara y homólogas de dex/ y elf/
40-ofuscacion/04 · Anti-análisis APKiD: apkid/rules/dex/protectors.yara y las reglas anti-vm
40-ofuscacion/05 · Deofuscación R8: doc/retrace.md y ProguardMapReader.java; aapt2 optimize --save-obfuscation-map
30-herramientas/ Los diez repositorios de la sección 4

Tres documentos —10-formatos/07 en su mayor parte, y las partes de spec de 02 y 03se sostienen en especificación publicada y no necesitan código. Son la excepción, y por eso están en el documento 01.

6. Trampas verificadas

Resumen de lo que se comprobó y falló, para que nadie repita la búsqueda:

Se busca Estado Qué usar
art/dexlayout/dexlayout.cc 404 en main Eliminado. Usar una etiqueta anterior
apktool ARSCDecoder.java No existe res/decoder/BinaryResourceParser.java
apktool ResourcesDecoder.java No existe Ídem
R8 naming/ProguardMapWriter.java 404 naming/ProguardMapSupplier.java
bundletool ShardedApksGenerator No existe splitters/SplitApksGenerator.java
dex2jar en rama master 404 Rama 2.x
google/smali bajo third_party/smali/ Existe, pero es un duplicado Las rutas sin ese prefijo
google/smali blob/master/… Redirige blob/main/…
Constantes de firma v3.2 en apksig No están apksigner.jar de las build-tools, con javap -constants
Bloques 0x504b4453, 0x2146444e, 0x71777777 No están en AOSP avast/apkverifier

Fuentes

Todas las rutas de este documento se comprobaron el 12 de agosto de 2026: las de AOSP y R8 con curl sobre android.googlesource.com y r8.googlesource.com, y las de GitHub con la API (GET /repos/<org>/<repo>/contents/<ruta>?ref=<rama>). Las señaladas como inexistentes devolvieron 404 o no aparecen en el listado del árbol.

  1. AOSP — frameworks/base/libs/androidfw/ — https://android.googlesource.com/platform/frameworks/base/+/refs/heads/main/libs/androidfw/ Consultado el 12 de agosto de 2026. De aquí sale la tabla de la sección 3.1. El contenido concreto de ResourceTypes.h, ResourceTypes.cpp y LoadedArsc.cpp está desarrollado en 10-formatos/04 y 10-formatos/05, que los citan campo a campo.
  2. AOSP — frameworks/base/tools/aapt2/ — https://android.googlesource.com/platform/frameworks/base/+/refs/heads/main/tools/aapt2/ Consultado el 12 de agosto de 2026. Rutas verificadas: Resource.h, Resources.proto, cmd/Link.cpp, format/binary/TableFlattener.cpp, format/binary/XmlFlattener.cpp.
  3. AOSP — art/libdexfile/dex/ — https://android.googlesource.com/platform/art/+/refs/heads/main/libdexfile/dex/dex_instruction.h Consultado el 12 de agosto de 2026, descargado con ?format=TEXT y decodificado. De aquí se leyeron directamente kNumPackedOpcodes = 0x100, kPackedSwitchSignature = 0x0100, kSparseSwitchSignature = 0x0200, kArrayDataSignature = 0x0300 y kMaxVarArgRegs = 5 citados en la sección 3.2. Verificadas además dex_file.h, standard_dex_file.{h,cc}, dex_file_structs.h, dex_file_verifier.cc y dex_file_loader.cc.
  4. AOSP — listado del árbol de platform/art — https://android.googlesource.com/platform/art/+/refs/heads/main/ Consultado el 12 de agosto de 2026. De aquí sale que dexlayout/ ya no existe y la lista de directorios relacionados con DEX que sí quedan (sección 3.2 y tabla 6).
  5. AOSP — art/runtime/verifier/method_verifier.cc, art/dexdump/dexdump.cc, art/runtime/oat/oat_file_assistant.cc, art/libprofile/profile/profile_compilation_info.cc — https://android.googlesource.com/platform/art/+/refs/heads/main/runtime/verifier/method_verifier.cc Consultados el 12 de agosto de 2026. Secciones 3.2 y 3.5.
  6. AOSP — platform/tools/apksig — https://android.googlesource.com/platform/tools/apksig/+/refs/heads/main/ Consultado el 12 de agosto de 2026. Las dieciséis rutas de la tabla de la sección 3.3 se verificaron una a una. Su contenido está desarrollado en 20-firma/01, 02 y 03.
  7. AOSP — system/libziparchive y build/tools/zipalign — https://android.googlesource.com/platform/system/libziparchive/+/refs/heads/main/zip_archive.cc y https://android.googlesource.com/platform/build/+/refs/heads/main/tools/zipalign/ZipAlign.cpp Consultados el 12 de agosto de 2026. Sección 3.4. Se comprobó que ZipAlign.cpp está disponible tanto en android.googlesource.com como en el espejo github.com/aosp-mirror/platform_build, que es el que citan 10-formatos/01 y 20-firma/04.
  8. AOSP — listado de etiquetas de platform/frameworks/base — https://android.googlesource.com/platform/frameworks/base/+refs Consultado el 12 de agosto de 2026. De aquí sale que la etiqueta más alta es android-17.0.0_r1 y la existencia de android-16.0.0_r1_r4 y android-15.0.0_r1_r36 (sección 2.3).
  9. Comprobación de resolución de etiquetas entre repositorios — ejecutada con curl el 12 de agosto de 2026 sobre platform/art, platform/tools/apksig y platform/system/libziparchive con las etiquetas android-15.0.0_r1, android-16.0.0_r4 y android-17.0.0_r1: las nueve combinaciones devolvieron HTTP 200. De aquí sale la afirmación de la sección 2.3 de que una misma etiqueta permite leer todos los componentes coherentes entre sí.
  10. cs.android.com — https://cs.android.com/android/platform/superproject/main Consultado el 12 de agosto de 2026. Se verificaron los cuatro formatos de enlace de la sección 2.1: la raíz, el enlace a fichero con +/main:<ruta>, el enlace con ;l=<n> y la búsqueda search?q=…&ss=android. Los cuatro devolvieron HTTP 200.
  11. Mecanismo ?format=TEXT de Gitiles — comprobado el 12 de agosto de 2026 descargando ResourceTypes.h de la rama main y de la etiqueta android-16.0.0_r4, decodificando con base64 -d. El tamaño de 86.255 bytes de la sección 2.2 es la salida real de wc -c.
  12. API de GitHubhttps://api.github.com/repos/<org>/<repo> y /contents/<ruta>?ref=<rama> Consultada el 12 de agosto de 2026 para los nueve repositorios de la sección 4 y las rutas de cada uno. De aquí salen íntegras las tablas de las secciones 4.1 a 4.8 y 4.10, la tabla de ramas por defecto de 4.11 y las cinco entradas de rutas inexistentes de la tabla 6.
  13. R8 — r8.googlesource.com/r8 — https://r8.googlesource.com/r8/+/refs/heads/main/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java Consultado el 12 de agosto de 2026 con ?format=TEXT. De aquí sale la tabla de la sección 4.9, incluido que ProguardMapWriter.java devuelve 404 y que el lado de escritura es ProguardMapSupplier.java.
  14. Documentos ya escritos del corpus10-formatos/, 20-firma/, 30-herramientas/ y 40-ofuscacion/ Consultados el 12 de agosto de 2026. La tabla de trazabilidad de la sección 5 se construyó extrayendo con python3 la sección ## Fuentes de los treinta documentos que la tienen y reagrupando por fichero de código, no por documento. Las columnas «qué define» de las secciones 3.1 a 3.5 resumen lo que cada documento declara haber tomado de cada fichero.