Android SDK v10 Migration Guide
This guide upgrades Embedded Wallets Android SDK integrations from v4 through v9 directly to v10.
AI-assisted migration
For the best results, install the MetaMask Embedded Wallets skill and MCP server before
you migrate.
See Build with AI for setup (npx skills add web3auth/skill and
MCP at https://mcp.web3auth.io).
Copy the prompt below into your AI coding assistant (Cursor, Claude Code, Codex, Antigravity, or similar):
Migrate my MetaMask Embedded Wallets Android (web3auth-android-sdk) project to v10.
Before changing code:
1. Use the web3auth skill and MCP tools (search_docs, get_doc, get_example, get_sdk_reference).
2. Read the migration guide: https://docs.metamask.io/embedded-wallets/migration-guides/android
3. Detect my current SDK version from build.gradle and list which breaking changes apply.
Then migrate my codebase directly to v10:
- Update the JitPack dependency to com.github.web3auth:web3auth-android-sdk:10.0.1 (or latest v10).
- Set compileSdk and targetSdk to 34.
- Add mandatory redirectUrl to Web3AuthOptions ({YOUR_APP_PACKAGE_NAME}://auth).
- Update AndroidManifest.xml (allowBackup=false, tools:replace, deep link intent filter, singleTop).
- Replace login() with connectTo() and Provider with AuthConnection.
- Replace Network with Web3AuthNetwork, loginConfig with authConnectionConfig, and buildEnv with authBuildEnv.
- Replace getPrivKey() with getPrivateKey() and getEd25519PrivKey() with getEd25519PrivateKey().
- Replace launchWalletServices() with showWalletUI() and remove ChainConfig parameters.
- Update request() to pass only method and requestParams; remove ChainConfig.
- Replace getSignResponse() with the SignResponse returned from request() (if still on v9 patterns).
- Update WhiteLabelData fields (appName, mode, buildEnv) if whitelabeling is configured.
- Configure chains in the Embedded Wallets dashboard; v10 reads chain config from the dashboard.
- Do not change my Client ID or Sapphire network unless I ask; that would change wallet addresses.
After migrating, list every file you changed and any manual dashboard steps I still need to do.
Use planning mode (where available) for the initial prompt. Review the plan before generating code; config mistakes can change wallet addresses in production.
Install v10
Add JitPack to your project-level build.gradle if it is not already present:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url "https://jitpack.io" }
}
}
Update the dependency in your app-level build.gradle:
dependencies {
implementation 'com.github.web3auth:web3auth-android-sdk:10.0.1'
}
Set compileSdk and targetSdk to 34:
android {
compileSdk 34
defaultConfig {
minSdk 24
targetSdk 34
}
}
Allowlist {SCHEME}://{YOUR_APP_PACKAGE_NAME} on the
Embedded Wallets dashboard.
Breaking changes
Apply the sections below that match your current version. If you're already on v9, focus on the v10 changes.
Network and SDK requirements (from v5)
Use Sapphire networks instead of legacy OpenLogin networks.
In v10, Network becomes Web3AuthNetwork:
import org.torusresearch.fetchnodedetails.types.Web3AuthNetwork
val web3Auth = Web3Auth(
Web3AuthOptions(
clientId = getString(R.string.web3auth_project_id),
web3AuthNetwork = Web3AuthNetwork.SAPPHIRE_MAINNET, // or Web3AuthNetwork.SAPPHIRE_DEVNET
redirectUrl = "{YOUR_APP_PACKAGE_NAME}://auth",
),
this
)
Add authBuildEnv when you need a non-production auth environment:
authBuildEnv = BuildEnv.PRODUCTION // PRODUCTION, STAGING, or TESTING
Whitelabel configuration (from v5)
WhiteLabelData field names changed:
| v4 and earlier | v5 and later |
|---|---|
name | appName |
dark | mode (ThemeModes.LIGHT, ThemeModes.DARK, or auto) |
New optional fields include appUrl and useLogoLoader.
Prefer dashboard customization for new projects.
Mandatory redirect URL (from v7.4)
redirectUrl is required in Web3AuthOptions.
In v10, pass it as a String instead of a Uri:
redirectUrl = "{YOUR_APP_PACKAGE_NAME}://auth"
AndroidManifest changes (from v7.1.2)
From v7.1.2, set android:allowBackup to false and add tools:replace:
<application
android:allowBackup="false"
tools:replace="android:fullBackupContent"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher">
</application>
Set your main activity launchMode to singleTop and add the deep link intent filter.
See the Android SDK get started for the full manifest setup.
launchWalletServices signature (from v7.2)
From v7.2 through v9, remove loginParams and pass only chainConfig:
val launchWalletCompletableFuture = web3Auth.launchWalletServices(
chainConfig = ChainConfig(
chainId = "0x1",
rpcTarget = "https://rpc.ethereum.org",
ticker = "ETH",
chainNamespace = ChainNamespace.EIP155,
)
)
In v10, replace launchWalletServices() with showWalletUI() and remove ChainConfig.
See v10 changes.
request signature (from v7.3)
From v7.3 through v9, remove loginParams and pass chainConfig, method name, and request
parameters:
val params = JsonArray().apply {
add("Hello, World!")
add(address)
}
val signMsgCompletableFuture = web3Auth.request(
chainConfig = ChainConfig(
chainId = "0x1",
rpcTarget = "https://rpc.ethereum.org",
ticker = "ETH",
chainNamespace = ChainNamespace.EIP155,
),
"personal_sign",
requestParams = params,
)
In v10, remove chainConfig from request().
See v10 changes.