To convert HTML to APK you bundle the files inside the Android app instead of pointing it at a web address. Upload a single HTML5 file, or a ZIP of a static site with index.html at its root, and the pages are unpacked into the APK and served from the device — so the app opens instantly and works in airplane mode. The trade-off is that updating the content means building again, where a URL-based APK updates itself the moment you publish.
When to bundle, and when not to
| Bundle the files | Convert the URL instead |
|---|---|
| An HTML5 game, calculator or tool | A WordPress, Shopify, Wix or Webflow site |
| Course material, a catalogue, documentation | Anything with a login, cart or database |
| Content that is finished and rarely changes | Content that changes weekly |
| It must work with no connection | A connection is always available |
There is no wrong answer, only a maintenance cost: every content change in a bundled APK is a new build, a new version code, and — if it is on Google Play — a new review.
The file rules
index.htmlat the top level of the ZIP. Not inside a folder. If your export producessite/index.html, zip the contents ofsite, not the folder.- Relative paths only.
css/style.cssworks;/css/style.cssdoes not, because there is no web server inside an APK for the leading slash to resolve against. - Lowercase filenames. Android's filesystem is case-sensitive:
Logo.PNGandlogo.pngare different files, and a mismatch that works on Windows silently 404s on a phone. - Everything included. A font, icon set or script loaded from a CDN is a blank space the moment the device is offline — which is the whole reason you bundled.
- No
node_modules, source maps or.envfiles. Everything in the ZIP ships inside the APK and can be extracted by anyone who downloads it.
The rule that causes most blank screens
<script type="module"> is blocked on bundled file:// pages. Your JavaScript never runs, nothing is logged where you can see it, and the APK opens to a white screen. This is far and away the most common failure when converting HTML to APK, and it catches anything exported from a modern bundler in ESM mode.
The fix is to build to a classic script — every bundler has an option for it (Vite: build.rollupOptions.output.format: 'iife'; webpack and Parcel output classic scripts by default). Then re-test by opening the file directly from your own disk in a browser: if it works at file://, it works in the APK. The other eight causes →
Size limits
Free accounts can upload 5 MB of content and Pro raises it to 18 MB. Those are limits on your source files, not on the finished APK, and text compresses hard — a large documentation site is often a few hundred kilobytes. Images and video are what blow the budget: export photos as WebP at the size they are actually displayed, and link out to video rather than bundling it.
What bundled apps get for free
Because the content is local, a bundled APK opens instantly with no loading gap, needs no offline fallback page, and cannot be broken by your hosting going down. It also sidesteps the first question Google Play asks of a converted site — an app that works with no connection is doing something a bookmark cannot. Play's rules →
A quick checklist before you build
- Open
index.htmlstraight from your disk in Chrome. Does everything work, with no console errors? - Switch the network off and reload. Anything that disappears is a CDN link to inline or download.
- Check paths are relative and filenames are lowercase.
- Zip the contents, not the folder, and keep it under your tier's limit.
- Upload it in the builder, set a name, an icon and a package name, and build.