Live demo: android.levente.net
An interactive browser simulator of classic Android releases, each on its own Nexus phone and rebuilt from AOSP sources, the phones' factory images and period screenshots. Choose a version on the landing page:
| Version | Phone | Store |
|---|---|---|
| Android 2.3.6 Gingerbread | Nexus S | Android Market 2.3.4 |
| Android 4.0.4 Ice Cream Sandwich | Galaxy Nexus | Google Play Store 3.4.7 |
| Android 4.3 Jelly Bean | Nexus 4 | Google Play Store 4.2.3 |
| Android 4.4.4 KitKat | Nexus 5 (Google apps) | Google Play Store 4.5.10 |
| Android 5.1.1 Lollipop | Nexus 6 (Google apps) | Google Play Store 5.2.13 |
Live demo: android.levente.net, served as a static site from a checkout of main. A mirror runs on GitHub Pages.
GitHub Pages publishes the repository root from the main branch automatically after each push. The .nojekyll file keeps this plain static site out of Jekyll processing. Deployment progress is available in the repository's Actions tab, and the publishing source is configured under Settings → Pages.
The project uses static HTML, CSS, and JavaScript. No installation or build step is required. Open index.html, or start a local server from the project root:
php -S 127.0.0.1:8090 -t .Then visit http://127.0.0.1:8090/. With XAMPP, place the repository in htdocs/android-simulator.
What each version does, screen by screen:
- Android 2.3.6 Gingerbread on the Nexus S (the audit doubles as its feature list)
- Android 4.0.4 Ice Cream Sandwich on the Galaxy Nexus
- Android 4.3 Jelly Bean on the Nexus 4
- Android 4.4.4 KitKat on the Nexus 5, with the stock Google apps
- Android 5.1.1 Lollipop on the Nexus 6, as its LMY48Y factory image ships it
assets/og-cover.jpg (1200 × 630) is the og:image of every page. Its source is docs/tools/og-cover.html, which lays out the phones from each version's frame and landing-home.jpg. To redraw it after a change, for example when a new version gets a landing shot, run the command below. It needs only Node and a local Chrome, or set CHROME to point at one. Then bump the ?v= of og-cover.jpg in the og:image tags.
The portfolio card on levente.net uses a 1600 × 960 variant with an English headline, from docs/tools/portfolio-cover.html: node docs/tools/make-og-cover.mjs --portfolio <png> renders it (1200 × 720 at a 4/3 device pixel ratio).
node docs/tools/make-og-cover.mjsrobots.txt allows every crawler and points to sitemap.xml. The sitemap is a static file that lists the landing page and each available version from versions/catalog.js. Each lastmod is the date of the last commit that changed that page. Regenerate it after committing page changes, then commit the new sitemap.xml:
node docs/tools/make-sitemap.mjs- Create a
versions/<version>/directory with its ownindex.html, CSS, JavaScript, and assets. - Add an entry to
versions/catalog.jswithstatus: 'available'and aurlpointing to the new directory. - Run
node docs/tools/make-sitemap.mjsso that the sitemap lists the new version.
Each version keeps its interface and saved state separate, so adding a release does not change the ICS simulation.
Every test runs with plain Node, without packages:
npm testThe browser flows open each version in headless Chrome (boot, unlock, an app, Back, the power menu, a language switch
and a reload, at desktop and phone width) against a server for the repository root, e.g. php -S localhost:8090 -t .:
npm run test:browserBoth run on every push (.github/workflows/tests.yml). The text, asset and font checks (npm run check:texts,
check:assets, check:fonts) write their reports to docs/reports/; how the factory images are unpacked and the generated
files rebuilt is in docs/sources.md; how the code is laid out and where to change an app is in
docs/architecture.md.
For AOSP asset sources and licenses, see THIRD_PARTY_NOTICES.md. Comparisons with the original interfaces and the remaining differences are in the visual audits: 2.3, 4.0.4, 4.3 and 4.4.
Copyright © 2026 Levente Szabó (szabolevi98).
The project's original source code is licensed under the GNU Affero General Public License, Version 3 only (AGPL-3.0-only). See LICENSE for the full terms.
If you make a modified version available to users over a network, you must prominently offer those users free access to that version's complete corresponding source code, as required by section 13. The source code is available in this repository.
Third-party code, artwork, fonts and other assets remain subject to their own licenses and terms; they are not relicensed under the AGPL. See THIRD_PARTY_NOTICES.md. Android and Google trademarks remain with their respective owners.
