Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
f31cd59
migrated sv build architecture for toolkit project
shubham7109 Aug 13, 2025
8336077
Add all Toolkit convention migration changes
shubham7109 Aug 18, 2025
4d3079b
Abstract ArcGISMapsKotlinSDK dependency as a gradle object
shubham7109 Aug 18, 2025
e6c8f6b
Untangle dependencies and add PR feedback
shubham7109 Aug 19, 2025
4937ba9
vTest build fixes
shubham7109 Aug 19, 2025
95b23fc
Add automatic detection of androidTest sources
shubham7109 Aug 19, 2025
483cabb
working changes
shubham7109 Sep 14, 2025
ae445df
Merge branch 'v.next' into shubham/migrate-convention-plugins
shubham7109 Sep 18, 2025
af0dde4
Add v.next build fixes
shubham7109 Sep 18, 2025
fb8710e
add Toolkit version provider and module registry
shubham7109 Sep 24, 2025
bc6c542
Merge branch 'v.next' into shubham/migrate-convention-plugins
shubham7109 Sep 24, 2025
db71c5f
update toml, add root convention
shubham7109 Sep 25, 2025
9794995
Merge branch 'v.next' into shubham/migrate-convention-plugins
shubham7109 Sep 25, 2025
7621495
fix freeCompilerArgs warnings
shubham7109 Sep 25, 2025
d8eda36
Add MissingTranslation for popup
shubham7109 Sep 25, 2025
0b2ca36
Merge branch 'v.next' into toolkit/migrate-convention-plugins
shubham7109 Sep 26, 2025
4530c5f
Merge branch 'toolkit/migrate-convention-plugins' into shubham/migrat…
shubham7109 Sep 26, 2025
ea471ff
Migrate toolkit registry as a gradle service
shubham7109 Sep 29, 2025
edb7cc7
use expected gradle properties
shubham7109 Sep 29, 2025
04cacf5
add copyrights
shubham7109 Sep 30, 2025
7560805
Merge branch 'v.next' into shubham/migrate-convention-plugins
shubham7109 Oct 3, 2025
6879a2c
Supply mockingjay for lib androidTestImplementation
shubham7109 Oct 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions bom/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
*/

plugins {
id("maven-publish")
id("java-platform")
`maven-publish`
`java-platform`
}

// Find these in properties passed through command line or read from GRADLE_HOME/gradle.properties
Expand Down Expand Up @@ -91,5 +91,3 @@ afterEvaluate {
}
}
}


2 changes: 2 additions & 0 deletions build-logic/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/build
/.gradle
1 change: 1 addition & 0 deletions build-logic/convention/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
66 changes: 66 additions & 0 deletions build-logic/convention/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
`kotlin-dsl`
}

group = "com.esri.arcgismaps.kotlin.build_logic.convention"

java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

tasks.withType<KotlinCompile>().configureEach {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}

dependencies {
compileOnly(libs.android.gradlePlugin)
compileOnly(libs.android.tools.common)
compileOnly(libs.kotlin.gradlePlugin)
compileOnly(libs.ksp.gradlePlugin)
}

tasks {
validatePlugins {
enableStricterValidation = true
failOnWarning = true
}
}

gradlePlugin {
plugins {
register("androidApplicationComposing") {
id = "arcgismaps.android.application.compose"
implementationClass = "AndroidApplicationComposeConventionPlugin"
}
register("androidApplication") {
id = "arcgismaps.android.application"
implementationClass = "AndroidApplicationConventionPlugin"
}
register("androidLibraryCompose") {
id = "arcgismaps.android.library.compose"
implementationClass = "AndroidLibraryComposeConventionPlugin"
}
register("androidLibrary") {
id = "arcgismaps.android.library"
implementationClass = "AndroidLibraryConventionPlugin"
}
register("arcgismapsKotlinToolkit") {
id = "arcgismaps.kotlin.toolkit"
implementationClass = "ArcGISMapsKotlinToolkitConventionPlugin"
}
register("arcgismapsKotlinMicroapp") {
id = "arcgismaps.kotlin.microapp"
implementationClass = "ArcGISMapsKotlinMicroappConventionPlugin"
}
register("arcGISMapsKotlinSDK") {
id = "arcgismaps.kotlin.sdk"
implementationClass = "ArcGISMapsKotlinSDKConventionPlugin"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import com.android.build.api.dsl.ApplicationExtension
import com.esri.arcgismaps.kotlin.build_logic.convention.configureAndroidCompose
import com.esri.arcgismaps.kotlin.build_logic.convention.configureKotlinAndroid
import com.esri.arcgismaps.kotlin.build_logic.convention.debugImplementation
import com.esri.arcgismaps.kotlin.build_logic.convention.implementation
import com.esri.arcgismaps.kotlin.build_logic.convention.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.getByType

class AndroidApplicationComposeConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply(libs.findPlugin("android-application").get().get().pluginId)
apply(libs.findPlugin("kotlin-android").get().get().pluginId)
apply(libs.findPlugin("compose-compiler").get().get().pluginId)
}
val extension = extensions.getByType<ApplicationExtension>()
configureKotlinAndroid(extension)
configureAndroidCompose(extension)

// Add common Compose dependencies for application modules
dependencies {
implementation(platform(libs.findLibrary("androidx-compose-bom").get()))
implementation(libs.findBundle("composeCore").get())
implementation(libs.findBundle("core").get())
implementation(libs.findLibrary("androidx-activity-compose").get())
implementation(libs.findLibrary("androidx-lifecycle-viewmodel-compose").get())
debugImplementation(libs.findBundle("debug").get())
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import com.android.build.api.dsl.ApplicationExtension
import com.esri.arcgismaps.kotlin.build_logic.convention.configureKotlinAndroid
import com.esri.arcgismaps.kotlin.build_logic.convention.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.get

class AndroidApplicationConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply(libs.findPlugin("android-application").get().get().pluginId)
apply(libs.findPlugin("kotlin-android").get().get().pluginId)
}

extensions.configure<ApplicationExtension> {
configureKotlinAndroid(this)
defaultConfig {
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
minSdk = libs.findVersion("minSdk").get().toString().toInt()
targetSdk = libs.findVersion("compileSdk").get().toString().toInt()
versionCode = 1
versionName = "1.0"
}

buildFeatures {
buildConfig = true
}

buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}

packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}

// Add the custom assets directory to the app module's assets build.
sourceSets["main"].assets.srcDirs(layout.buildDirectory.dir("sampleAssets/"))
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import com.android.build.api.dsl.LibraryExtension
import com.esri.arcgismaps.kotlin.build_logic.convention.configureAndroidCompose
import com.esri.arcgismaps.kotlin.build_logic.convention.configureKotlinAndroid
import com.esri.arcgismaps.kotlin.build_logic.convention.implementation
import com.esri.arcgismaps.kotlin.build_logic.convention.libs
import com.esri.arcgismaps.kotlin.build_logic.convention.testImplementation
import com.esri.arcgismaps.kotlin.build_logic.convention.androidTestImplementation
import com.esri.arcgismaps.kotlin.build_logic.convention.debugImplementation
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.getByType

class AndroidLibraryComposeConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply(libs.findPlugin("android-library").get().get().pluginId)
apply(libs.findPlugin("kotlin-android").get().get().pluginId)
apply(libs.findPlugin("compose-compiler").get().get().pluginId)
apply(libs.findPlugin("kotlin-parcelize").get().get().pluginId)
apply(libs.findPlugin("kotlin-serialization").get().get().pluginId)
}
val extension = extensions.getByType<LibraryExtension>()
configureKotlinAndroid(extension)
configureAndroidCompose(extension)

