-
Notifications
You must be signed in to change notification settings - Fork 0
android deployment
Complete guide to deploying nChat Android application to Google Play Store.
- Prerequisites
- Google Play Console Setup
- Signing Configuration
- Building for Release
- Internal Testing
- Closed Beta Testing
- Open Beta Testing
- Production Release
- Automated Deployment
- Version Management
- Troubleshooting
- Operating System: macOS, Linux, or Windows
- Node.js: 20.0.0 or later
- pnpm: 9.15.4 or later
- Java JDK: 17 (OpenJDK or Oracle)
- Android Studio: Hedgehog (2023.1.1) or later
- Android SDK: API Level 34 (Android 14)
- Gradle: 8.0+ (bundled with Android Studio)
- Capacitor CLI: 6.x
-
Google Play Developer Account: $25 one-time fee
- Sign up at: https://play.google.com/console/signup
- Google Cloud Console Account: Free (for Firebase, Play Services)
- Firebase Account (optional): For push notifications and analytics
# Install Homebrew (macOS)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install Node.js
brew install node@20
# Enable corepack for pnpm
corepack enable
corepack prepare pnpm@9.15.4 --activate
# Install Java JDK 17
brew install openjdk@17
sudo ln -sfn $(brew --prefix)/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk
# Verify Java installation
java -version # Should show 17.x.x- Download from: https://developer.android.com/studio
- Install Android Studio
- Launch and complete setup wizard
- Install required SDK components:
- Android SDK Platform 34
- Android SDK Build-Tools 34.0.0
- Android SDK Platform-Tools
- Android Emulator
Add to ~/.zshrc or ~/.bash_profile:
# Android SDK
export ANDROID_HOME=$HOME/Library/Android/sdk
export ANDROID_SDK_ROOT=$ANDROID_HOME
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
# Java
export JAVA_HOME=$(/usr/libexec/java_home -v 17)Reload shell:
source ~/.zshrc # or source ~/.bash_profileVerify installations:
node --version # v20.x.x
pnpm --version # 9.15.4
java -version # 17.x.x
echo $ANDROID_HOME # Should show path
adb version # Android Debug Bridge version- Go to Google Play Console
- Sign in with Google account
- Click Create account
- Choose Organization or Individual
- Pay $25 one-time registration fee
- Complete account details:
- Developer name: nself
- Email address
- Phone number
- Website: https://nself.org
- Accept Developer Distribution Agreement
- Wait for account approval (usually instant, can take up to 48 hours)
- In Play Console, click Create app
- Configure app details:
- App name: nChat
- Default language: English (United States)
- App or game: App
- Free or paid: Free
- Declarations:
- β I acknowledge that this app complies with Google Play policies
- β I acknowledge that this app complies with US export laws
- Click Create app
Navigate to Store presence > Main store listing
App name: nChat
Short description (max 80 characters):
Team communication platform - messaging, calls, and collaboration
Full description (max 4000 characters):
nChat is a powerful, white-label team communication platform that brings together the best features of Slack, Discord, and Telegram into one unified experience.
π ENTERPRISE-GRADE SECURITY
β’ End-to-end encryption for sensitive conversations
β’ SOC 2 Type II compliance
β’ GDPR and HIPAA compliant options
β’ Single Sign-On (SSO) support
β’ Two-factor authentication (2FA)
π¬ ADVANCED COMMUNICATION
β’ Real-time messaging with threaded conversations
β’ Public and private channels
β’ Direct messages and group chats
β’ HD voice and video calls
β’ Screen sharing capabilities
β’ Voice messages and file sharing (up to 100MB)
β’ Message reactions and emoji support
π¨ FULLY CUSTOMIZABLE
β’ White-label branding options
β’ Custom themes and color schemes
β’ Configurable features per workspace
β’ Flexible role-based permissions
β’ Custom notification settings
π€ AI-POWERED FEATURES
β’ Smart message summarization
β’ Intelligent semantic search
β’ Auto-moderation and spam detection
β’ Sentiment analysis
β’ Smart reply suggestions
π± NATIVE MOBILE EXPERIENCE
β’ Push notifications (Firebase Cloud Messaging)
β’ Offline support - read and draft messages
β’ Biometric authentication (fingerprint/face)
β’ Rich media sharing
β’ Camera and gallery integration
β’ File attachment support
β’ Share to nChat from other apps
π STAY CONNECTED
β’ Customizable notification preferences
β’ Do Not Disturb modes with scheduling
β’ @mentions and keyword alerts
β’ Unread message tracking
β’ Badge counts
β’ Notification channels for granular control
π INTEGRATIONS
β’ Import from Slack
β’ GitHub notifications
β’ Jira issue tracking
β’ Google Drive file sharing
β’ Custom webhooks
β’ REST API access
β’ Zapier integration
β‘ PERFORMANCE
β’ Lightning-fast real-time messaging
β’ Optimized for mobile networks
β’ Low battery consumption
β’ Efficient data usage
β’ Background sync
β’ Offline message queue
π₯ COLLABORATION FEATURES
β’ User presence indicators
β’ Typing indicators
β’ Read receipts
β’ Message pinning
β’ File preview
β’ Link unfurling
β’ Code snippet formatting
π ACCESSIBILITY
β’ Multiple language support
β’ Screen reader compatibility
β’ High contrast themes
β’ Adjustable font sizes
β’ Keyboard navigation
β’ WCAG 2.1 compliant
Whether you're a startup, small business, or large enterprise, nChat provides all the tools you need for effective team communication and collaboration.
PERMISSIONS EXPLAINED:
β’ Camera: Take photos to share with your team
β’ Storage: Access files and images to share
β’ Microphone: Voice messages and calls
β’ Notifications: Stay updated with new messages
β’ Network: Real-time messaging and sync
β’ Contacts: Find teammates (optional)
SUPPORT:
Need help? Contact us at support@nchat.nself.org
Visit our help center: https://nchat.nself.org/help
PRIVACY:
We take your privacy seriously. Read our privacy policy at https://nchat.nself.org/privacy
Download nChat today and transform your team communication!
- Size: 512 x 512 pixels
- Format: PNG (32-bit with alpha)
- File size: Max 1MB
- Content: App icon only (no text, no borders)
# Generate from project
cp /Users/admin/Sites/nself-chat/public/icon-512.png ./app-icon.png- Size: 1024 x 500 pixels
- Format: PNG or JPEG
- File size: Max 1MB
- Content: Promotional banner
Create in design tool (Figma, Sketch, Photoshop):
- Background: Brand gradient or solid color
- Include app name: "nChat"
- Tagline: "Team Communication Reimagined"
- Optionally: Key features or screenshot
Phone Screenshots (Required):
- Quantity: Minimum 2, maximum 8
-
Size:
- Minimum dimension: 320px
- Maximum dimension: 3840px
- Aspect ratio: Between 16:9 and 2:1
- Recommended: 1080 x 2400 pixels (matches common Android phones)
Tablet Screenshots (Recommended):
- Quantity: Up to 8
- Size: 1800 x 2400 pixels or higher
Generate Screenshots:
# Using Android Emulator
cd /Users/admin/Sites/nself-chat
# Build app
pnpm build
cd platforms/capacitor
pnpm install
npx cap sync android
# Open in Android Studio
pnpm run open:android
# In Android Studio:
# 1. Run app on Pixel 6 Pro emulator (1080 x 2400)
# 2. Navigate to different screens
# 3. Take screenshots: Cmd+S or Tools > Screenshot
# 4. Screenshots saved to Desktop
# Recommended screenshots:
# 1. Channel list view
# 2. Message conversation
# 3. Voice/video call screen
# 4. File sharing interface
# 5. Settings/customization
# 6. Search results
# 7. Profile/account screen
# 8. Notification settingsScreenshot Tips:
- Use realistic sample data (not lorem ipsum)
- Show app with content (messages, channels)
- Consistent theme/branding
- Hide device frame (just app content)
- Add subtle text overlays highlighting features (optional)
- Length: 30 seconds to 2 minutes
- Format: MPEG, AVI, or WMV
- Resolution: At least 1920 x 1080
- File size: Max 100MB
Create promo video showing:
- App launch and onboarding
- Sending messages
- Making a call
- Sharing files
- Key features in action
- Navigate to Policy > App content > Content rating
- Click Start questionnaire
- Enter email address:
content-rating@nchat.nself.org - Select category: Communication
- Answer questions:
- Does app contain violence? No
- Does app contain sexual content? No
- Does app contain profanity? No (user-generated content is moderated)
- Does app contain controlled substances? No
- Does app have social features? Yes
- Does app allow user communication? Yes
- Does users share location? No (or Yes if location sharing enabled)
- Does app have in-app purchases? No (or Yes if premium features)
- Submit questionnaire
- Receive ratings (usually Everyone or Teen)
- Navigate to Policy > App content > Target audience
- Select age groups:
- β Ages 13-17
- β Ages 18+
- Click Next
- Does app appeal to children? No
- Save
- Navigate to Policy > App content > Privacy policy
- Enter URL:
https://nchat.nself.org/privacy - Ensure URL is accessible and contains:
- Data collection practices
- How data is used
- Third-party sharing
- User rights
- Contact information
Required since July 2022:
- Navigate to Policy > App content > Data safety
- Click Start
- Answer questions about data collection:
Data Collected:
-
Personal Info:
- β Name
- β Email address
- β User IDs
-
Messages:
- β Messages (chat messages)
- β Photos and videos
- β Audio files
-
App Activity:
- β App interactions
- β In-app search history
-
Device or Other IDs:
- β Device or other IDs
Data Usage:
- App functionality: β
- Analytics: β
- Personalization: β
- Account management: β
Data Sharing:
- Do you share data with third parties? Yes (Firebase, analytics)
- Select appropriate categories
Security:
- β Data is encrypted in transit (HTTPS/TLS)
- β Users can request data deletion
- β Committed to Google Play Families Policy (if targeting children)
- Preview data safety section
- Submit
- Navigate to Policy > App content > App access
- If app requires login:
- β All or some features require login
- Provide demo credentials:
Username/Email: reviewer@nchat.demo Password: PlayStore2024!
- Save
- Navigate to Policy > App content > Ads
- Does your app contain ads? No (select Yes if monetizing)
- Save
Android requires all APKs/AABs to be digitally signed.
# Navigate to Android directory
cd /Users/admin/Sites/nself-chat/platforms/capacitor/android
# Create keystore directory
mkdir -p keystore
# Generate keystore (valid for 10,000 days ~27 years)
keytool -genkey -v \
-keystore keystore/nchat-upload.jks \
-alias nchat \
-keyalg RSA \
-keysize 2048 \
-validity 10000
# You'll be prompted for:
# Keystore password: [Create strong password]
# Key password: [Same or different password]
# First and Last Name: nself
# Organizational Unit: Engineering
# Organization: nself
# City: [Your city]
# State: [Your state]
# Country Code: USCRITICAL: Backup this keystore file securely!
- Store in password manager
- Keep encrypted backup in cloud storage
- Never commit to git repository
- Losing this file means you cannot update your app
# Backup keystore
cp keystore/nchat-upload.jks ~/Backups/nchat-upload-$(date +%Y%m%d).jks
# Or encrypt and store
gpg -c keystore/nchat-upload.jks
# Move encrypted file to secure cloud storage# Create keystore.properties
cat > keystore.properties <<EOF
storePassword=YOUR_KEYSTORE_PASSWORD
keyPassword=YOUR_KEY_PASSWORD
keyAlias=nchat
storeFile=keystore/nchat-upload.jks
EOF
# Secure the file
chmod 600 keystore.properties
# Add to .gitignore
echo "keystore.properties" >> .gitignore
echo "keystore/" >> .gitignoreEdit android/app/build.gradle:
android {
...
// Load keystore properties
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
signingConfigs {
release {
if (keystorePropertiesFile.exists()) {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}Required for various integrations:
# SHA-1 fingerprint (for Firebase)
keytool -list -v \
-keystore keystore/nchat-upload.jks \
-alias nchat | grep SHA1
# SHA-256 fingerprint (for App Links)
keytool -list -v \
-keystore keystore/nchat-upload.jks \
-alias nchat | grep SHA256
# Save these values - needed for:
# - Firebase configuration
# - Google Sign-In
# - App Links verification# Navigate to project root
cd /Users/admin/Sites/nself-chat
# Install dependencies
pnpm install
# Build web assets
pnpm build
# Export static site
pnpm next export -o platforms/capacitor/out
# Navigate to Capacitor
cd platforms/capacitor
# Install Capacitor dependencies
pnpm install
# Sync to Android
npx cap sync androidEdit platforms/capacitor/android/app/build.gradle:
android {
defaultConfig {
applicationId "io.nself.chat"
minSdkVersion 24 // Android 7.0
targetSdkVersion 34 // Android 14
versionCode 1 // Increment for each release
versionName "0.8.0" // Semantic version
}
}Or use command line:
cd platforms/capacitor/android
# Update version name
sed -i '' 's/versionName ".*"/versionName "0.8.0"/' app/build.gradle
# Update version code
CURRENT_CODE=$(grep versionCode app/build.gradle | awk '{print $2}')
NEW_CODE=$((CURRENT_CODE + 1))
sed -i '' "s/versionCode .*/versionCode $NEW_CODE/" app/build.gradleProGuard obfuscates code and reduces APK size.
Edit android/app/proguard-rules.pro:
# Add project specific ProGuard rules here
# Capacitor
-keep class com.getcapacitor.** { *; }
-keep @com.getcapacitor.annotation.CapacitorPlugin class * { *; }
# Firebase
-keep class com.google.firebase.** { *; }
-dontwarn com.google.firebase.**
# OkHttp
-dontwarn okhttp3.**
-dontwarn okio.**
# Preserve line numbers for debugging
-keepattributes SourceFile,LineNumberTable
-renamesourcefileattribute SourceFile
Android App Bundle (AAB) is the recommended format for Play Store.
cd platforms/capacitor/android
# Clean previous builds
./gradlew clean
# Build release bundle
./gradlew bundleRelease
# Output location:
# app/build/outputs/bundle/release/app-release.aabUse APK for direct distribution (not Play Store):
cd platforms/capacitor/android
# Build release APK
./gradlew assembleRelease
# Output location:
# app/build/outputs/apk/release/app-release.apk# Check AAB details
bundletool build-apks \
--bundle=app/build/outputs/bundle/release/app-release.aab \
--output=app-release.apks \
--mode=universal
# Extract APK from bundle
unzip app-release.apks -d apks/
# Inspect APK
aapt dump badging apks/universal.apk | grep package
# Should show: package: name='io.nself.chat' versionCode='1' versionName='0.8.0'
# Check signing
jarsigner -verify -verbose -certs app/build/outputs/apk/release/app-release.apk
# Should show: jar verified.Install on Device:
# Via Android Studio
# Build > Generate Signed Bundle / APK
# Select APK > Next > Choose existing keystore
# Build > Install on device
# Via command line
adb install app/build/outputs/apk/release/app-release.apk
# Launch app
adb shell am start -n io.nself.chat/.MainActivityTest Checklist:
- App launches successfully
- Login/signup works
- Push notifications work
- Messages send/receive
- Voice/video calls work
- File upload/download works
- Offline mode works
- No crashes or ANRs
- Performance acceptable
- Battery usage reasonable
Internal testing allows quick distribution to up to 100 testers without review.
- In Play Console, navigate to Testing > Internal testing
- Click Create new release
- Upload AAB:
- Click Upload
- Select
app-release.aab - Wait for upload and processing (2-5 minutes)
Version 0.8.0 (Build 1)
NEW FEATURES:
β’ Real-time team messaging with threads
β’ HD voice and video calls
β’ AI-powered search
β’ Offline message support
β’ Biometric authentication
IMPROVEMENTS:
β’ Faster message loading
β’ Better notification reliability
β’ Improved battery efficiency
FIXES:
β’ Fixed crash when uploading large files
β’ Resolved video call connection issues
KNOWN ISSUES:
β’ Voice messages may have slight delay
β’ Dark theme refinements in progress
Please report bugs to: internal-testing@nchat.nself.org
- Click Save
- Click Review release
- Verify details
- Click Start rollout to Internal testing
- Click Testers tab under Internal testing
- Click Create email list
- Name: "Internal Team"
- Add tester emails (max 100):
alice@nself.org bob@nself.org charlie@nself.org - Save
- Copy share link (appears after saving)
- Testers receive invitation email
- Click invitation link
- Accept invitation
- Download app from Play Store
- App shows "Internal test" badge
Monitor internal testing:
- Crashes: Play Console > Quality > Android vitals
- Feedback: Testing > Internal testing > Feedback
- Metrics: Installs, crashes, ANR rate
Closed beta allows up to 2000 testers to test before public release.
- Navigate to Testing > Closed testing
- Click Create new release
- Upload AAB (same process as internal)
- Add release notes (similar to internal, but more polished)
- Click Save > Review release
- Click Start rollout to Closed testing
Method 1: Email List
- Click Testers tab
- Create email list
- Add up to 2000 emails
- Save
Method 2: Google Group
- Create Google Group: https://groups.google.com
- Add group email to Play Console
- Invite testers to join group
Method 3: Link Sharing
- Enable "Public link" in Testers settings
- Share link with beta testers
- Anyone with link can join (subject to capacity)
Google automatically tests your app:
- Navigate to Release > Production > Pre-launch report
- View automatic testing results:
- Crashes on various devices
- Screenshots from automated tests
- Performance metrics
- Accessibility issues
- Fix any critical issues before production
Open beta makes your app available to unlimited testers via Play Store.
- Navigate to Testing > Open testing
- Click Create new release
- Upload AAB
- Add release notes:
nChat Open Beta - Version 0.8.0
We're excited to invite you to test nChat!
NEW IN THIS VERSION:
β’ Real-time team messaging
β’ Voice and video calls
β’ Smart AI search
β’ Offline support
β’ Biometric security
This is a beta version - you may encounter bugs. Please help us improve by reporting issues!
Report bugs: beta@nchat.nself.org
Feedback: https://nchat.nself.org/feedback
Thank you for being part of our beta community!
- Save and start rollout
- Countries: Select countries for beta availability
- Feedback channel: Provide email or URL for feedback
- Testing period: Optionally set end date
After successful beta testing:
- Navigate to Testing > Open testing
- Click Promote release
- Select Production
- Review and confirm
- Navigate to Release > Production
- Click Create new release
- Upload AAB
- Add release notes (user-facing):
Welcome to nChat 0.8.0!
NEW FEATURES:
β¨ Real-time team messaging with threads
π HD voice and video calls
π AI-powered smart search
π΄ Offline message support
π Biometric authentication
IMPROVEMENTS:
β’ 50% faster message loading
β’ Enhanced push notifications
β’ Better battery efficiency
β’ Improved accessibility
BUG FIXES:
β’ Fixed large file upload issues
β’ Resolved video call connectivity
β’ Corrected notification badges
Thank you for using nChat! Questions? Visit nchat.nself.org/support
Release Options:
-
Full rollout (100%)
- Immediate availability to all users
- Recommended for minor updates
-
Staged rollout (Recommended)
- Gradual increase: 20% β 50% β 100%
- Monitor crash rates at each stage
- Halt rollout if issues detected
-
Halted rollout
- Release prepared but not started
- Start manually when ready
Select staged rollout:
- Select "Staged rollout"
- Set initial percentage: 20%
- Click Save
- Monitor for 24-48 hours
- Increase to 50% if stable
- Increase to 100% after another 24-48 hours
- Click Review release
- Verify all information:
- β Version code incremented
- β Version name correct
- β Release notes complete
- β Store listing updated
- β Rollout percentage set
- Click Start rollout to Production
Timeline:
- Under review: Usually 1-7 days (often 24-48 hours)
- Publishing: Minutes to 24 hours after approval
- Live: Available on Play Store
Status:
- Pending publication: In review queue
- Under review: Being reviewed
- Approved: Passed review
- Published: Live on Play Store
- Rejected: See rejection reason and fix
After publishing:
-
Crash rate: Monitor in Android vitals
- Target: <0.5% crash-free users
- Halt rollout if >2% crash rate
-
ANR rate: Application Not Responding
- Target: <0.1% ANR rate
- Check vitals dashboard
-
Ratings: Monitor user ratings and reviews
- Respond to negative reviews
- Thank users for positive feedback
-
Install metrics: Track installs and uninstalls
- Compare to previous versions
- Investigate unusual patterns
Install plugin to automate Play Store uploads:
Add to android/build.gradle:
buildscript {
dependencies {
classpath 'com.github.triplet.gradle:play-publisher:3.8.6'
}
}Add to android/app/build.gradle:
plugins {
id 'com.android.application'
id 'com.github.triplet.play'
}
play {
serviceAccountCredentials = file("../play-store-credentials.json")
track = "internal" // or 'beta', 'production'
releaseStatus = "completed"
}Deploy command:
./gradlew publishReleaseBundleThe project includes Android build workflow in .github/workflows/build-capacitor-android.yml.
Add in GitHub repository settings:
KEYSTORE_FILE # Base64-encoded keystore
KEYSTORE_PASSWORD # Keystore password
KEY_ALIAS # Key alias (nchat)
KEY_PASSWORD # Key password
PLAY_STORE_JSON_KEY # Service account JSON
- Go to Google Cloud Console
- Create or select project
- Navigate to IAM & Admin > Service Accounts
- Click Create Service Account
- Name: "GitHub Actions Deployment"
- Grant permissions in Play Console:
- Go to Play Console
- Settings > API access
- Link Cloud project
- Grant access to service account
- Permissions: Release manager
- Download JSON key
- Base64 encode and add to GitHub secrets:
base64 -i play-store-key.json | pbcopy
# Manual trigger
gh workflow run build-capacitor-android.yml \
-f build_type=release \
-f output_format=aab
# Automatic on push to main
git push origin mainInstall Fastlane:
brew install fastlaneInitialize:
cd platforms/capacitor/android
fastlane init
# Select option: 2. Automate beta distribution to Google Play
# Package Name: io.nself.chatEdit fastlane/Fastfile:
default_platform(:android)
platform :android do
desc "Deploy to Internal Testing"
lane :internal do
gradle(
task: "bundle",
build_type: "Release"
)
upload_to_play_store(
track: 'internal',
aab: 'app/build/outputs/bundle/release/app-release.aab',
skip_upload_metadata: true,
skip_upload_images: true,
skip_upload_screenshots: true
)
end
desc "Deploy to Closed Beta"
lane :beta do
gradle(task: "bundle", build_type: "Release")
upload_to_play_store(
track: 'beta',
aab: 'app/build/outputs/bundle/release/app-release.aab',
rollout: '0.2' # 20% rollout
)
end
desc "Deploy to Production"
lane :production do
gradle(task: "bundle", build_type: "Release")
upload_to_play_store(
track: 'production',
aab: 'app/build/outputs/bundle/release/app-release.aab',
rollout: '0.1', # 10% staged rollout
skip_upload_metadata: false,
skip_upload_images: false,
skip_upload_screenshots: false
)
end
endRun lanes:
fastlane internal # Deploy to internal testing
fastlane beta # Deploy to closed beta
fastlane production # Deploy to productionVersion Code: Integer that must increase with each release
- Internal: 1, 2, 3...
- Beta: 10, 11, 12...
- Production: 100, 101, 102...
Version Name: User-facing semantic version
- Format: MAJOR.MINOR.PATCH
- Example: 0.8.0, 0.8.1, 0.9.0
#!/bin/bash
# scripts/bump-android-version.sh
VERSION_NAME=$1
BUILD_GRADLE="platforms/capacitor/android/app/build.gradle"
if [ -z "$VERSION_NAME" ]; then
echo "Usage: ./bump-android-version.sh <version>"
exit 1
fi
# Get current version code and increment
CURRENT_CODE=$(grep versionCode $BUILD_GRADLE | awk '{print $2}')
NEW_CODE=$((CURRENT_CODE + 1))
# Update version name and code
sed -i '' "s/versionName \".*\"/versionName \"$VERSION_NAME\"/" $BUILD_GRADLE
sed -i '' "s/versionCode .*/versionCode $NEW_CODE/" $BUILD_GRADLE
echo "Updated to version $VERSION_NAME (code $NEW_CODE)"Usage:
chmod +x scripts/bump-android-version.sh
./scripts/bump-android-version.sh 0.8.1Error: "SDK location not found"
Solution:
# Create local.properties
echo "sdk.dir=$ANDROID_HOME" > platforms/capacitor/android/local.propertiesError: "Gradle sync failed"
Solution:
cd platforms/capacitor/android
./gradlew --stop
./gradlew clean
./gradlew buildError: "Duplicate class found"
Solution: Check for dependency conflicts in build.gradle:
// Add to app/build.gradle
configurations {
all*.exclude group: 'com.google.guava', module: 'listenablefuture'
}Error: "keystore not found"
Solution:
# Verify path in keystore.properties
cat keystore.properties
# Ensure keystore file exists
ls -la keystore/nchat-upload.jksError: "incorrect keystore password"
Solution:
# Test keystore manually
keytool -list -v -keystore keystore/nchat-upload.jks
# If forgotten, you must create new keystore
# Note: Cannot update existing app with new keystore!Error: "Version code X has already been used"
Solution: Increment version code in build.gradle
Error: "Upload certificate has fingerprint [...] but should have fingerprint [...]"
Solution:
# First upload must use upload certificate
# Cannot change certificate after first upload
# Verify you're using correct keystore
# Check fingerprint
keytool -list -v -keystore keystore/nchat-upload.jks | grep SHA256Error: "The apk must be signed with the same certificates as the previous version"
Solution: Use the same keystore for all versions. If lost, cannot update app.
App stuck "Under review"
- Normal review time: 1-7 days
- No expedited review available
- Check for rejection emails
- Contact support if >7 days
"Pre-launch report shows crashes"
Solution:
- Review crash stack traces
- Fix crashes in code
- Upload new version
- Pre-launch report updates automatically
Rejected for policy violation
Common issues:
- Missing privacy policy
- Inadequate data safety disclosures
- Misleading screenshots or description
- Violation of developer policies
Solution:
- Read rejection reason carefully
- Fix issues
- Reply in Policy Status section
- Upload corrected version
- Google Play Console Help
- Android Developers Documentation
- Capacitor Android
- Gradle Play Publisher
- Fastlane for Android
Document Version: 1.0.0 Last Updated: January 2026 Maintained By: nChat Team
For questions or issues, contact: devops@nchat.nself.org
nself-chat v0.3.0 | GitHub | Issues | Discussions | Demo
Edit this page | MIT License | Β© 2026
(See π Security section below for 2FA, PIN Lock, and security audits.)
(Search lives in π Reference below.)
- π¬ Advanced Messaging
- π E2EE Setup
- π Search Setup
- π Call Management
- πΊ Live Streaming
- π₯οΈ Screen Sharing
- πΉ Video Calling
- ποΈ Voice Calling
- π± Mobile Optimization
- π§ͺ Testing
- π i18n
- π API Overview
- π Complete Reference
- π» API Examples
- π€ Bot API
- π Auth API
- π GraphQL Schema
- π Deployment Overview
- π³ Docker
- βΈοΈ Kubernetes
- β Helm Charts
- β Production Checklist
- π Production Validation
- π’ Multi-Tenant
- ποΈ Architecture
- π Diagrams
- ποΈ Database Schema
- π Project Structure
- π TypeScript Types
- π SPORT Reference
- π 2FA
- π¬ Messaging
- π Call Management
- π Call State Machine
- π E2EE
- πΊ Live Streaming
- π± Mobile Calls
- π PIN Lock
- π Polls
- π₯οΈ Screen Sharing
- π Search
- π Social Media
- ποΈ Voice Calling
- π Security Overview
- π‘οΈ Security Audit
- β‘ Performance
- π Best Practices
- π 2FA
- π PIN Lock
- π E2EE
- π‘οΈ E2EE Audit
v1.0.0 β’ 2026