tools / configure

Android permission scanner

Switch on a permission your site does not use and Google Play asks you to justify it; forget one it does use and the feature silently fails. This reads your code and tells you exactly which switches to flip — and which web APIs simply do not exist inside an app's WebView.

Scan a ZIP

Searches HTML and JavaScript (including minified bundles) for the calls that need a device capability.

Drop a site ZIP, or .html / .js files .zip, .html, .js · read locally

Web APIs, Android permissions and the switch in between

On a website, the browser asks the user for camera or location access and that is the end of it. In an app there are two gates. The APK has to declare the Android permission, and the app has to request it at runtime before the WebView is allowed to pass the page's request through. The builder handles both in its Permissions step (a Pro feature) — you only choose which capabilities the app should have. Choosing correctly matters in both directions:

  • Too few: getUserMedia() rejects with NotAllowedError, getCurrentPosition() calls its error callback, and unless your code handles those, the feature just does nothing.
  • Too many: Google Play's review asks why a recipe app wants the microphone, the Data safety form grows, and users see a permission prompt that erodes trust.

Reading the results

BadgeMeaning
switch onYour code uses this capability. Turn on the matching permission (Camera, Microphone or Location) in the builder's Permissions step, which is part of Pro.
worksAvailable in the app with no permission — clipboard writes, sensors, storage.
caveatWorks partly or depends on the device. Treat it as an enhancement, not a requirement.
not in WebViewThe API exists in Chrome but not in Android's WebView. Feature-detect it (if ('share' in navigator)) and provide a fallback.

The APIs that surprise people

Notifications. Notification.requestPermission() and Web Push are the most common "works on the website, not in the app" feature. A WebView has no notification system of its own; apps use native push instead, which the builder provides on Pro.

Web Share. navigator.share is undefined in a WebView even though it works in Chrome on the same phone. A share button written without a check throws and can take the rest of a click handler with it.

Downloads. A link with the download attribute, or a blob URL generated for an export, has no download manager to hand off to. The links and downloads doc covers what does work.

Speech recognition. The Web Speech API's recognition half is not implemented in WebView. Recording with MediaRecorder (Microphone permission) and sending audio to a speech-to-text service does work.

Limits of a static scan

The scanner matches source patterns, so it reads minified bundles fine but cannot follow code that is loaded at runtime from another server, and can occasionally flag a library that contains a capability you never call. When in doubt, search your own code for the API name, and test the feature on a phone in the built app.

Frequently asked questions

Does a file upload button need the storage permission?

No. In Pro builds an <input type="file"> opens Android's system picker, which hands the chosen file to the app without any storage or media permission; only the capture shortcut that opens the camera directly uses the Camera permission. Free builds do not handle file inputs.

Why doesn't navigator.share work in my app?

Android WebView does not implement the Web Share API; it is a Chrome browser feature. Detect it with 'share' in navigator and fall back to copying the link or opening a share URL such as https://wa.me/?text=…

Can my web app send notifications?

Not with the web Notification or Push APIs — they need a browser's notification service. The builder's push notifications (Pro) are native Android notifications sent through OneSignal and work whether or not the page is open.

I switched on Location but it still fails — why?

The user can deny the prompt the app shows at launch, and location services can be off system-wide. Always handle the error callback of getCurrentPosition, explain in the page what the location is for, and test on a real phone before you ship.

Read in the docs

Related tools

Unzip it on a phone today

Upload the ZIP, name the app, pick an icon — and download a signed APK a few minutes later. Free builds, no watermark, no Android Studio.

Convert a ZIP — free site.zip → app-release.apk