// Add common Compose dependencies for library modules
dependencies {
implementation(platform(libs.findLibrary("androidx-compose-bom").get()))
implementation(libs.findBundle("composeCore").get())
implementation(libs.findBundle("core").get())
implementation(libs.findLibrary("androidx-lifecycle-runtime-compose").get())
implementation(libs.findLibrary("androidx-activity-compose").get())
implementation(libs.findLibrary("androidx-material-icons").get())
implementation(libs.findLibrary("kotlinx-serialization-json").get())
testImplementation(libs.findBundle("unitTest").get())
androidTestImplementation(libs.findBundle("composeTest").get())
androidTestImplementation(libs.findBundle("androidXTest").get())
debugImplementation(libs.findBundle("debug").get())
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import com.android.build.gradle.LibraryExtension
import com.esri.arcgismaps.kotlin.build_logic.convention.configureKotlinAndroid
import com.esri.arcgismaps.kotlin.build_logic.convention.implementation
import com.esri.arcgismaps.kotlin.build_logic.convention.libs
import com.esri.arcgismaps.kotlin.build_logic.convention.testImplementation
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.kotlin

class AndroidLibraryConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply(libs.findPlugin("android-library").get().get().pluginId)
apply(libs.findPlugin("kotlin-android").get().get().pluginId)
}

extensions.configure<LibraryExtension> {
configureKotlinAndroid(this)
defaultConfig {
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
minSdk = libs.findVersion("minSdk").get().toString().toInt()
lint.targetSdk = libs.findVersion("compileSdk").get().toString().toInt()
consumerProguardFiles("consumer-rules.pro")
}

buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}

packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
}

dependencies {
testImplementation(kotlin("test"))
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import com.android.build.api.dsl.ApplicationExtension
import com.esri.arcgismaps.kotlin.build_logic.convention.ArcGISMapsKotlinSDKDependency
import com.esri.arcgismaps.kotlin.build_logic.convention.implementation
import com.esri.arcgismaps.kotlin.build_logic.convention.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.testing.Test
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.project
import org.gradle.kotlin.dsl.withType

class ArcGISMapsKotlinMicroappConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply(libs.findPlugin("arcgismaps-android-application").get().get().pluginId)
apply(libs.findPlugin("arcgismaps-android-application-compose").get().get().pluginId)
apply(libs.findPlugin("gradle-secrets").get().get().pluginId)
}


// Configure secrets plugin defaults and custom BuildConfig fields
extensions.configure<ApplicationExtension> {
val defaultPropertiesFile = rootProject.file("secrets.defaults.properties")
if (defaultPropertiesFile.exists()) {
val properties = java.util.Properties()
defaultPropertiesFile.inputStream().use { properties.load(it) }
defaultConfig {
// Add each property as a BuildConfig field
properties.forEach { (key, value) ->
val escapedValue = value.toString().replace("\"", "\\\"")
buildConfigField("String", key.toString(), "\"${escapedValue}\"")
}
}
}
}

// Avoids an empty test report showing up in the CI integration test report.
// Remove this if tests will be added.
tasks.withType<Test> {
enabled = false
}

dependencies {
// Configure the ArcGIS Maps SDK dependency
ArcGISMapsKotlinSDKDependency.configureArcGISMapsDependencies(target)

// Local project common microapps library
implementation(project(":microapps-lib"))
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import com.esri.arcgismaps.kotlin.build_logic.convention.ArcGISMapsKotlinSDKDependency
import org.gradle.api.Plugin
import org.gradle.api.Project

class ArcGISMapsKotlinSDKConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
// Configure the ArcGIS Maps SDK dependency
ArcGISMapsKotlinSDKDependency.configureArcGISMapsDependencies(target)
}
}
}
Loading