Overview
Publishing your existing Google Play app to the dApp Store requires:
- A release APK file signed with a new, unique signing key (different from Google Play)
- Following the standard dApp Store publishing workflow
Key differences from Google Play:
- File Format: dApp Store submission requires APK files (Google Play uses AAB)
- Signing Key: Must use a completely separate signing key from Google Play
- In-App Purchases: No 30% tax on in-app purchases or transactions
CRITICAL REQUIREMENT:You cannot use the same signing key for both Google Play and the dApp Store.
Build Your APK
1. Create New Signing Key
Generate a new signing key exclusively for the dApp Store:
keytool -genkey -v -keystore dappstore.keystore \
-alias dappstore \
-keyalg RSA \
-keysize 2048 \
-validity 10000
Store the keystore file and passwords securely - losing them means you cannot update your app.
For reference, view the Android app signing guide.
2. Build Signed APK
1. Configure dual-store setup in app/build.gradle using product flavors:android {
signingConfigs {
// Existing Google Play signing config
googlePlay {
storeFile file("keystores/googleplay.keystore")
storePassword "your_googleplay_keystore_password"
keyAlias "googleplay"
keyPassword "your_googleplay_key_password"
}
// dApp Store signing config
dappStore {
storeFile file("keystores/dappstore.keystore")
storePassword "your_dappstore_keystore_password"
keyAlias "dappstore"
keyPassword "your_dappstore_key_password"
}
}
flavorDimensions = ['store']
productFlavors {
googlePlay {
dimension 'store'
}
dappStore {
dimension 'store'
}
}
buildTypes {
release {
// Assign signing configs to each flavor
productFlavors.googlePlay.signingConfig signingConfigs.googlePlay
productFlavors.dappStore.signingConfig signingConfigs.dappStore
}
}
}
2. Build the dApp Store APK:./gradlew assembleDappStoreRelease
3. Alternatively, build using Android Studio IDE: Build → Select Build Variant → dappStoreRelease → Build APK.Your dApp Store APK will be at app/build/outputs/apk/dappStore/release/app-dappStore-release.apkFor reference, view the Android signing documentation. 1. Configure eas.json with local credentials for dApp Store builds:{
"build": {
"dapp-store-production": {
"android": {
"buildType": "apk",
"credentialsSource": "local"
}
}
}
}
2. Create credentials.json with your dApp Store keystore details:{
"android": {
"keystore": {
"keystorePath": "./dappstore.keystore",
"keystorePassword": "your-keystore-password",
"keyAlias": "dappstore",
"keyPassword": "your-key-password"
}
}
}
SecurityStore credentials.json securely and add it to .gitignore to prevent accidental commits to source control.
EAS Build (Cloud)
Local Build
3. Build the dApp Store APK in the cloud using local credentials:eas build --platform android --profile dapp-store-production
3. Build the dApp Store APK entirely on your machine using local credentials:eas build --platform android --profile dapp-store-production --local
This approach lets you use EAS-managed credentials for Google Play and local credentials for the dApp Store.For reference, view the Expo local credentials documentation.
3. Verify APK
Confirm your APK is properly signed before submission:
apksigner verify --print-certs app-release.apk
For reference, view the apksigner documentation.
Next Steps
With your signed APK ready, follow the standard dApp Store publishing process and Submit your app
Additional Resources