Skip to content

About

Classic Android in the browser: Gingerbread, Ice Cream Sandwich, Jelly Bean, KitKat and Lollipop on their own Nexus phones.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Android Simulator

Android Time Machine: the Nexus S, Galaxy Nexus, Nexus 4 and Nexus 5, each running its own Android version

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

Getting started

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.

Features per version

What each version does, screen by screen:

Social preview image

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.mjs

Search engines

robots.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

Adding a version

  1. Create a versions/<version>/ directory with its own index.html, CSS, JavaScript, and assets.
  2. Add an entry to versions/catalog.js with status: 'available' and a url pointing to the new directory.
  3. Run node docs/tools/make-sitemap.mjs so 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.

Checks

Every test runs with plain Node, without packages:

npm test

The 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:browser

Both 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.

License

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.

About

Classic Android in the browser: Gingerbread, Ice Cream Sandwich, Jelly Bean, KitKat and Lollipop on their own Nexus phones.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages