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 { // The NDK that CI installs and the bindings build with. Without it AGP expects its default NDK, // cannot strip the native libraries: they ship with their debug sections and no native-debug-symbols.zip is made. ndkVersion "26.1.10909125" 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' // androidTest is only ever compiled against this build type (AGP's testBuildType // defaults to "debug" and is not overridden anywhere in this project), so this is the // only place a testInstrumentationRunner override actually takes effect - the identical // override on the instrumentialTest build type below is unreachable dead config. defaultConfig.testInstrumentationRunner "io.qameta.allure.android.runners.AllureAndroidJUnitRunner" 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 // No applicationIdSuffix: every release* build type gets the production Firebase config // (applicationVariants below), whose only client is the production package. The debug // signature keeps it from installing over a Play install, and the production API key, // restricted to the release certificates, refuses its Firebase calls. versionNameSuffix '-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' applicationIdSuffix '.dev' //Init firebase def localReleaseNotes = releaseNotes() def localFirebaseGroup = firebaseGroup() firebaseAppDistribution { releaseNotes = localReleaseNotes groups = localFirebaseGroup } buildConfigField "String", "BuildType", "\"develop\"" } instrumentialTest { initWith buildTypes.debug matchingFallbacks = ['debug'] 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 if (name != "release" && name.startsWith("release")) { 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() ] dependentTasks.forEach { tasks.getByName(it).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 playReview implementation playAppUpdate 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 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 scalarsConverterDep androidTestImplementation allureKotlinModel androidTestImplementation allureKotlinCommons androidTestImplementation allureKotlinJunit4 androidTestImplementation allureKotlinAndroid } task printVersion { doLast { println "versionName:${computeVersionName()}" } }