Developing a Chrome Extension for Android
Chrome for Android supports extensions starting with Chrome 128 (August 2024)—only on tablets and ChromeOS. On smartphones, no support yet. First thing to understand before taking the task: target audience and devices are limited.
What's Actually Available and What's Not
Chrome Android extensions are the same WebExtension (Manifest V3) as desktop Chrome. Most APIs work, but with platform limitations.
Works: content_scripts, browser_action (toolbar popup), storage.local, tabs (active tab), runtime.sendMessage, declarativeNetRequest for content blocking.
Doesn't or works differently: background.js—only Service Worker. Persistent background script like MV2 isn't available. windows API—one window. contextMenus—touch context menu differs from desktop.
Manifest V3—Mandatory
{
"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"]
}]
}
MV2 extensions are already disabled in desktop Chrome and unsupported in Chrome Android.
Service Worker Instead of Background Page
Main architectural difference from desktop MV2: Service Worker doesn't live forever. Chrome can unload it anytime. Can't store state in variables—only in chrome.storage.
Typical bug: developer stores data object in Service Worker global variable. On first extension open everything works. On second (Service Worker restarted)—data lost, undefined.
// Wrong
let userData = {};
// Right
chrome.storage.local.get(['userData'], (result) => {
const userData = result.userData || {};
// work with userData
});
Touch-Specific Issues in Popup and Content Scripts
Extension popup opens when tapping toolbar icon. On Android tablet the icon is in the address bar on the right. Popup is regular HTML but with limited width: about 300–400px. Touch needs larger interactive elements—minimum 44px height.
Content scripts on touch pages: mouseover, mouseenter events don't fire. If desktop version uses hover for tooltips/previews—redesign for touchstart/click on Android.
Distribution
Chrome Android extensions publish to Chrome Web Store—no separate store. Same requirements as desktop. But Google separately tests Android behavior if the description claims Android support.
As of writing Chrome Android Extensions available experimentally via chrome://flags/#extension-mime-request-handling for development. In production—via Chrome Web Store.
Timeline depends on scope: simple popup and content script—3–5 days, complex with Service Worker, storage, nativeMessaging—2–3 weeks. Cost calculated individually.







