plugins { id "com.android.application" id "kotlin-android" id "kotlin-kapt" id "com.google.firebase.appdistribution" } if (rootProject.ext.onCi) { apply plugin: "com.github.hierynomus.license-report" downloadLicenses { dependencyConfiguration = 'all' includeProjectDependencies = true } } apply from: "$rootDir/versioning.gradle" def apikeyPropertiesFile = rootProject.file("apikeys.properties") def apikeyProperties = new Properties() apikeyProperties.load(new FileInputStream(apikeyPropertiesFile)) def useReleaseKeystore = rootProject.file("scripts/release/app-release.jks").exists() def localProperties = new Properties() localProperties.with { def lp = "local.properties" if (new File(lp).exists()) it.load(new FileInputStream(lp)) } android { def config = rootProject.ext compileSdkVersion config.compile_sdk androidResources { generateLocaleConfig true } defaultConfig { applicationId config.application_id minSdkVersion config.min_sdk targetSdkVersion config.target_sdk versionCode getBuildVersionCode() versionName getBuildVersionName() testInstrumentationRunner config.test_runner buildConfigField "boolean", "USE_NEW_WINDOW_INSET_API", "true" buildConfigField "boolean", "LOG_FROM_MW_LIBRARY", localProperties.getProperty("LOG_FROM_MW_LIBRARY", "false") buildConfigField "boolean", "LOG_MW_INTERACTION", localProperties.getProperty("LOG_MW_INTERACTION", "false") buildConfigField "boolean", "LOG_DASHBOARD_REDUCER", localProperties.getProperty("LOG_DASHBOARD_REDUCER", "false") buildConfigField "boolean", "LOG_EDITOR_VIEWMODEL_EVENTS", localProperties.getProperty("LOG_EDITOR_VIEWMODEL_EVENTS", "false") buildConfigField "boolean", "LOG_EDITOR_CONTROL_PANEL", localProperties.getProperty("LOG_EDITOR_CONTROL_PANEL", "false") buildConfigField "boolean", "ENABLE_STRICT_MODE", "false" resValue "string", "SENTRY_DSN", config.sentryApiKey } packagingOptions { resources { excludes += ['LICENSE.txt', 'META-INF/DEPENDENCIES', 'META-INF/ASL2.0', 'META-INF/NOTICE', 'META-INF/LICENSE'] } } signingConfigs { release { if (useReleaseKeystore) { def keystorePropertiesFile = rootProject.file("signing.properties") def keystoreProperties = new Properties() keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) storeFile rootProject.file("scripts/release/app-release.jks") keyAlias keystoreProperties['RELEASE_KEY_ALIAS'] keyPassword keystoreProperties['RELEASE_KEY_PASSWORD'] storePassword keystoreProperties['RELEASE_STORE_PASSWORD'] v1SigningEnabled true v2SigningEnabled true } } } buildTypes { release { minifyEnabled true shrinkResources true debuggable false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' buildConfigField("String", "AMPLITUDE_KEY", apikeyProperties['amplitude.release']) if (useReleaseKeystore) { signingConfig signingConfigs.release } else { signingConfig signingConfigs.debug } } debug { applicationIdSuffix ".debug" debuggable true buildConfigField("String", "AMPLITUDE_KEY", apikeyProperties['amplitude.debug']) //signingConfig signingConfigs.debug firebaseAppDistribution { artifactType = "AAB" groups = "anytype-q&a, product-review, nightly" serviceCredentialsFile = "$rootDir/scripts/distribution/anytype-debug-service-account-key.json" } } applicationVariants.all { variant -> if (variant.name == 'release') { variant.outputs.each { output -> project.ext { appName = 'anytype' } def newName = output.outputFile.name newName = newName.replace("app-", "$project.ext.appName-$variant.versionName-") newName = newName.replace("-release", "") newName = newName.replace("-universal", "") output.outputFileName = newName } } } } composeOptions { kotlinCompilerExtensionVersion libs.versions.composeKotlinCompilerVersion.get() } buildFeatures { viewBinding true compose true } splits { // Configures multiple APKs based on ABI. abi { // Enables building multiple APKs per ABI. enable false reset() include "armeabi-v7a", "arm64-v8a" universalApk false } } ndkVersion "23.2.8568313" namespace 'com.anytypeio.anytype' } dependencies { implementation project(':domain') implementation project(':core-models') implementation project(':localization') implementation project(':data') implementation project(':device') implementation project(':persistence') implementation project(':middleware') implementation project(':presentation') implementation project(':clipboard') implementation project(':core-utils') implementation project(':core-ui') implementation project(':library-page-icon-picker-widget') implementation project(':library-emojifier') implementation project(':library-syntax-highlighter') implementation project(':analytics') implementation project(':ui-settings') implementation project(':crash-reporting') implementation project(':payments') implementation project(':gallery-experience') //Compile time dependencies kapt libs.daggerCompiler kapt libs.glideCompiler compileOnly libs.javaxAnnotation compileOnly libs.javaxInject //Application dependencies implementation libs.kotlin implementation libs.coroutinesAndroid implementation libs.fragment implementation libs.navigation implementation libs.navigationUi implementation libs.appcompat implementation libs.design implementation libs.recyclerView implementation libs.constraintLayout implementation libs.glide implementation libs.coilCompose implementation libs.dagger implementation libs.timber implementation libs.gson implementation libs.pickT implementation libs.emojiCompat implementation libs.navigationCompose implementation libs.lifecycleViewModel implementation libs.lifecycleRuntime implementation libs.lifecycleLiveData implementation libs.lifecycleCompose implementation libs.compose implementation libs.composeFoundation implementation libs.composeMaterial implementation libs.composeMaterial3 implementation libs.composeToolingPreview implementation libs.composeAccompanistPager implementation libs.composeAccompanistThemeAdapter implementation libs.composeAccompanistPagerIndicators implementation libs.composeAccompanistPermissions implementation libs.composeAccompanistNavigation implementation libs.preference implementation libs.activityCompose implementation libs.composeReorderable implementation libs.room implementation libs.appUpdater implementation libs.exoPlayerCore implementation libs.exoPlayerUi implementation libs.amplitude implementation libs.shimmerLayout implementation libs.photoView implementation libs.zxing implementation libs.androidxSecurityCrypto implementation libs.middleware implementation libs.wireRuntime //Unit/Integration tests dependencies testImplementation libs.androidXTestCore testImplementation libs.junit testImplementation libs.robolectric testImplementation libs.kotlinTest testImplementation libs.mockitoKotlin testImplementation project(':test:utils') //Acceptance tests dependencies androidTestImplementation project(':test:android-utils') androidTestImplementation libs.mockitoAndroid androidTestImplementation libs.mockitoKotlin androidTestImplementation libs.espressoContrib androidTestImplementation libs.androidJUnit androidTestImplementation libs.kotlinTest androidTestImplementation libs.testRules androidTestImplementation libs.disableAnimation androidTestImplementation libs.navigationTesting androidTestImplementation project(":test:utils") androidTestImplementation project(":test:core-models-stub") androidTestImplementation(libs.coroutineTesting) { exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-debug" } debugImplementation libs.fragmentTesting debugImplementation libs.composeTooling } apply plugin: 'com.google.gms.google-services'