plugins { id 'org.jetbrains.kotlin.multiplatform' id 'org.jetbrains.kotlin.plugin.atomicfu' id 'org.jetbrains.kotlin.plugin.serialization' id 'com.android.library' id 'maven-publish' alias(libs.plugins.moko.resources.plugin) } android { compileSdkVersion rootProject.ext.version_android_compile_sdk buildTypes { release { consumerProguardFiles 'proguard-rules.pro' } } defaultConfig { minSdkVersion 21 targetSdkVersion rootProject.ext.version_android_target_sdk testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } packagingOptions { resources { // .kotlin_metadata files come from multiplatform modules, but are not needed unless we // use kotlin reflection, which we don't. excludes += ['META-INF/INDEX.LIST', '**/*.kotlin_metadata', 'META-INF/*.kotlin_module', 'licenses/**.TXT'] } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 coreLibraryDesugaringEnabled = true } testOptions { unitTests { includeAndroidResources = true } } namespace 'com.ustadmobile.core' lint { disable 'MissingTranslation', 'ExtraTranslation' } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) { kotlinOptions { jvmTarget = "17" freeCompilerArgs += "-Xexpect-actual-classes" } } } sourceCompatibility = '17' targetCompatibility = '17' group rootProject.group version rootProject.version // workaround for https://youtrack.jetbrains.com/issue/KT-27170 configurations { compileClasspath } kotlin { jvm { compilations.main.kotlinOptions { // Setup the Kotlin compiler options for the 'main' compilation: jvmTarget = "$version_kotlin_jvmTarget" } compilations.test.kotlinOptions { // Setup the Kotlin compiler options for the 'main' compilation: jvmTarget = "$version_kotlin_jvmTarget" } } android() js(IR) { useCommonJs() browser { testTask { useKarma { useChromeHeadless() //change to useChrome to run the actual browser } } } } sourceSets { commonMain { dependencies { api libs.moko.resources implementation kotlin('stdlib-common') implementation libs.kotlinx.serialization api libs.ktor.client.core api libs.ktor.client.json api libs.ktor.client.content.negotiation api libs.ktor.io implementation libs.napier implementation libs.coroutines implementation libs.door.runtime implementation libs.kodein.di api project(':lib-database') api project(":lib-ihttp-core") implementation libs.door.runtime implementation project(":lib-util") implementation libs.xmlpullparsekmp implementation libs.atomicfu implementation libs.kotlinx.datetime api libs.kotlinxio.core api libs.xmlutil.core api libs.xmlutil.serialization api libs.precompose api libs.precompose.viewmodel api libs.multiplatformsettings api libs.cache4k implementation libs.urlencoder implementation libs.kotlin.csv implementation libs.kmp.uuid } } commonJvmMain { dependsOn commonMain dependencies { implementation kotlin('stdlib-common') implementation project(":lib-database") implementation project(":lib-cache") implementation project(":lib-ihttp-okhttp") implementation project(":lib-ihttp-nanohttpd") implementation libs.coroutines implementation libs.ktor.client.okhttp implementation libs.kodein.di implementation libs.kotlinx.serialization implementation libs.okhttp api libs.ktor.serialization.kotlinx.json compileOnly libs.kxml2 implementation libs.nanohttpd implementation libs.nanohttpd.nanolets implementation libs.lz4.pure.java } } commonTest { dependencies { implementation kotlin('test-common') implementation kotlin('test-annotations-common') implementation libs.coroutines.test } } jvmMain { dependsOn commonMain dependsOn commonJvmMain resources.srcDirs += ["src/main/assets"] dependencies { implementation libs.pdfbox implementation libs.jsoup implementation libs.okhttp implementation libs.quartz implementation libs.ktor.server.core implementation libs.kodein.di.framework.ktor.server.jvm implementation libs.javaffmpeg implementation libs.libphonenumber.google implementation libs.thumbnailator implementation libs.webpimageio implementation("com.jcabi:jcabi-manifests:$version_jcabi_manifests") { exclude group: "org.mockito" exclude group: "org.mockito.kotlin" } implementation libs.semver implementation libs.vlcj } } jvmTest { dependencies { implementation libs.kotlin.test implementation libs.kotlin.test.junit implementation libs.mockito.kotlin implementation libs.klock implementation libs.junit implementation libs.ktor.server.content.negotiation implementation project(":sharedse") implementation project(":lib-test-common") implementation project(":app-ktor-server") implementation libs.simplejndi implementation libs.apache.commons.pool2 implementation libs.sqlite.jdbc implementation libs.commons.dbcp2 api libs.nanohttpd api libs.nanohttpd.nanolets implementation libs.mockwebserver implementation libs.ktor.server.netty implementation libs.kodein.di.framework.ktor.server.jvm implementation libs.byte.buddy implementation libs.turbine implementation libs.ktor.server.call.logging } } androidMain { dependsOn commonJvmMain dependencies { implementation libs.kotlin.stdlib.jdk8 implementation libs.kotlinx.coroutines.android implementation libs.androidx.lifecycle.livedata.ktx implementation libs.androidx.lifecycle.viewmodel.ktx implementation libs.androidx.room.runtime implementation libs.androidx.appcompat implementation libs.androidx.legacy.support.v4 //Seems to fix things when we put a specific dependency here implementation libs.androidx.coordinatorlayout implementation libs.androidx.recyclerview implementation libs.androidx.room.runtime implementation(libs.androidx.paging.runtime) implementation libs.androidx.work.runtime implementation libs.androidx.work.runtime.ktx implementation libs.jsoup //Image loading library implementation libs.picasso implementation libs.ktor.client.android //dependency injection implementation libs.kodein.di.framework.android.x implementation libs.okhttp implementation libs.androidx.navigation.fragment.ktx implementation libs.androidx.navigation.ui.ktx implementation libs.android.material implementation libs.libphonenumber.android implementation libs.process.phoenix implementation libs.compressor implementation libs.coil implementation libs.androidx.browser implementation libs.androidx.media3.transformer implementation libs.androidx.media3.effect implementation libs.androidx.media3.common implementation libs.httpoveripc.core implementation libs.httpoveripc.server implementation libs.rawhttp.core } } androidUnitTest { dependencies { implementation libs.kotlin.test implementation libs.kotlin.test.junit implementation libs.androidx.test.runner implementation libs.junit implementation libs.robolectric implementation libs.androidx.test.core } } jsMain { //Note: if dependsOn commonMain is not explicitly added below, MokoResources will not // generate string resources for JS as required. dependsOn commonMain dependencies { implementation libs.ktor.client.js implementation libs.ktor.client.json.js implementation libs.ktor.client.serialization.js implementation enforcedPlatform("org.jetbrains.kotlin-wrappers:kotlin-wrappers-bom:$kotlinWrappersVersion") implementation libs.kotlin.wrappers.kotlin.extensions implementation libs.kotlin.wrappers.kotlin.react implementation libs.kotlin.wrappers.kotlin.react.router.dom implementation npm("libphonenumber-js", "$version_npm_libphonenumber_js") implementation npm("uuid", "$version_npm_uuid") implementation npm("compressorjs", "$version_compressorjs") implementation npm("xxhashjs", "$version_npm_xxhash") implementation npm("cuint", "$version_npm_cuint") } } jsTest { dependencies { implementation kotlin('test-js') } } } } dependencies { coreLibraryDesugaring libs.android.desugar.libs } afterEvaluate { } publishing { publications { maven(MavenPublication) { groupId rootProject.group artifactId project.name version rootProject.version } } repositories { maven { url rootProject.ext.buildConfigProperties['repo.dir'] } } } multiplatformResources { multiplatformResourcesPackage = "com.ustadmobile.core" iosBaseLocalizationRegion = "en" }