Instala Node.js
Instala Bubblewrap:
npm install -g @bubblewrap/cli
Ubícate en la carpeta de tu proyecto
Crear el archivo twa-manifest.json
{
"packageId": "com.myapp",
"host": "myapp.com",
"name": "My App",
"launcherName": "My App",
"display": "standalone",
"themeColor": "#1F4D9D",
"themeColorDark": "#000000",
"navigationColor": "#FFFFFF",
"navigationColorDark": "#000000",
"navigationDividerColor": "#000000",
"navigationDividerColorDark": "#000000",
"backgroundColor": "#FFFFFF",
"enableNotifications": true,
"startUrl": "/",
"iconUrl": "ruta/imagen-512x512.png",
"splashScreenFadeOutDuration": 3000,
"signingKey": {
"path": "ruta/keystore.jks",
"alias": "alias",
"password": "",
"keyPassword": ""
},
"appVersionName": "2",
"appVersionCode": 17,
"shortcuts": [],
"generatorApp": "bubblewrap-cli",
"fallbackType": "customtabs",
"features": {},
"alphaDependencies": {
"enabled": false
},
"enableSiteSettingsShortcut": true,
"isChromeOSOnly": false,
"isMetaQuest": false,
"minSdkVersion": 19,
"orientation": "portrait",
"fingerprints": [],
"additionalTrustedOrigins": [],
"retainedBundles": [],
"appVersion": "2"
}
Verificar archivo gradle.properties
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
org.gradle.jvmargs=-Xmx1048m
android.useAndroidX=true
Ejecutar
bubblewrap build

Ubica el archivo APK: El archivo APK generado se encontrará en la carpeta de tu proyecto. Por lo general, se ubicará en la subcarpeta outputs dentro de la carpeta de tu proyecto.