Repository navigation
Build from Source
This page explains how to build and sign the app yourself. The project was created with an older Android toolchain (2020), so read the notes about Gradle, repositories and the missing wrapper scripts before you start.
| Component | Version in the repository | Where |
|---|---|---|
| Android Gradle Plugin | 3.6.1 |
build.gradle |
| Gradle | 5.6.4 |
gradle/wrapper/gradle-wrapper.properties |
| Kotlin Gradle plugin |
1.3.61 (classpath only; sources are Java) |
build.gradle |
| compileSdk / targetSdk | 28 |
app/build.gradle |
| minSdk | 21 |
app/build.gradle |
| Build tools | 28.0.3 |
app/build.gradle |
| Java | 1.8 |
app/build.gradle, CI workflow |
The repository includes gradle/wrapper/gradle-wrapper.properties but not gradlew, gradlew.bat or gradle-wrapper.jar. Either:
-
open the project in Android Studio and let it sync, or
-
generate the wrapper with a local Gradle installation:
gradle wrapper --gradle-version 5.6.4
gradle.properties contains:
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8090If you do not run a proxy on that address, remove these two lines, otherwise dependency downloads fail.
build.gradle uses google(), jcenter(), mavenCentral(), https://maven.fabric.io/public and https://jitpack.io. JCenter and Fabric are retired services; if a dependency cannot be resolved, replace those repositories and update the dependency versions accordingly.
app/build.gradle loads keystore.properties from the project root on every build:
def keystorePropertiesFile = rootProject.file("keystore.properties");
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))Create the file:
storeFile=/absolute/path/to/your-release-key.jks
storePassword=********
keyAlias=your-key-alias
keyPassword=********Create a keystore if you do not have one:
keytool -genkey -v -keystore your-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias your-key-aliasNever commit keystore.properties or the keystore.
Set your shop name, app ID, version and splash values as described in Configuration.
# Debug build
gradlew assembleDebug
# Signed release APK (as noted in app/build.gradle)
gradlew assembleRelease
# Android App Bundle for Google Play
gradlew bundleReleaseOn Windows use gradlew.bat. Outputs are written under app/build/outputs/. The bundle block in app/build.gradle disables language splits and enables density and ABI splits for App Bundles.
The manifest registers selldone.fcm.FirebaseMessagingServiceSamin for Firebase Cloud Messaging, and the app depends on firebase-core and firebase-messaging. The repository does not include a google-services.json or apply the Google Services Gradle plugin. To receive notifications, add your Firebase project configuration.
.github/workflows/android.yml runs on pushes and pull requests to master: it sets up JDK 1.8 and runs ./gradlew build. Because the wrapper scripts and keystore.properties are not in the repository, the workflow needs those files (for example, generated wrapper and keystore values from repository secrets) to succeed.