init generates an Android WebView project around your URL, and build produces a signed release APK you can publish on the dApp Store.
The generated project is a WebView shell, not a Trusted Web Activity
(TWA) — it needs no Digital Asset Links
setup. Links outside the configured host open in the system browser, and
Solana wallet intents are handled natively by the shell.
webshell init
Generate the Android project. Run it without arguments to be prompted for everything, or pass the values you already know:--force overwrites an existing directory.
If your app already has a web manifest, point --manifest at it — by path or URL — and the CLI seeds the app name, URL, and icons from it. A Bubblewrap twa-manifest.json works too, and also carries over the application id, versions, and signing key:
twa-manifest.json, so init can be re-run against it later.
Signing
init needs a signing keystore, and creates one when the path you give it does not exist yet. Set SOLANA_MOBILE_KEYSTORE_PASSWORD (and SOLANA_MOBILE_KEY_PASSWORD, if the key uses a different password) to skip the password prompt; otherwise you are asked for a password and a confirmation, since a typo produces a keystore you can never sign an update with. An existing keystore is reused as-is and needs no password until you build.
Options
webshell build
Build a signed release APK from a webshell project:app/build/outputs/apk/release/app-release.apk, ready to install on a device or submit to the dApp Store.
Signing passwords come from SOLANA_MOBILE_KEYSTORE_PASSWORD and SOLANA_MOBILE_KEY_PASSWORD so CI runs never prompt; when they are unset, the build asks for them.
