Quickstart — using a map¶
Each map is one file per (app, version_code). The version_code is the
authoritative selection key, so it is the filename:
Grab the file for your installed version_code and load it like any other Rosetta
map.
rosetta-frida (TypeScript)¶
import { rosetta } from 'rosetta-frida';
import map from 'rosetta-maps/maps/com.example.app/30405.json' with { type: 'json' };
rosetta.session({ map });
rosetta-xposed (Kotlin)¶
Runtime auto-fetch by (app, version_code) is on the adapters' roadmap; until
then, vendor the file you need.
Finding your version_code¶
<version_code> is the full Android longVersionCode ((versionCodeMajor << 32) | versionCode), never masked. If a map for your exact version is missing, that is the cue to
contribute one: extend the signatures, regenerate, and open a
PR.
The worked example¶
maps/com.example.app/30405.json is a feature-complete example map — it exercises
overloads, constructors, enums, fields, and synthetic / anonymous classes (plus a
plain Binder .Stub class), generated from
signatures/com.example.app/signatures.yaml. Copy it (and the matching
signatures) as the starting point for a real contribution.
Anchoring evidence types¶
Signatures pin each class on the most rotation-stable evidence available, so the same rule resolves across adjacent point releases even as obfuscated names rotate. The taxonomy is generic-first — these work for any class and are the default:
- String literals — endpoint URLs, log tags,
static final Stringconstants, field/key names reached by live code. The everyday anchor. - Superclass / framework parent — an obfuscated class still
extendsa non-rotatingandroid/androidx/javaparent (or implements a stable interface). - Constants — a
static finalvalue or magic number a class carries. - Structural / cross-class — a resolved class's descriptor referenced elsewhere, or a distinctive method-table shape.
- AIDL / Binder descriptor — a niche special case when present: a
.Stubembeds its binder descriptor string verbatim and it never rotates, but most classes have no AIDL contract, so it is the exception, not the rule.
This is authoring guidance, not a format spec — the on-disk fields live in the map schema, the single source of truth.