import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants import java.util.Properties plugins { alias(deps.plugins.android.application) alias(deps.plugins.kotlin.android) alias(deps.plugins.kotlin.kapt) alias(deps.plugins.kotlin.serialization) alias(deps.plugins.google.services) alias(deps.plugins.hilt.android) alias(deps.plugins.firebase.crashlytics) alias(deps.plugins.firebase.perf) alias(deps.plugins.ksp) id(deps.plugins.agconnect.get().pluginId) id("configuration") } agcp { manifest = false } android { namespace = "com.tangem.wallet" testOptions { animationsDisabled = true execution = "ANDROIDX_TEST_ORCHESTRATOR" } packaging { jniLibs { useLegacyPackaging = true excludes.add("lib/x86_64/libargon2.so") } resources.excludes.add("META-INF/LICENSE.md") resources.excludes.add("META-INF/NOTICE.md") resources.excludes.add("META-INF/DISCLAIMER") resources.excludes.add("META-INF/DEPENDENCIES") resources.excludes.add("META-INF/FastDoubleParser-NOTICE") resources.excludes.add("META-INF/FastDoubleParser-LICENSE") resources.excludes.add("META-INF/io.netty.versions.properties") resources.excludes.add("META-INF/INDEX.LIST") resources.excludes.add("META-INF/versions/9/OSGI-INF/MANIFEST.MF") } androidResources { generateLocaleConfig = true } signingConfigs { getByName("debug") { val keystorePath = "src/main/assets/tangem-app-config/android/keystore/debug_keystore" val propertiesPath = "src/main/assets/tangem-app-config/android/keystore/debug_keystore.properties" val keystoreProperties = Properties() file(propertiesPath) .inputStream() .use { keystoreProperties.load(it) } storeFile = file(keystorePath) storePassword = keystoreProperties["store_password"] as String keyAlias = keystoreProperties["key_alias"] as String keyPassword = keystoreProperties["key_password"] as String } } flavorDimensions += "services" productFlavors { create("google") { dimension = "services" buildConfigField("String", "FLAVOR_NAME", "\"google\"") } create("huawei") { dimension = "services" buildConfigField("String", "FLAVOR_NAME", "\"huawei\"") } } // `src/prodDi/` holds production DI bindings for interfaces with a `mocked` counterpart. // Wired into every build type EXCEPT `mocked`, which supplies its own bindings from `src/mocked/`. buildTypes.configureEach { if (name != "mocked") { sourceSets.named(name) { java.srcDir("src/prodDi/java") } } } } configurations.all { exclude(group = "org.bouncycastle", module = "bcprov-jdk15to18") exclude(group = "com.github.komputing.kethereum") exclude(group = "com.android.tools.build", module = "gradle") resolutionStrategy { dependencySubstitution { substitute(module("org.bouncycastle:bcprov-jdk15on")) .using(module("org.bouncycastle:bcprov-jdk18on:1.73")) } force( "org.bouncycastle:bcpkix-jdk15on:1.70", deps.kotlin.coroutines, deps.kotlin.coroutines.jvm, deps.kotlin.coroutines.android, ) } } configurations.androidTestImplementation { exclude(module = "protobuf-lite") } dependencies { implementation(projects.domain.legacy) implementation(projects.libs.blockchainSdk) implementation(projects.domain.account) implementation(projects.domain.account.status) implementation(projects.domain.addressBook) implementation(projects.domain.appsflyer) implementation(projects.domain.models) implementation(projects.domain.core) api(projects.domain.common) implementation(projects.domain.card) implementation(projects.domain.demo) implementation(projects.domain.demo.models) implementation(projects.domain.dynamicAddresses) implementation(projects.domain.express) implementation(projects.domain.wallets) implementation(projects.domain.wallets.models) implementation(projects.domain.settings) implementation(projects.domain.appUpdate) implementation(projects.domain.tokens) implementation(projects.domain.tokens.models) implementation(projects.domain.txhistory) implementation(projects.domain.appCurrency) implementation(projects.domain.appCurrency.models) implementation(projects.domain.appTheme) implementation(projects.domain.appTheme.models) implementation(projects.domain.balanceHiding) implementation(projects.domain.balanceHiding.models) implementation(projects.domain.pushNotificationPreferences) implementation(projects.domain.transaction) implementation(projects.domain.transaction.models) implementation(projects.domain.analytics) implementation(projects.domain.visa) implementation(projects.domain.onboarding) implementation(projects.domain.feedback) implementation(projects.domain.feedback.models) implementation(projects.domain.qrScanning) implementation(projects.domain.qrScanning.models) implementation(projects.domain.staking) implementation(projects.domain.walletConnect) implementation(projects.domain.walletConnect.models) implementation(projects.domain.markets) implementation(projects.domain.manageTokens) implementation(projects.domain.nft) implementation(projects.domain.nft.models) implementation(projects.domain.offramp) implementation(projects.domain.onramp) implementation(projects.domain.stories) implementation(projects.domain.stories.models) implementation(projects.domain.marketing) implementation(projects.domain.marketing.models) implementation(projects.domain.networks) implementation(projects.domain.quotes) implementation(projects.domain.notifications) implementation(projects.domain.notifications.models) implementation(projects.domain.swap.models) implementation(projects.domain.swap) implementation(projects.domain.walletManager) implementation(projects.domain.walletManager.models) implementation(projects.domain.yieldSupply) implementation(projects.domain.promo) implementation(projects.domain.blockaid) implementation(projects.domain.hotWallet) implementation(projects.domain.news) implementation(projects.domain.earn) implementation(projects.domain.assetsdiscovery) implementation(projects.domain.search) implementation(projects.common) implementation(projects.common.routing) implementation(projects.common.google) implementation(projects.core.analytics) implementation(projects.core.analytics.models) implementation(projects.core.navigation) implementation(projects.core.abTests) implementation(projects.core.configToggles) implementation(projects.core.res) implementation(projects.core.ui) implementation(projects.core.datasource) implementation(projects.core.utils) implementation(projects.core.decompose) implementation(projects.core.error.ext) implementation(projects.core.security) implementation(projects.libs.crypto) implementation(projects.libs.auth) implementation(projects.libs.blockchainSdk) implementation(projects.libs.tangemSdkApi) implementation(projects.data.account) implementation(projects.data.addressBook) implementation(projects.data.appCurrency) implementation(projects.data.appTheme) implementation(projects.data.balanceHiding) implementation(projects.data.pushNotificationPreferences) implementation(projects.data.card) implementation(projects.data.common) implementation(projects.data.settings) implementation(projects.data.appUpdate) implementation(projects.data.tokens) implementation(projects.data.assetsdiscovery) implementation(projects.data.txhistory) implementation(projects.data.wallets) implementation(projects.data.analytics) implementation(projects.data.appsflyer) implementation(projects.data.transaction) implementation(projects.data.visa) implementation(projects.data.stories) implementation(projects.data.marketing) implementation(projects.data.onboarding) implementation(projects.data.dynamicAddresses) implementation(projects.data.feedback) implementation(projects.data.qrScanning) implementation(projects.data.staking) implementation(projects.data.walletConnect) implementation(projects.data.markets) implementation(projects.data.manageTokens) implementation(projects.data.nft) implementation(projects.data.onramp) implementation(projects.data.networks) implementation(projects.data.quotes) implementation(projects.data.blockaid) implementation(projects.data.notifications) implementation(projects.data.swap) implementation(projects.data.walletManager) implementation(projects.data.yieldSupply) implementation(projects.data.promo) implementation(projects.data.hotWallet) implementation(projects.data.news) implementation(projects.data.earn) implementation(projects.data.search) implementation(projects.common.ui) /** Features */ implementation(projects.features.addressBook.api) implementation(projects.features.addressBook.impl) implementation(projects.features.marketing.api) implementation(projects.features.marketing.impl) implementation(projects.features.rating.impl) implementation(projects.features.referral.impl) implementation(projects.features.referral.domain) implementation(projects.features.referral.data) implementation(projects.features.swap.api) implementation(projects.features.swap.impl) implementation(projects.features.swap.domain) implementation(projects.features.swap.domain.api) implementation(projects.features.swap.data) implementation(projects.features.swapV2.api) implementation(projects.features.swapV2.impl) implementation(projects.features.tester.api) implementation(projects.features.tester.impl) implementation(projects.features.wallet.api) implementation(projects.features.wallet.impl) implementation(projects.features.tokendetails.api) implementation(projects.features.tokendetails.impl) implementation(projects.features.manageTokens.api) implementation(projects.features.manageTokens.impl) implementation(projects.features.send.api) implementation(projects.features.send.impl) implementation(projects.features.qrScanning.api) implementation(projects.features.qrScanning.impl) implementation(projects.features.staking.api) implementation(projects.features.staking.impl) implementation(projects.features.details.api) implementation(projects.features.details.impl) implementation(projects.features.disclaimer.api) implementation(projects.features.disclaimer.impl) implementation(projects.features.forceUpdate.api) implementation(projects.features.forceUpdate.impl) implementation(projects.features.pushNotifications.api) implementation(projects.features.pushNotifications.impl) implementation(projects.features.pushNotificationSettings.api) implementation(projects.features.pushNotificationSettings.impl) implementation(projects.features.walletSettings.api) implementation(projects.features.walletSettings.impl) implementation(projects.features.markets.api) implementation(projects.features.markets.impl) implementation(projects.features.feed.api) implementation(projects.features.feed.impl) implementation(projects.features.promoBanners.api) implementation(projects.features.promoBanners.impl) implementation(projects.features.onramp.api) implementation(projects.features.onramp.impl) implementation(projects.features.onboardingV2.api) implementation(projects.features.onboardingV2.impl) implementation(projects.features.stories.api) implementation(projects.features.stories.impl) implementation(projects.features.survey.api) implementation(projects.features.survey.impl) implementation(projects.features.txhistory.api) implementation(projects.features.txhistory.impl) implementation(projects.features.biometry.api) implementation(projects.features.biometry.impl) implementation(projects.features.nft.api) implementation(projects.features.nft.impl) implementation(projects.features.walletconnect.api) implementation(projects.features.walletconnect.impl) implementation(projects.features.commonFeatures.api) implementation(projects.features.commonFeatures.impl) implementation(projects.features.usedesk.api) implementation(projects.features.usedesk.impl) implementation(projects.features.hotWallet.api) implementation(projects.features.hotWallet.impl) implementation(projects.features.kyc.api) debugImplementation(projects.features.kyc.impl) internalImplementation(projects.features.kyc.impl) mockedImplementation(projects.features.kyc.impl) releaseImplementation(projects.features.kyc.impl) externalImplementation(projects.features.kyc.impl) implementation(projects.features.welcome.api) implementation(projects.features.welcome.impl) implementation(projects.features.createWalletSelection.api) implementation(projects.features.createWalletSelection.impl) implementation(projects.features.createWalletStart.api) implementation(projects.features.createWalletStart.impl) implementation(projects.features.home.api) implementation(projects.features.home.impl) implementation(projects.features.account.api) implementation(projects.features.account.impl) implementation(projects.features.tangempay.details.api) implementation(projects.features.tangempay.details.impl) implementation(projects.features.tangempay.main.api) implementation(projects.features.tangempay.main.impl) implementation(projects.features.tangempay.onboarding.api) implementation(projects.features.tangempay.onboarding.impl) implementation(projects.features.virtualAccounts.onboarding.impl) implementation(projects.features.virtualAccounts.onboarding.api) implementation(projects.features.virtualAccounts.main.impl) implementation(projects.features.virtualAccounts.main.api) implementation(projects.features.virtualAccounts.details.impl) implementation(projects.features.virtualAccounts.details.api) implementation(projects.features.tokenRecieve.api) implementation(projects.features.tokenRecieve.impl) implementation(projects.features.yieldSupply.api) implementation(projects.features.yieldSupply.impl) implementation(projects.features.approval.api) implementation(projects.features.approval.impl) implementation(projects.features.forYou.api) implementation(projects.features.forYou.impl) /** AndroidX libraries */ implementation(deps.androidx.core.ktx) implementation(deps.androidx.core.splashScreen) implementation(deps.androidx.appCompat) implementation(deps.androidx.datastore) implementation(deps.androidx.fragment.ktx) implementation(deps.androidx.constraintLayout) implementation(deps.androidx.activity.compose) implementation(deps.androidx.browser) implementation(deps.androidx.paging.runtime) implementation(deps.androidx.swipeRefreshLayout) implementation(deps.androidx.fragment.compose) implementation(deps.androidx.workmanager) implementation(deps.lifecycle.runtime.ktx) implementation(deps.lifecycle.common.java8) implementation(deps.lifecycle.viewModel.ktx) implementation(deps.lifecycle.compose) implementation(deps.hilt.work) /** Compose libraries */ implementation(deps.compose.constraintLayout) implementation(deps.compose.material3) implementation(deps.compose.animation) implementation(deps.compose.coil) implementation(deps.compose.constraintLayout) implementation(deps.compose.foundation) implementation(deps.compose.navigation.hilt) implementation(deps.compose.shimmer) implementation(deps.compose.ui) implementation(deps.compose.ui.tooling) implementation(deps.compose.paging) /** Firebase libraries */ implementation(platform(deps.firebase.bom)) implementation(deps.firebase.analytics) implementation(deps.firebase.crashlytics) implementation(deps.firebase.messaging) implementation(deps.firebase.perf) { exclude(group = "com.google.firebase", module = "protolite-well-known-types") exclude(group = "com.google.protobuf", module = "protobuf-javalite") } /** Tangem libraries */ implementation(tangemDeps.blockchain) { exclude(module = "joda-time") } implementation(tangemDeps.card.core) implementation(tangemDeps.card.android) { exclude(module = "joda-time") } implementation(tangemDeps.hot.core) implementation(tangemDeps.hot.android) /** DI */ implementation(deps.hilt.android) kapt(deps.hilt.kapt) kapt(deps.hilt.compilerx) /** Other libraries */ implementation(deps.arrow.fx) implementation(deps.kotlin.immutable.collections) implementation(deps.material) implementation(deps.googlePlay.review) implementation(deps.googlePlay.review.ktx) implementation(deps.googlePlay.services.wallet) implementation(deps.googlePlay.services) implementation(deps.googlePlay.advertising) coreLibraryDesugaring(deps.desugar) implementation(deps.zxing.qrCore) implementation(deps.coil) implementation(deps.coil.gif) implementation(deps.coil.svg) implementation(deps.amplitude) implementation(deps.appsflyer) implementation(deps.appsflyer.oaid) implementation(deps.customerio.analytics) implementation(deps.customerio.messaging) implementation("com.android.installreferrer:installreferrer:2.2") implementation(deps.spongecastle.core) implementation(deps.lottie) implementation(deps.compose.accompanist.appCompatTheme) implementation(deps.compose.accompanist.systemUiController) implementation(deps.xmlShimmer) implementation(deps.viewBindingDelegate) implementation(deps.armadillo) implementation(deps.kotlin.serialization) implementation(deps.reownCore) implementation(deps.reownWeb3) implementation(deps.decompose.ext.compose) implementation(deps.moshi.adapters) implementation(deps.moshi.kotlin) ksp(deps.moshi.kotlin.codegen) kaptForObfuscatingVariants(deps.retrofit.response.type.keeper) implementation(files("libs/dexprotector-annotations.jar")) /** Testing libraries */ testImplementation(projects.test.core) testImplementation(projects.common.test) androidTestImplementation(deps.test.junit.android) androidTestImplementation(deps.test.espresso) androidTestImplementation(deps.test.espresso.intents) androidTestImplementation(deps.test.kaspresso) androidTestImplementation(deps.test.kaspresso.compose) androidTestImplementation(deps.test.kaspresso.allure) androidTestImplementation(deps.test.compose.junit) androidTestImplementation(deps.test.hamcrest) androidTestImplementation(deps.test.hilt) kaptAndroidTest(deps.test.hilt.compiler) /** Chucker */ debugImplementation(deps.chucker) mockedImplementation(deps.chucker) externalImplementation(deps.chuckerStub) internalImplementation(deps.chuckerStub) releaseImplementation(deps.chuckerStub) /** Camera */ implementation(deps.camera.camera2) implementation(deps.camera.lifecycle) implementation(deps.camera.view) implementation(deps.listenableFuture) implementation(deps.mlKit.barcodeScanning) androidTestUtil(deps.test.orchestrator) /** Leakcanary */ debugImplementation(deps.leakcanary) /** Excluded dependencies */ implementation("com.google.guava:guava:30.0-android") { // excludes version 9999.0-empty-to-avoid-conflict-with-guava exclude(group = "com.google.guava", module = "listenablefuture") } /** Huawei flavor-specific dependencies */ "huaweiImplementation"(deps.huawei.push) "huaweiImplementation"(deps.agconnect.agcp) "huaweiImplementation"(deps.agconnect.core) }