Nội dung này đang được dịch và sẽ hiển thị ở đây khi sẵn sàng.
Solana dApp Store Publishing
The Solana dApp Store uses a fundamentally different model than traditional app stores. Instead of a database controlled by a company, your app's registry entry is an NFT on the Solana blockchain. You own it. No corporation can remove it without your private key.
This lesson covers the complete publishing flow: from minting your Publisher identity to submitting your first release.
Understanding the NFT Hierarchy
The dApp Store uses three layers of NFTs, built on Metaplex's Certified Collection standard:
Publisher NFT (your identity)
└── App NFT (your application)
└── Release NFT (each version)Publisher NFT
This is your identity as a developer or organization. You mint it once and use it for all your apps.
The Publisher NFT contains:
Your name/brand
Contact information
Website
An icon representing you (or your company)
Think of it as your developer account, except you own it cryptographically.
App NFT
Each application you publish gets its own App NFT, linked to your Publisher NFT via the Certified Collection standard. This proves that you (the Publisher) created this app.
The App NFT contains:
App name
Category (Games, DeFi, NFT, etc.)
Localized descriptions
Screenshots and promotional images
Links to your privacy policy and license
Release NFT
Each version of your app is a Release NFT linked to its App NFT. This contains:
The actual APK file (stored on distributed storage)
Version information
What's new in this release
Compatibility information
When you push an update, you mint a new Release NFT. The previous versions remain on-chain as historical record.
Setting Up for Publishing
There are two ways to publish to the Solana dApp Store:
Publisher Portal (Recommended): A web-based interface at publish.solanamobile.com
CLI: For automation and CI/CD integration
Publisher Portal (Recommended)
The Publisher Portal is the easiest way to submit your first app:
Sign up at publish.solanamobile.com
Complete KYC/KYB verification (required for all publishers)
Connect your publisher wallet (Phantom, Solflare, etc.)
Ensure ~0.2 SOL in your wallet for transaction fees and ArDrive storage costs
Select a storage provider (ArDrive is recommended)
CLI Setup (Advanced)
For automated publishing or CI/CD pipelines, use the dapp-store CLI.
# Check Node version - must be 18-21
node --version
# Create a directory for publishing
mkdir my-app-publishing
cd my-app-publishing
# Initialize and install
npm init -y
npm install --save-dev @solana-mobile/dapp-store-cli
# Initialize config
npx dapp-store initThis creates a config.yaml with the proper structure for your app metadata.
You'll need a keypair with SOL for minting NFTs. You can use your existing wallet or generate a dedicated publishing keypair.
Preparing Your APK
The dApp Store requires a properly signed release APK. Debug builds won't work.
Generate a signing key
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000Save this keystore file securely. If you lose it, you cannot update your app.
Configure Gradle for release signing
In your Android project's android/app/build.gradle:
// Add this inside the android block
signingConfigs {
release {
storeFile file("my-release-key.keystore")
storePassword System.getenv("KEYSTORE_PASSWORD") ?: ""
keyAlias "my-key-alias"
keyPassword System.getenv("KEY_PASSWORD") ?: ""
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}Build the release APK
cd android
# Set your passwords
export KEYSTORE_PASSWORD="your-secure-password"
export KEY_PASSWORD="your-secure-password"
# Build release APK
./gradlew assembleRelease
# Your APK will be at:
# android/app/build/outputs/apk/release/app-release.apkAPK Requirements
The dApp Store has specific requirements:
| Requirement | Value |
| Target SDK | Minimum Android API 33 (Android 13) |
| Build Type | Release (signed, not debug) |
| Min Size | No limit, but be reasonable |
| Architecture | arm64-v8a recommended (can include x86_64 for emulators) |
Asset Requirements
You'll need several visual assets for your listing.
Required images
| Asset | Size | Format | Purpose |
| App Icon | 512 × 512 px | PNG | Main store listing |
| Banner Graphic | 1200 × 600 px | PNG/JPG | Promotional banner (required) |
| Screenshots | Min 1080 × 1080 px | PNG/JPG | App functionality showcase |
Screenshot requirements
Minimum 4 screenshots or videos required
All images must be at least 1080px in width and height
Must show actual app functionality
Videos supported for showcasing app features
Optional assets
| Asset | Size | Purpose |
| Feature Graphic | 1200 × 1200 px | Editor's Choice consideration |
Create an assets folder
mkdir -p assets/screenshots
# Place your images:
# assets/app-icon.png (512x512)
# assets/banner.png (1200x600)
# assets/screenshots/screen1.png (min 1080x1080)
# assets/screenshots/screen2.png
# assets/screenshots/screen3.png
# assets/screenshots/screen4.png
# ... etcCreating Your Publisher NFT
With everything prepared, let's create your Publisher identity.
Via Publisher Portal (Recommended)
Go to publish.solanamobile.com
Sign up and complete KYC/KYB verification
Connect your wallet (Phantom, Solflare, etc.)
Fill out your publisher profile (name, website, contact)
The portal handles NFT minting automatically
Via CLI
# Validate your config first
npx dapp-store validate -k /path/to/keypair.json -b /path/to/android/build/tools
# Create publisher NFT
npx dapp-store create publisher -k /path/to/keypair.jsonThe CLI will:
Upload your publisher icon to ArDrive (decentralized storage)
Create the Publisher NFT metadata
Mint the Publisher NFT to your wallet
After minting, save your Publisher NFT address; you'll need it for creating apps.
Creating Your App NFT
With your Publisher NFT created, you can now register your app.
Via Publisher Portal
In the portal sidebar, click "Add a dApp" > "New dApp"
Fill out app details (name, description, category, etc.)
Upload your icon, banner, and screenshots
Save the form
Via CLI
# Create app under your publisher
npx dapp-store create app -k /path/to/keypair.json -u https://api.mainnet-beta.solana.comThe CLI validates that your app icon matches the icon in your APK, ensuring consistency.
App Categories
Choose the category that best fits your app:
Games: Gaming apps with Solana integration
DeFi: Decentralized finance applications
NFT: NFT marketplaces, galleries, minting apps
Social: Social media and communication
Utility: Tools and utilities
Other: Anything else
Submitting Your Release
Finally, submit your actual APK as a Release NFT.
Via Publisher Portal
Navigate to your app's Home menu in the sidebar
Click "New Version" in the top-right
Upload your release APK
Fill in version info and release notes
Click "Submit" and approve the wallet signing requests
Via CLI
# Create and submit release
npx dapp-store create release \
-k /path/to/keypair.json \
-b /path/to/android/build/tools \
-u https://api.mainnet-beta.solana.com
# Final submission with required attestations
npx dapp-store publish submit \
-k /path/to/keypair.json \
-u https://api.mainnet-beta.solana.com \
--requestor-is-authorized \
--complies-with-solana-dapp-store-policiesThe --requestor-is-authorized and --complies-with-solana-dapp-store-policies flags are legal attestations required for submission.
What happens during review?
The dApp Store team manually reviews each submission to ensure:
The app functions as described
No malware or malicious behavior
Compliance with the Publisher Policy
Screenshots accurately represent the app
Review typically takes 2-5 business days. You'll receive email notification of approval or rejection.
Updating Your App
When you release a new version, you mint a new Release NFT.
Via Publisher Portal
Go to your app in the sidebar
Click "New Version"
Upload the new APK with incremented version code
Fill in release notes
Submit and approve signing requests
Via CLI
# Build new APK with incremented version code
./gradlew assembleRelease
# Submit new release
npx dapp-store create release \
-k /path/to/keypair.json \
-b /path/to/android/build/tools \
-u https://api.mainnet-beta.solana.comThe previous version remains on-chain, but the dApp Store displays the latest release to users.
Version code requirements
Each release must have a higher versionCode than the previous release. This is enforced at the APK level:
// In android/app/build.gradle
android {
defaultConfig {
versionCode 2 // Increment this for each release
versionName "1.1.0"
}
}The Publisher Policy
The dApp Store has policies, but they're designed to protect users rather than extract rent.
Restricted content
These are not allowed:
Apps that facilitate illegal activity
Malware, spyware, or apps that abuse user data
Impersonation of other apps or developers
Apps that deceive users about their purpose
Required disclosures
If your app:
Handles user funds → disclose how keys are managed
Collects user data → provide a privacy policy
Connects to external services → disclose what data is shared
What IS allowed
Unlike traditional app stores:
Direct crypto payments (no platform fee)
Token reward mechanisms
NFT minting and trading
DeFi protocol integration
Any lawful Solana program interaction
Monitoring Your Listing
After your app is approved, you can verify it on-chain and monitor downloads.
Verify on-chain
Your App NFT is viewable on any Solana explorer:
# Get your app NFT address
npx dapp-store list apps
# View on Solscan
open "https://solscan.io/token/YOUR_APP_NFT_ADDRESS"Download analytics
The dApp Store provides basic analytics through the Publisher Dashboard (coming soon) or by querying on-chain data directly.
Common Issues and Solutions
"Package name mismatch"
Your APK's package name must match what you registered in the App NFT. Check your build.gradle:
android {
defaultConfig {
applicationId "com.yourcompany.yourapp"
}
}"APK is not release signed"
You're submitting a debug build. Make sure you're building with assembleRelease and that your signing config is correct.
"Version code must be higher"
You're trying to submit the same or lower version code. Increment versionCode in your build.gradle.
"Icon mismatch"
The icon in your APK doesn't match the icon you provided for the App NFT. Ensure consistency:
Update your APK's launcher icon
Rebuild the APK
Resubmit
Next Steps
You've now published to the Solana dApp Store: the most crypto-friendly distribution channel available.
But you probably also want to reach users on traditional app stores. The next lesson covers how to navigate Apple and Google's crypto-specific policies and get your app approved.