Files
pezkuwi-wallet-android/app/build.gradle
T
pezkuwichain c4fe2df923 fix(build): declare resource-task deps for google-services bind task
bindDevelopGithubGoogleServicesToRelease writes into src/develop, which
generate/mergeDevelopResources read — Gradle 8.9 fails on the implicit
dependency. Add generate/mergeResources to the bind task's dependents
(null-safe via findByName).
2026-06-13 09:12:46 -07:00

343 lines
11 KiB
Groovy

apply plugin: 'com.google.gms.google-services'
apply plugin: 'kotlin-parcelize'
apply plugin: 'com.google.firebase.appdistribution'
apply plugin: "com.github.triplet.play"
apply from: "../scripts/versions.gradle"
apply from: "../scripts/secrets.gradle"
android {
defaultConfig {
applicationId rootProject.applicationId
versionCode computeVersionCode()
versionName computeVersionName()
}
signingConfigs {
dev {
storeFile file('develop_key.jks')
storePassword readRawSecretOrNull('CI_KEYSTORE_PASS')
keyAlias readRawSecretOrNull('CI_KEYSTORE_KEY_ALIAS')
keyPassword readRawSecretOrNull('CI_KEYSTORE_KEY_PASS')
}
market {
storeFile file('market_key.jks')
storePassword readRawSecretOrNull('CI_MARKET_KEYSTORE_PASS')
keyAlias readRawSecretOrNull('CI_MARKET_KEYSTORE_KEY_ALIAS')
keyPassword readRawSecretOrNull('CI_MARKET_KEYSTORE_KEY_PASS')
}
github {
storeFile file('github_key.jks')
storePassword readRawSecretOrNull('CI_GITHUB_KEYSTORE_PASS')
keyAlias readRawSecretOrNull('CI_GITHUB_KEYSTORE_KEY_ALIAS')
keyPassword readRawSecretOrNull('CI_GITHUB_KEYSTORE_KEY_PASS')
}
}
buildTypes {
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-debug'
buildConfigField "String", "BuildType", "\"debug\""
}
debugLocal {
initWith buildTypes.debug
matchingFallbacks = ['debug']
signingConfig signingConfigs.debug
}
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
buildConfigField "String", "BuildType", "\"release\""
}
releaseTest {
initWith buildTypes.release
matchingFallbacks = ['release']
signingConfig signingConfigs.debug
versionNameSuffix '-releaseTest'
applicationIdSuffix '.releaseTest'
buildConfigField "String", "BuildType", "\"releaseTest\""
}
releaseMarket {
initWith buildTypes.release
matchingFallbacks = ['release']
signingConfig signingConfigs.market
ndk { debugSymbolLevel 'FULL' }
buildConfigField "String", "BuildType", "\"releaseMarket\""
}
releaseGithub {
initWith buildTypes.release
matchingFallbacks = ['release']
signingConfig signingConfigs.github
buildConfigField "String", "BuildType", "\"releaseGithub\""
}
develop {
signingConfig signingConfigs.dev
matchingFallbacks = ['debug']
versionNameSuffix '-develop'
// Use the base applicationId (io.pezkuwichain.wallet) — no ".dev" suffix —
// so it matches the registered google-services client.
//Init firebase
def localReleaseNotes = releaseNotes()
def localFirebaseGroup = firebaseGroup()
firebaseAppDistribution {
releaseNotes = localReleaseNotes
groups = localFirebaseGroup
}
buildConfigField "String", "BuildType", "\"develop\""
}
instrumentialTest {
initWith buildTypes.debug
matchingFallbacks = ['debug']
defaultConfig.testInstrumentationRunner "io.qameta.allure.android.runners.AllureAndroidJUnitRunner"
buildConfigField "String", "BuildType", "\"instrumentalTest\""
}
}
sourceSets {
releaseGithub {
res.srcDirs = ['src/release/res']
}
releaseMarket {
res.srcDirs = ['src/release/res']
}
releaseTest {
res.srcDirs = ['src/release/res']
}
}
bundle {
language {
enableSplit = false
}
}
applicationVariants.all { variant ->
String name = variant.buildType.name
// 'develop' now shares the base io.pezkuwichain.wallet applicationId, whose
// google-services client lives in the production google-services.json — so bind
// it for develop too (the DEV google-services.json has no matching client).
if ((name != "release" && name.startsWith("release")) || name == "develop") {
createBindReleaseFileTask(variant.buildType.name)
}
}
packagingOptions {
resources.excludes.add("META-INF/versions/9/previous-compilation-data.bin")
resources.excludes.add("META-INF/DEPENDENCIES")
resources.excludes.add("META-INF/NOTICE.md")
// Use 16KB-aligned libsqlcipher.so from jniLibs instead of AAR's 4KB-aligned version
jniLibs.pickFirsts.add("**/libsqlcipher.so")
// Store native libs uncompressed and 16KB-aligned for Android 15+ compatibility
jniLibs.useLegacyPackaging = false
}
buildFeatures {
viewBinding true
}
namespace 'io.novafoundation.nova.app'
}
void createBindReleaseFileTask(String destination) {
String taskName = "bind${destination.capitalize()}GithubGoogleServicesToRelease"
Task task = task(taskName, type: Copy) {
description = "Switches to RELEASE google-services.json for ${destination}"
from "src/release"
include "google-services.json"
into "src/${destination}"
}
afterEvaluate {
def capitalizedDestination = destination.capitalize()
def dependentTasks = [
"process${capitalizedDestination}GoogleServices".toString(),
"merge${capitalizedDestination}JniLibFolders".toString(),
"merge${capitalizedDestination}StartupProfile".toString(),
"merge${capitalizedDestination}Shaders".toString(),
"merge${capitalizedDestination}ArtProfile".toString(),
// The bind task writes into src/<dest>, which resource tasks read —
// declare the dependency so Gradle 8.9 doesn't fail on implicit ordering.
"generate${capitalizedDestination}Resources".toString(),
"merge${capitalizedDestination}Resources".toString()
]
dependentTasks.forEach {
def t = tasks.findByName(it)
if (t != null) t.dependsOn(task)
}
}
}
play {
serviceAccountCredentials = file(System.env.CI_PLAY_KEY ?: "../key/fake.json")
track = "production"
releaseStatus = "completed"
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':core-db')
implementation project(':common')
implementation project(':feature-splash')
implementation project(':feature-onboarding-api')
implementation project(':feature-onboarding-impl')
implementation project(':feature-ledger-api')
implementation project(':feature-ledger-core')
implementation project(':feature-ledger-impl')
implementation project(':feature-account-api')
implementation project(':feature-account-impl')
implementation project(':feature-account-migration')
implementation project(':feature-wallet-api')
implementation project(':feature-wallet-impl')
implementation project(':runtime')
implementation project(':web3names')
implementation project(':feature-staking-api')
implementation project(':feature-staking-impl')
implementation project(':feature-crowdloan-api')
implementation project(':feature-crowdloan-impl')
implementation project(':feature-dapp-api')
implementation project(':feature-dapp-impl')
implementation project(':feature-nft-api')
implementation project(':feature-nft-impl')
implementation project(':feature-currency-api')
implementation project(':feature-currency-impl')
implementation project(':feature-governance-api')
implementation project(':feature-governance-impl')
implementation project(':feature-assets')
implementation project(':feature-vote')
implementation project(':feature-versions-api')
implementation project(':feature-versions-impl')
implementation project(':caip')
implementation project(':feature-external-sign-api')
implementation project(':feature-external-sign-impl')
implementation project(':feature-wallet-connect-api')
implementation project(':feature-wallet-connect-impl')
implementation project(':feature-proxy-api')
implementation project(':feature-proxy-impl')
implementation project(':feature-settings-api')
implementation project(':feature-settings-impl')
implementation project(":feature-swap-core")
implementation project(':feature-swap-api')
implementation project(':feature-swap-impl')
implementation project(":feature-buy-api")
implementation project(":feature-buy-impl")
implementation project(':feature-push-notifications')
implementation project(':feature-deep-linking')
implementation project(':feature-cloud-backup-api')
implementation project(':feature-cloud-backup-impl')
implementation project(':feature-banners-api')
implementation project(':feature-banners-impl')
implementation project(':feature-ahm-api')
implementation project(':feature-ahm-impl')
implementation project(':feature-gift-api')
implementation project(':feature-gift-impl')
implementation project(':bindings:metadata_shortener')
implementation project(':bindings:sr25519-bizinikiwi')
implementation project(":feature-xcm:impl")
implementation project(":feature-multisig:operations")
implementation project(':test-shared')
implementation kotlinDep
implementation biometricDep
implementation androidDep
implementation constraintDep
implementation zXingEmbeddedDep
implementation navigationFragmentDep
implementation navigationUiDep
implementation roomDep
implementation substrateSdkDep
implementation daggerDep
ksp daggerCompiler
implementation lifecycleDep
ksp lifecycleCompiler
implementation lifeCycleKtxDep
implementation retrofitDep
implementation gsonConvertedDep
implementation gifDep
compileOnly wsDep
implementation coroutinesDep
testImplementation project(':test-shared')
implementation insetterDep
implementation liveDataKtxDep
implementation platform(firebaseBomDep)
implementation firestoreDep
implementation firebaseCloudMessagingDep
implementation firebaseAppCheck
implementation walletConnectCoreDep, withoutTransitiveAndroidX
implementation walletConnectWalletDep, withoutTransitiveAndroidX
kspAndroidTest daggerCompiler
androidTestImplementation androidTestRunnerDep
androidTestImplementation androidTestRulesDep
androidTestImplementation androidJunitDep
androidTestImplementation allureKotlinModel
androidTestImplementation allureKotlinCommons
androidTestImplementation allureKotlinJunit4
androidTestImplementation allureKotlinAndroid
}
task printVersion {
doLast {
println "versionName:${computeVersionName()}"
}
}