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/, 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()}" } }