The arm64-to-x86_64 binary translation based on Berberis framework.
Built on AOSP 16 (API 36).
Upstream AOSP Berberis publishes only a RISC-V backend. Google's own Android
Emulator Google APIs x86_64 system images do ship an ARM64 one — they register
ro.dalvik.vm.native.bridge=libndk_translation.so, a Berberis build whose symbol
table carries berberis::intrinsics::Arm64ReadFpcr, next to
/system/etc/berberis/cpuinfo.arm64.txt and arm64_dyn/arm64_exe binfmt_misc
handlers — but that implementation is closed. It is present in the Google APIs
images from Android 14 (API 34) through Android 17 (API 37); the plain AOSP
images ship no native bridge at all. Digitalis is an open ARM64 backend for the
public framework.
mkdir digitalis
cd digitalis
repo init -b android-latest-release -u git@github.com:DigitalisX64/manifest.git
repo sync -c -d --no-tags --force-sync
source build/envsetup.sh
lunch sdk_phone64_x86_64_digitalis-trunk_staging-userdebug
m
Or use the lunch shortcut (it sources build/envsetup.sh for you if needed), then m:
source digitalis/scripts/lunch-digitalis.sh
m
emulator
# And then build and install sample/hellodigitalis with Gradle to test
Build the translator as a binary-only bundle that other AOSP x86_64 products can
drop in without compiling Berberis from source. The build runs in a reproducible
Docker container whose build identity defaults to digitalis-build, and it reuses
the host's existing out/ so a normal developer never has to rebuild the tree.
# Build + package the prebuilt bundle (incremental; reuses out/).
digitalis/docker/build-digitalis.sh
# Verify the produced bundle (presence, ELF arch, native-bridge export, checksums).
digitalis/scripts/verify-digitalis-prebuilts.shThe output digitalis/dist/digitalis-prebuilts/ holds the translator, proxy libs,
ARM64 guest libs, and configs, plus a digitalis-prebuilts.mk a consumer product
inherits to enable native bridge. See docker/README.md for the
build identity/uid parameters, host-path reuse details, and integration steps.
This repo includes a /dispatch slash command and an automated dispatch script for Claude Code.
Inside Claude Code, run the automated multi-cycle dispatch loop:
/dispatch Fix STLR root cause
Or continue from where the last handoff left off:
/dispatch
This runs .claude/scripts/digitalis-dispatch.sh, which spawns subagents in a loop — each reads the latest handoff, does real work, writes the next handoff, and exits. The loop continues until STATUS: COMPLETE.
To run directly from the terminal:
.claude/scripts/digitalis-dispatch.sh "Implement FRECVTS instruction"Digitalis is a modification of the Android Open Source Project and its Berberis binary-translation framework, © Google LLC, used under the Apache License 2.0. Android, Berberis, ANGLE and GFXStream are projects and/or trademarks of Google LLC. Digitalis is not affiliated with, endorsed by, or sponsored by Google.
Arm, AArch64 and NEON are trademarks of Arm Limited. Vulkan and OpenGL ES are trademarks of the Khronos Group.
The sample apps under sample/hellodigitalis/ link third-party libraries — among
them Qt, React Native, Lynx, OpenCV, TensorFlow Lite, PyTorch, ONNX Runtime,
FFmpeg, WebRTC, Realm and SQLCipher — each the property of its respective owners
and used under its own license.
Third-party application and product names and packages referenced in the docs and test tooling are trademarks of their respective owners and appear solely to report interoperability-testing results; no affiliation or endorsement is implied. No third-party application is redistributed by this repository — the prebuilt APKs used for regression testing are not committed.