Skip to content

Build from Source

Mehrdad Pajuhaan edited this page Oct 23, 2026 · 1 revision

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.

Toolchain

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

1. Gradle wrapper

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

2. Proxy settings

gradle.properties contains:

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8090

If you do not run a proxy on that address, remove these two lines, otherwise dependency downloads fail.

3. Repositories

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.

4. Signing (keystore.properties)

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-alias

Never commit keystore.properties or the keystore.

5. Store configuration

Set your shop name, app ID, version and splash values as described in Configuration.

6. Build

# Debug build
gradlew assembleDebug

# Signed release APK (as noted in app/build.gradle)
gradlew assembleRelease

# Android App Bundle for Google Play
gradlew bundleRelease

On 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.

7. Push notifications (optional)

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.

Continuous integration

.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.

Related