Tutorial
How to Update a Published PWA in Google Play
August 19, 2026 · 7 min read
One of the greatest benefits of publishing a Progressive Web App (PWA) on the Google Play Store using a Trusted Web Activity (TWA) is the simplified update cycle. Unlike traditional native Android apps, which require you to compile, sign, and submit a new build for every small tweak, a TWA updates instantly whenever you deploy new code to your web server. However, this hybrid nature can cause confusion for developers who are unsure when a native app store update is actually required.
Understanding the dividing line between web-side updates and native-side updates is essential for maintaining your application on Google Play. This tutorial outlines what updates automatically, when you must rebuild your Android App Bundle (AAB), and how to manage the release pipeline efficiently.
Web Updates vs. Native Wrapper Updates
A TWA is essentially a highly specialised container that renders your web application directly inside a secure, full-screen browser window. Because the app content is loaded dynamically from your web server, any change to your website is immediately available to app users. These changes bypass the Google Play review process completely.
However, the container itself possesses native properties, configuration settings, and resource files that are compiled directly into the binary package. These native elements are static and cannot be changed by updating your web server. To modify any of these native properties, you must generate a new signed AAB and submit it to the Google Play Console for review.
When Do You Need to Rebuild and Resubmit?
To avoid wasting time on unnecessary store submissions, you must distinguish between changes that resolve dynamically and changes that are hardcoded into your wrapper. The following guidelines highlight when a native store submission is mandatory.
Changes That Do Not Require a Store Update
- User Interface Updates: Adjustments to HTML, CSS, Javascript, and external assets like images or web fonts.
- Business Logic Changes: Updates to frontend frameworks, API integration logic, authentication flows, or database structures on your backend.
- Web Manifest Updates: Changes to the web app manifest, such as shortcut menus, display configurations, or web page routing.
Changes That Require a New AAB Submission
- App Launcher Icon: The icon displayed on the Android home screen and app drawer is stored as a native asset inside the Android package.
- Native Splash Screen: The initial loading image and background colour displayed while the browser engine boots up.
- Domain Changes: If you move your web application to a new domain, you must update the launch URL inside the Android source code and establish new Digital Asset Links.
- App Name: The display name shown underneath the launcher icon on the device home screen.
- Android Target SDK Updates: Google Play requires apps to target recent Android SDK versions to maintain security compliance. These updates require upgrading your native build configurations.
Managing Android Version Codes and Version Names
When you do need to update the native wrapper, you must increment the application versioning parameters before building. Android uses two distinct values to track versions: the Version Code and the Version Name. If you attempt to upload an AAB with a Version Code that is equal to or lower than a previously approved build, the Google Play Console will reject the submission.
| Property Name | Value Type | Purpose | Example Value |
|---|---|---|---|
| versionCode | Integer | Internal sequence number used by Google Play to identify newer builds. Must always increase by at least 1. | 102 |
| versionName | String | The user-visible version string shown in the store listing and app settings. Can be updated freely. | 1.2.0 |
To prepare a wrapper update, open your build configurations, increment the versionCode integer, and update the versionName to match your release numbering system. Once these changes are made, build your signed production AAB.
Updating Native Assets: Icons, Splash Screens, and Metadata
If you are updating visual brand elements, you must replace the corresponding assets inside your Android project structure before compiling the new package.
Replacing Launcher Icons
Android devices use adaptive icons, which adapt to different manufacturer masks (circles, squares, squircles). These icons are stored in the drawable and mipmap directories of your Android project. Do not simply swap out a single PNG. Ensure you update the adaptive icon XML configurations and the respective foreground and background layers to prevent your icon from rendering with awkward borders on modern devices.
Updating Native Splash Screens
The native splash screen displays for a fraction of a second while the system browser loads your service worker and fetches your web page. It is defined in your Android styling XML files and associated drawable assets. To update it, replace the splash screen logo asset and, if necessary, adjust the hex code values in your colors.xml file to match your new corporate design.
Ensuring Instant Web Updates via the Service Worker
While web updates are deployed directly to your server, they are not always instantly visible to your users. This delay is usually caused by the caching behaviour of your Service Worker. If your Service Worker is configured to cache assets aggressively, users may continue to see the old version of your application until the service worker checks for updates and refreshes the cache.
To guarantee that web updates propagate quickly to your Android TWA users, implement a lifecycle management routine in your Service Worker:
- Use a Cache-First, Network-Update Strategy: Serve cached content instantly to keep the app loading fast, but always fetch the latest files in the background.
- Prompt Users to Update: When a new Service Worker is detected, show an in-app banner or toast notification letting users know a new version is available, prompting them to tap and reload the application.
- Set Appropriate HTTP Cache Headers: Ensure your main service worker file (typically
sw.js) is served with cache-control headers that prevent browsers from caching it permanently (such asCache-Control: no-cache, no-store, must-revalidate).
Testing Wrapper Updates Locally Before Production
Before uploading your new AAB to the Google Play Console production track, perform a local upgrade test on a physical Android device or emulator. This ensures that the update installs successfully over the existing version without breaking user sessions or losing local storage data.
Use ADB (Android Debug Bridge) to test the transition. Install your previous production-signed APK onto the device, generate your new updated APK using the same keystore, and run the installation command with the update flag:
adb install -r path/to/your/new-app.apk
Launch the application and verify that all configurations, launcher icons, and deep linking routes function perfectly. Once local verification is complete, you can confidently upload the new AAB to Google Play and submit it for store review.
Ready to ship your Android app?
Paste your PWA URL, get a signed APK and a Google Play ready AAB in minutes.
Build my app