/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ import static org.mozilla.conventions.BuildConfigKt.updateExtensionVersion plugins { alias(libs.plugins.dependency.analysis) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) } apply plugin: 'com.android.application' android { compileSdk { version = release(config.compileSdkMajorVersion) { minorApiLevel = config.compileSdkMinorVersion } } defaultConfig { applicationId "org.mozilla.samples.browser" minSdk config.minSdkVersion targetSdk config.targetSdkVersion versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunnerArgument "clearPackageData", "true" testInstrumentationRunnerArgument "listener", "leakcanary.FailTestOnLeakRunListener" } buildTypes { release { minifyEnabled = false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } flavorDimensions += "engine" productFlavors { gecko { dimension "engine" } // WebView system { dimension "engine" } } variantFilter { variant -> if (variant.buildType.name == "release") { // This is a sample app that we are not releasing. Save some time and do not build // release versions. setIgnore(true) } } buildFeatures { viewBinding = true compose = true } namespace = 'org.mozilla.samples.browser' } tasks.register("updateBorderifyExtensionVersion", Copy) { task -> updateExtensionVersion(task, 'src/main/assets/extensions/borderify', rootProject.ext.config.componentsVersion) } tasks.register("updateTestExtensionVersion", Copy) { task -> updateExtensionVersion(task, 'src/main/assets/extensions/test', rootProject.ext.config.componentsVersion) } // Make sure DAGP asset-source exploding happens after ExtensionVersion tasks tasks.matching { it.name.startsWith("explodeAssetSource") }.configureEach { t -> t.dependsOn(tasks.named("updateBorderifyExtensionVersion")) t.dependsOn(tasks.named("updateTestExtensionVersion")) } dependencies { geckoImplementation project(':components:browser-engine-gecko') implementation project(':components:browser-domains') implementation project(':components:browser-engine-system') implementation project(':components:browser-icons') implementation project(':components:browser-menu') implementation project(':components:browser-session-storage') implementation project(':components:browser-state') implementation project(':components:browser-storage-sync') implementation project(':components:browser-tabstray') implementation project(':components:browser-thumbnails') implementation project(':components:browser-toolbar') implementation project(':components:compose-awesomebar') implementation project(':components:concept-awesomebar') implementation project(':components:concept-base') implementation project(':components:concept-engine') implementation project(':components:concept-fetch') implementation project(':components:concept-storage') implementation project(':components:concept-tabstray') implementation project(':components:concept-toolbar') implementation project(':components:feature-addons') implementation project(':components:feature-app-links') implementation project(":components:feature-autofill") implementation project(':components:feature-awesomebar') implementation project(':components:feature-contextmenu') implementation project(':components:feature-customtabs') implementation project(':components:feature-downloads') implementation project(':components:feature-findinpage') implementation project(':components:feature-intent') implementation project(':components:feature-media') implementation project(':components:feature-privatemode') implementation project(':components:feature-prompts') implementation project(':components:feature-pwa') implementation project(':components:feature-readerview') implementation project(':components:feature-screendetection') implementation project(':components:feature-search') implementation project(':components:feature-session') implementation project(':components:feature-sitepermissions') implementation project(':components:feature-tabs') implementation project(':components:feature-toolbar') implementation project(':components:feature-webcompat') implementation project(':components:feature-webcompat-reporter') implementation project(':components:feature-webnotifications') implementation project(":components:lib-crash") implementation project(':components:lib-dataprotect') implementation project(':components:lib-fetch-httpurlconnection') implementation project(":components:lib-publicsuffixlist") implementation project(':components:service-digitalassetlinks') // Add a dependency on glean to simplify the testing workflow // for engineers that want to test Gecko metrics exfiltrated via the Glean // SDK. See bug 1592935 for more context. implementation project(":components:service-glean") implementation project(':components:service-location') implementation project(':components:service-sync-logins') implementation project(':components:support-appservices') implementation project(':components:support-base') implementation project(':components:support-ktx') implementation project(':components:support-locale') implementation project(':components:support-utils') implementation project(':components:support-webextensions') implementation project(':components:ui-autocomplete') implementation project(':components:ui-tabcounter') implementation project(':components:ui-widgets') implementation libs.androidx.appcompat implementation platform(libs.androidx.compose.bom) implementation libs.androidx.compose.foundation implementation libs.androidx.compose.material3 implementation libs.androidx.compose.ui.tooling implementation libs.androidx.constraintlayout implementation libs.androidx.core.ktx implementation libs.androidx.swiperefreshlayout implementation libs.google.material implementation libs.mozilla.glean debugImplementation libs.leakcanary testImplementation libs.androidx.test.core testImplementation libs.androidx.test.junit testImplementation libs.kotlinx.coroutines.test testImplementation libs.mockito testImplementation libs.robolectric androidTestImplementation project(':components:support-android-test') androidTestImplementation libs.androidx.test.core androidTestImplementation libs.androidx.test.espresso.core androidTestImplementation libs.androidx.test.junit androidTestImplementation libs.androidx.test.monitor androidTestImplementation libs.androidx.test.rules androidTestImplementation libs.androidx.test.runner androidTestImplementation libs.androidx.test.uiautomator androidTestImplementation libs.leakcanary.instrumentation androidTestImplementation libs.okhttp androidTestRuntimeOnly libs.okio constraints { // Various AndroidX dependencies pull in 1.1.1 transitively; OkHttp 5 requires 1.2.0. implementation(libs.androidx.startup.runtime) // okhttp is test-only; prevents older releases being resolved on the main classpath. implementation(libs.okio) } } preBuild.dependsOn updateBorderifyExtensionVersion preBuild.dependsOn updateTestExtensionVersion