Skip to content

Releases: OthmaneBlial/droidless

DROIDLESS v0.3.0 — bounded file workflows

Choose a tag to compare

@OthmaneBlial OthmaneBlial released this 02 Oct 08:23

0.3.0 — bounded file workflows

DROIDLESS 0.3.0 adds staged, package-confined file output and completes the
unchanged Notepad APK's database backup/restore work through exact recovery.
This remains an experimental macOS ARM64 preview with a limited Android API
profile.

The real app flow

The SHA-256-pinned Notepad 1.0.0 APK writes external/notepad_backup.nbu from
its own Backup data callback. The file is byte-identical to its private SQLite
database (24,576 bytes in the checked seed). Replay then alters a note on a
disposable copy and uses the app's Restore data picker and confirmation. The
restored database bytes, SQLite integrity, Note rows and Folder row match the
backup; a fresh process renders the recovered notes and folder.

After the write is complete, this APK calls unsupported System.exit(0), so the
restore replay reports that guest shutdown boundary. The seed is never modified.
This proves this app's tested database workflow; it does not establish general
Java serialization, broad file APIs or complete app compatibility. Physical
folder/dialog input remains unverified.

Runtime additions

  • Bounded FileOutputStream String/File constructors, append mode, byte-array
    writes and atomic flush/close commits, capped at 64 MiB.
  • Shared FileOutputStream/FileChannel position and close state, with bounded
    transferFrom/transferTo; File.listFiles(FileFilter) uses guest callbacks
    over package-confined entries.
  • Mounted Views for FragmentTransaction.add(containerId, fragment) and a
    bounded same-runtime reference path for custom Bundle Serializable values.
  • APK-local declared-field access, Toast logging, UTF-8 form URL encoding,
    MimeTypeMap extension lookup and a few missing Context/String methods.

Writes stay inside the package's private or virtual external directory. Paths
reject traversal, symlinks, hard links, special files and host paths. Unclosed
staged output does not replace a prior file. Custom Serializable values retain
object identity only while staying in this runtime; no Java serialization bytes
or cross-process persistence are produced.

Download and validation

The macOS ARM64 archive contains the CLI, license, five authored APK fixtures,
three upstream APK fetch/check helpers, README and RELEASE.json provenance.
The checksum file verifies the archive. No Apple developer signature or
notarization is provided; public APKs are fetched unchanged and are not bundled.

All checks run locally; GitHub Actions remain disabled. sh tools/ci.sh passes
150 Rust tests, warning-free Clippy, optimized builds, 4,096 seeded mutations
and five AppKit checks. The full optimized public replay passes with one
unchanged CLI (SHA-256 c793225d9963e1186774eca5b0a5b0488963d14cbcc1f5aba3b236c514fdc438).
Packaging extracts into a clean temporary directory and verifies the installed
executable and guest flows.

shasum -a 256 -c SHA256SUMS
tar -xzf droidless-0.3.0-macos-arm64.tar.gz
cd droidless-0.3.0-macos-arm64
./droidless run --headless --ephemeral fixtures/counter.apk --click Increment
sh tools/fetch-notepad.sh
./droidless run --headless --size 390x844 --data-dir ./test-apps \
  --click "+" --input "Hello, desktop" --back artifacts/apks/notepad-v1.0.0.apk

The 50% project checkpoint remains an active milestone, not a measured API
coverage claim. Linux builds/native UI, broad AndroidX/Compose, JNI, networking,
JIT and games remain future work. Use trusted APKs; this is not an audited
security sandbox.

Download v0.3.0 ·
Website ·
Verification · Compatibility ·
Security · Storage

DROIDLESS v0.2.0 — notes, photos & native views

Choose a tag to compare

@OthmaneBlial OthmaneBlial released this 02 Oct 06:55

DROIDLESS — Android apps. New desktop habitat.

📓 Notes, photos and native views

