> ## Documentation Index
> Fetch the complete documentation index at: https://docs.solanamobile.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Publishing from Google Play to the dApp Store

> Learn how to publish your existing Google Play app to the dApp Store.

## Overview

Publishing your existing Google Play app to the dApp Store requires:

1. A release APK file signed with a **new, unique signing key** (different from Google Play)
2. 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

<Warning>
  **CRITICAL REQUIREMENT**:

  You cannot use the same signing key for both Google Play and the dApp Store.
</Warning>

## Build Your APK

### 1. Create New Signing Key

Generate a new signing key exclusively for the dApp Store:

```bash theme={null}
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](https://developer.android.com/studio/publish/app-signing).

### 2. Build Signed APK

<Tabs>
  <Tab title="Native Android" icon="android">
    **1.** Configure dual-store setup in `app/build.gradle` using product flavors:

    ```js theme={null}
    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:

    ```bash theme={null}
    ./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.apk`

    For reference, view the [Android signing documentation](https://developer.android.com/studio/publish/app-signing#gradle-sign).
  </Tab>

  <Tab title="Expo" icon="folders">
    **1.** Configure `eas.json` with local credentials for dApp Store builds:

    ```json theme={null}
    {
      "build": {
        "dapp-store-production": {
          "android": {
            "buildType": "apk",
            "credentialsSource": "local"
          }
        }
      }
    }
    ```

    **2.** Create `credentials.json` with your dApp Store keystore details:

    ```json theme={null}
    {
      "android": {
        "keystore": {
          "keystorePath": "./dappstore.keystore",
          "keystorePassword": "your-keystore-password",
          "keyAlias": "dappstore",
          "keyPassword": "your-key-password"
        }
      }
    }
    ```

    <Warning>
      **Security**

      Store `credentials.json` securely and add it to `.gitignore` to prevent accidental commits to source control.
    </Warning>

    <Tabs>
      <Tab title="EAS Build (Cloud)">
        **3.** Build the dApp Store APK in the cloud using local credentials:

        ```bash theme={null}
        eas build --platform android --profile dapp-store-production
        ```
      </Tab>

      <Tab title="Local Build">
        **3.** Build the dApp Store APK entirely on your machine using local credentials:

        ```bash theme={null}
        eas build --platform android --profile dapp-store-production --local
        ```
      </Tab>
    </Tabs>

    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](https://docs.expo.dev/app-signing/local-credentials/#credentialsjson).
  </Tab>
</Tabs>

### 3. Verify APK

Confirm your APK is properly signed before submission:

```bash theme={null}
apksigner verify --print-certs app-release.apk
```

For reference, view the [apksigner documentation](https://developer.android.com/studio/command-line/apksigner#usage-verify).

## Next Steps

With your signed APK ready, follow the standard dApp Store publishing process and [Submit your app](/dapp-store/submit-new-app)

## Additional Resources

* [Publisher Policy](/dapp-store/publisher-policy) - Review dApp Store requirements
* [Support](/dapp-store/support) - Get help with publishing issues
