simple_eif_phone

Write an Android app in Eiffel, and get a signed APK from one command.

MIT License Android 8.0 or later Design by Contract

Overview

simple_eif_phone lets you write a whole Android app in Eiffel. One command turns an Eiffel project into a signed APK, with no Gradle and no Android Studio.

Part of the Simple Eiffel ecosystem.

What's here

PartWhat it isCompiled by
eifphone (tool/)Command-line tool: Eiffel project in, signed APK out.EiffelStudio (Windows)
simple_eif_phone (src/)Library: the phone in phone terms (app life, touch, keys, screen, sizes, folders, packed files, log), all with contracts.Gobo gec, then the Android NDK
runtime/The fixed C glue and the Java helper scaffold. Apps never edit these.Packaged by the tool
examples/hello, touch_pad (drawing demo), phone_tests (on-device tests), java_scaffold, touch_bench (speed measures).

Status

Version 0.1.0: early, working, not yet widely used.

  • 88 tool tests, 33 logic tests and 18 on-device tests pass, with zero warnings. On-device tests ran on the emulator.
  • On a real ARM phone, the touch pad took five fingers at once. Putting a full screen up took 1.8 ms on average and 6.5 ms at worst.
  • Random-input stress: 9,000 events on each of the fast and checked builds of the touch pad, with no crash.

Known limitations

  • The tool runs on Windows only. Phone apps run on Android 8.0 (API 26) or later, on ARM64 and x86_64.
  • One thread. Threads and SCOOP are not supported on the phone yet.
  • Not yet: text entry (the keyboard), read-aloud, the file picker, SQLite, and running cairo, shaping and widgets on the phone.
  • An adb that never answers hangs the tool. The runner has no timeout. Stop the tool by hand if that happens.
  • eifphone run shows the first 3 seconds of the log. Use eifphone log for the rest.
  • On-device tests have run on the emulator only. Speed, multi-touch, Home and return, and rotation were checked by hand on one real ARM phone.
  • Two one-off failures are unexplained. tap_arrives failed once, in the first run after a stress session on a fresh emulator, then passed. One stress run stopped on a crash from a process that was not identified, and the same run passed when repeated.

Where to go next

  • Quick API: commands, the project file and a first app.
  • User Guide: setup, signing, contracts and speed, testing on a phone.
  • Cookbook: saving state, drawing pixels, reading packed files.