DROIDLESS v0.2.0 brings everyday app flows to the macOS ARM64 preview through its own Rust interpreter and native View bridge.

  • Original Notepad: save/edit/restart, Delete/Undo, drawer navigation and folder create/rename/delete in headless replay. The original confirmation and Cancel buttons run the APK's own code.
  • Original SwpieView: selected-folder thumbnails, JPEG/PNG/WebP viewing, Parcelable transport, Back and replayed gestures. Earlier native window evidence is documented separately.
  • Runtime foundations: navigation/results, persistent data, collections/reflection, scheduled guest work, modal panels, focus, clipping, font metrics and text ellipses.
  • Bounded file input: private snapshots, a package-isolated virtual external directory and shared input-channel position/close state. Backup/restore remain unfinished.

📦 Download

The archive includes the CLI, five authored APK fixtures, three hash-checking public APK fetch helpers and RELEASE.json provenance. Public APKs are fetched unchanged from upstream and are never included in the archive.

shasum -a 256 -c SHA256SUMS
tar -xzf droidless-0.2.0-macos-arm64.tar.gz
cd droidless-0.2.0-macos-arm64
./droidless run --headless --ephemeral fixtures/counter.apk --click Increment

🧪 Verified locally

147 Rust tests, warning-free Clippy, optimized builds, five native component checks and 4,096 seeded parser mutations. The complete public APK replay passed against one unchanged CLI. A clean extracted install passed Counter, navigation/Back, UTF-8 preferences and original Notepad save/restart. GitHub Actions stay disabled.

Archive SHA-256: 6a63f884e91073821eaa8591fa57d6823364b0daafab2b4dd61f7f1da996f238

CLI SHA-256: 8ac84853d73959bc1ff9e901639a5363651dd11518fb0396542e5434fb7f6f61

Experimental macOS ARM64 preview; no Apple developer signature or notarization. Physical public folder/dialog input and broad Android compatibility remain unverified. The 50% project target remains active.

Website · README · Exact release scope · Verification

DROIDLESS v0.1.0 — interactive APK preview

Choose a tag to compare

@OthmaneBlial OthmaneBlial released this 30 Sep 17:26

DROIDLESS runs Android application DEX without Android. This experimental milestone executes the original KasCalc 1.0 APK in a native macOS window: button clicks reach its own bytecode, 7 + 5 displays 12.0, and native close runs pause/stop/destroy with exit status 0.

The Rust runtime includes bounded APK/binary XML/DEX/resource parsing, a register interpreter and managed heap, Activity lifecycle, basic layouts/widgets, native mouse/text/key callbacks, catchable Java faults, interface/array assignability and persistent failed-class initialization.

Locally validated commit: bb4912d8f382c948aa2eef7a0e34234c4872dc9d. Formatting, check, 14 Rust tests, warning-free clippy, release build, 4,096 seeded parser mutations and ten headless KasCalc scenarios passed. Native Counter text/key callbacks and clean close were observed. The packaged CLI passed a clean extracted-consumer APK/callback check. CI runs locally only; source GitHub Actions are disabled.

Build from source:

git clone https://github.com/OthmaneBlial/droidless.git
cd droidless
git checkout v0.1.0
cargo build --release --locked
sh tools/fetch-kascalc.sh
target/release/droidless artifacts/apks/KasCalc.apk

The macOS ARM64 archive contains the CLI, Apache-2.0 license, authored Counter fixture and hash-checking upstream fetch helper. It excludes the third-party calculator. Tested on macOS 26.6; the binary has no Apple developer signature or notarization. Verify the archive with the attached SHA256SUMS.

This is a limited traditional Java/Android API subset, not broad APK compatibility or an audited security sandbox. Use trusted APKs. Storage, Intents, timers, networking, AndroidX, Compose, JNI and JIT are not implemented. Full focus/IME/paste and Linux build/UI validation remain open.

Project site · Documentation · Changelog · Compatibility · Security boundaries