Overview
Open Mushaf Native uses Expo Application Services (EAS) for Android builds. You can build locally or in the cloud, and submit to Google Play Store’s internal testing or production tracks.
Prerequisites
Configure Project
Ensure your app.json has the correct Android configuration: {
"expo" : {
"android" : {
"package" : "com.adelpro.openmushafnative" ,
"adaptiveIcon" : {
"foregroundImage" : "./assets/images/adaptive-icon.png" ,
"backgroundColor" : "#ffffff"
},
"edgeToEdgeEnabled" : true ,
"jsEngine" : "hermes" ,
"playStoreUrl" : "https://play.google.com/store/apps/details?id=com.adelpro.openmushafnative"
}
}
}
Build Profiles
The project uses two build profiles defined in eas.json:
Preview Profile
Builds an APK for internal testing and distribution:
"preview" : {
"android" : {
"buildType" : "apk" ,
"distribution" : "internal" ,
"resourceClass" : "medium" ,
"image" : "latest"
},
"channel" : "preview"
}
Production Profile
Builds an AAB (Android App Bundle) for Play Store submission:
"production" : {
"android" : {
"buildType" : "app-bundle" ,
"resourceClass" : "medium" ,
"image" : "latest"
},
"channel" : "production" ,
"autoIncrement" : true
}
Building for Android
Cloud Builds
Preview (APK)
Production (AAB)
yarn android:build:preview
# or
eas build -p android --profile preview
Local Builds
For faster builds without using EAS cloud resources:
Preview APK (Local)
Production AAB (Local)
yarn android:build:preview:local
# Outputs to: builds/app-preview.apk
Local builds require Android Studio and all necessary build tools installed on your machine.
Play Store Submission
Internal Testing Track
Submit the latest production build to internal testing:
yarn android:submit:internal
# or
eas submit -p android --profile internal --latest
Production Track
Submit a specific AAB file to production:
yarn android:submit:production
# or
eas submit -p android --profile production --path builds/app-production.aab
Combined Build and Submit
Internal Testing
Production
yarn android:build-submit:internal:local
# Builds production AAB locally, then submits to internal testing
Development Builds
For local development and testing:
yarn android
# or
expo run:android -d
The -d flag automatically selects a connected device or emulator.
Build Optimizations
The app includes the following optimizations configured in app.json:
Hermes Engine : Enabled for better performance
ProGuard : Enabled in release builds for code shrinking
Resource Shrinking : Removes unused resources from the final APK/AAB
New Architecture : React Native’s new architecture is enabled
{
"expo" : {
"newArchEnabled" : true ,
"plugins" : [
[
"expo-build-properties" ,
{
"android" : {
"enableProguardInReleaseBuilds" : true ,
"enableShrinkResourcesInReleaseBuilds" : true
}
}
]
]
}
}
App Links Configuration
The app supports Android App Links for deep linking:
"intentFilters" : [
{
"action" : "VIEW" ,
"data" : {
"scheme" : "https" ,
"host" : "quran.us.kg" ,
"pathPrefix" : "/"
},
"category" : [ "BROWSABLE" , "DEFAULT" ],
"autoVerify" : true
}
]
Troubleshooting
Build Failures
Clear the build cache:
eas build:clear-cache -p android
Check your credentials:
Local Build Issues
Clean the prebuild folder:
Ensure Android SDK is properly configured: