Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@ jobs:
- name: gradle wrapper
run: gradle wrapper

- name: Build with Gradle
run: ./gradlew build
- name: Build for Debug with Gradle
run: ./gradlew assembleDebug

- name: Run tests
run: ./gradlew test
run: ./gradlew testDebugUnitTest

# TODO ADD COMPOSE TESTS STEP

Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,6 @@ local.properties

# Secrets
google-services.json
*.keystore
!debug.keystore
keystore.properties
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,16 @@ Bitkit Android Native app.

## Localization
See repo: https://github.com/synonymdev/bitkit-transifex-sync

## Build for Release

Setup the signing config:
- Add the keystore file to root, eg. `./release.keystore`
- Add `keystore.properties` to root of the project (see `keystore.properties.template`)

Run:
```sh
./gradlew assembleRelease
```

APK is generated in `app/build/outputs/apk/release/`
38 changes: 35 additions & 3 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import org.jetbrains.kotlin.compose.compiler.gradle.ComposeFeatureFlag
import java.io.FileInputStream
import java.util.Properties

plugins {
alias(libs.plugins.android.application)
Expand All @@ -10,15 +12,34 @@ plugins {
alias(libs.plugins.google.services)
alias(libs.plugins.room)
}

// https://developer.android.com/studio/publish/app-signing#secure-key
// Init keystoreProperties variable from keystore.properties file
val keystoreProperties by lazy {
val keystorePropertiesFile = rootProject.file("keystore.properties")
val keystoreProperties = Properties()

if (keystorePropertiesFile.exists()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
} else {
keystoreProperties["storeFile"] = System.getenv("KEYSTORE_FILE") ?: ""
keystoreProperties["storePassword"] = System.getenv("KEYSTORE_PASSWORD") ?: ""
keystoreProperties["keyAlias"] = System.getenv("KEY_ALIAS") ?: ""
keystoreProperties["keyPassword"] = System.getenv("KEY_PASSWORD") ?: ""
}

keystoreProperties
}

android {
namespace = "to.bitkit"
compileSdk = 35
defaultConfig {
applicationId = "to.bitkit"
applicationId = "to.bitkit.dev"
minSdk = 28
targetSdk = 35
versionCode = 1
versionName = "1.0"
versionName = "0.0.1"
resourceConfigurations += listOf(
"en", // Default (English)
"ar", // Arabic
Expand Down Expand Up @@ -49,18 +70,29 @@ android {
keyAlias = "androiddebugkey"
keyPassword = "android"
}
create("release") {
val keystoreFile = keystoreProperties.getProperty("storeFile").takeIf { it.isNotBlank() }
?.let { rootProject.file(it) }
storeFile = if (keystoreFile?.exists() == true) keystoreFile else null
// storeFile = rootProject.file(keystoreProperties.getProperty("storeFile"))
storePassword = keystoreProperties.getProperty("storePassword")
keyAlias = keystoreProperties.getProperty("keyAlias")
keyPassword = keystoreProperties.getProperty("keyPassword")
}
}
buildTypes {
debug {
signingConfig = signingConfigs.getByName("debug")
applicationIdSuffix = ".dev"
// applicationIdSuffix = ".dev"
}
release {
isMinifyEnabled = false
isShrinkResources = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
signingConfig = signingConfigs.getByName("release")
}
}
compileOptions {
Expand Down
4 changes: 4 additions & 0 deletions keystore.properties.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
storeFile=app/debug.keystore
storePassword=android
keyPassword=android
keyAlias=androiddebugkey