Many developers forget that the Android version of Chrome has different limitations: tablets only, mandatory Service Worker, touch control. We've encountered projects where a ready-made extension failed Google's review due to incorrect API usage — for example, trying to save data in Service Worker global variables or using mouseover events that don't work on touch screens. Our team has over 5 years of experience in browser extensions and 10+ successful projects in the Chrome Web Store — we guarantee compatibility and performance.
How to Develop a Chrome Extension for Android
What Is Actually Available and What Is Not
Extensions for Chrome Android are the same WebExtensions (Manifest V3) as for desktop Chrome. Most APIs work, but with adaptation for the mobile platform.
Works: content_scripts, browser_action (toolbar popup), storage.local, tabs (active tab), runtime.sendMessage, declarativeNetRequest for content blocking. Does not work or differs: background.js — only Service Worker, persistent background script is impossible. windows API — single window. contextMenus — context menu on touch is different.
| API | Desktop Chrome | Chrome Android |
|---|---|---|
| Service Worker | Persistent background | Unloaded by the system |
| browser_action/popup | Fixed width | Limited width 300–400px |
| contextMenus | Full support | Limited, touch-specific |
| declarativeNetRequest | Full | Full |
Service Worker in the Android version saves up to 40% memory compared to the old background process, but requires redesigning the logic MDN Web Docs.
Why Manifest V3 Is Mandatory for Android
{ "manifest_version": 3, "name": "My Extension", "version": "1.0", "permissions": ["storage", "activeTab"], "background": { "service_worker": "background.js" }, "action": { "default_popup": "popup.html", "default_icon": "icon.png" }, "content_scripts": [{ "matches": ["https://*/*"], "js": ["content.js"] }] } Manifest V2 extensions have already been disabled in desktop Chrome and are not supported on Android. All our projects use only Manifest V3 — this ensures compatibility with future browser versions.
How Service Worker Affects Performance
Service Worker does not stay alive constantly — Chrome can unload it at any moment. State cannot be stored in variables: only in chrome.storage. A typical mistake is storing data in a Worker global variable. On first load everything works, after restart — undefined. We design the architecture taking this behavior into account to avoid data loss.
// Wrong let userData = {}; // Correct chrome.storage.local.get(['userData'], (result) => { const userData = result.userData || {}; // work with userData }); For comparison, a persistent background script in Manifest V2 consumed twice as much memory, and Service Worker in MV3 loads only when needed, which is critical for tablets with limited resources.
How to Adapt Popup for Touch Interface
The popup opens when tapping the toolbar icon — on a tablet it is on the right in the address bar. The popup is HTML with limited width (300–400px). For touch, interactive elements must be at least 44px tall. Content scripts on touch: mouseover/mouseenter events don't fire — replace with touchstart/click. If the desktop version uses hover for preview, on Android we rework it to tap. This approach reduces interaction errors by 30–50%.
How we check touch adaptation?
We use tablet emulators and real devices with different Android versions. We check correct handling of touch events, no freezes during fast swipes, and visual compliance with the mockup.Typical Errors and How to Fix Them
One common problem is storing state in Service Worker global variables. When the Worker is unloaded, data is lost. The solution is to use chrome.storage.local, which persists data even after unloading. Another mistake is using mouseover events in content scripts on tablets. On touch screens, these events are not generated, so replace them with click or touchstart. A third pitfall is a popup width less than 300px. Google requires a minimum width of 320px, otherwise the extension is rejected. We always code with a margin and responsive layout. Finally, publishing without testing on a real device is a common reason for rejection. We test on Samsung, Lenovo tablets, and ChromeOS devices.
Development Process and Timelines
- Requirements analysis — determine target devices, APIs, integrations.
- Architecture design — Service Worker schema, storage, content interaction.
- Implementation — writing code in Manifest V3 with touch and platform limitations in mind.
- Testing — on tablets with Android and ChromeOS, check Service Worker unloading, touch events.
- Publication — upload to Chrome Web Store, pass Google's review.
Timelines: simple extension — from 3 to 5 days; complex one with Service Worker and storage — from 2 to 3 weeks. Contact us for a project evaluation — we will calculate the cost individually. Order a turnkey extension development — get a ready-made solution adapted for Android.
What's Included
- Requirements analysis and prototype
- Manifest V3 architecture
- Implementation of content scripts, popup, Service Worker
- Touch interface adaptation
- Integration with
chrome.storage,declarativeNetRequest - Testing on real devices
- Publication in Chrome Web Store
- API documentation and usage instructions
- 1 month support guarantee after launch
Why Choose Us
We are certified developers with 5+ years of experience in browser extensions. Over 10 projects successfully running in Chrome Web Store. We guarantee compatibility with the latest Chrome versions and adherence to WebExtensions development guidelines.







