From e921bc33260493fb54c8f171ebf237b09470e4cb Mon Sep 17 00:00:00 2001 From: Sebastian Neubauer Date: Sun, 19 Apr 2026 16:03:53 +0000 Subject: [PATCH 1/4] Migrate to Gradle 9 --- androidApp/.gitignore | 1 + androidApp/build.gradle.kts | 41 ++++++++++ androidApp/proguard-rules.pro | 21 +++++ .../src/main}/AndroidManifest.xml | 0 .../jsontreesample/MainActivity.kt | 0 .../drawable-v24/ic_launcher_foreground.xml | 0 .../res/drawable/ic_launcher_background.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../src/main}/res/mipmap-hdpi/ic_launcher.png | Bin .../res/mipmap-hdpi/ic_launcher_round.png | Bin .../src/main}/res/mipmap-mdpi/ic_launcher.png | Bin .../res/mipmap-mdpi/ic_launcher_round.png | Bin .../main}/res/mipmap-xhdpi/ic_launcher.png | Bin .../res/mipmap-xhdpi/ic_launcher_round.png | Bin .../main}/res/mipmap-xxhdpi/ic_launcher.png | Bin .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin .../main}/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin .../src/main}/res/values/strings.xml | 0 build.gradle.kts | 2 +- gradle/libs.versions.toml | 4 +- gradle/wrapper/gradle-wrapper.properties | 2 +- jsontree/build.gradle.kts | 70 +++++++++-------- sample/build.gradle.kts | 74 +++++++++--------- sample/src/commonMain/kotlin/App.kt | 2 +- settings.gradle.kts | 1 + 27 files changed, 147 insertions(+), 71 deletions(-) create mode 100644 androidApp/.gitignore create mode 100644 androidApp/build.gradle.kts create mode 100644 androidApp/proguard-rules.pro rename {sample/src/androidMain => androidApp/src/main}/AndroidManifest.xml (100%) rename {sample/src/androidMain => androidApp/src/main}/kotlin/com/sebastianneubauer/jsontreesample/MainActivity.kt (100%) rename {sample/src/androidMain => androidApp/src/main}/res/drawable-v24/ic_launcher_foreground.xml (100%) rename {sample/src/androidMain => androidApp/src/main}/res/drawable/ic_launcher_background.xml (100%) rename {sample/src/androidMain => androidApp/src/main}/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {sample/src/androidMain => androidApp/src/main}/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename {sample/src/androidMain => androidApp/src/main}/res/mipmap-hdpi/ic_launcher.png (100%) rename {sample/src/androidMain => androidApp/src/main}/res/mipmap-hdpi/ic_launcher_round.png (100%) rename {sample/src/androidMain => androidApp/src/main}/res/mipmap-mdpi/ic_launcher.png (100%) rename {sample/src/androidMain => androidApp/src/main}/res/mipmap-mdpi/ic_launcher_round.png (100%) rename {sample/src/androidMain => androidApp/src/main}/res/mipmap-xhdpi/ic_launcher.png (100%) rename {sample/src/androidMain => androidApp/src/main}/res/mipmap-xhdpi/ic_launcher_round.png (100%) rename {sample/src/androidMain => androidApp/src/main}/res/mipmap-xxhdpi/ic_launcher.png (100%) rename {sample/src/androidMain => androidApp/src/main}/res/mipmap-xxhdpi/ic_launcher_round.png (100%) rename {sample/src/androidMain => androidApp/src/main}/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename {sample/src/androidMain => androidApp/src/main}/res/mipmap-xxxhdpi/ic_launcher_round.png (100%) rename {sample/src/androidMain => androidApp/src/main}/res/values/strings.xml (100%) diff --git a/androidApp/.gitignore b/androidApp/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/androidApp/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts new file mode 100644 index 0000000..04503ea --- /dev/null +++ b/androidApp/build.gradle.kts @@ -0,0 +1,41 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.compose.compiler) +} + +android { + namespace = "com.sebastianneubauer.jsontreesample.androidapp" + compileSdk = 36 + + defaultConfig { + minSdk = 23 + targetSdk = 36 + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = true + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + // for testing only, don't do this in your app + signingConfig = signingConfigs.getByName("debug") + } + + getByName("debug") { + applicationIdSuffix = ".debug" + signingConfig = signingConfigs.getByName("debug") + } + } + buildFeatures { + compose = true + } +} + +dependencies { + implementation(project(":sample")) + implementation(libs.androidx.activity.compose) +} \ No newline at end of file diff --git a/androidApp/proguard-rules.pro b/androidApp/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/androidApp/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/sample/src/androidMain/AndroidManifest.xml b/androidApp/src/main/AndroidManifest.xml similarity index 100% rename from sample/src/androidMain/AndroidManifest.xml rename to androidApp/src/main/AndroidManifest.xml diff --git a/sample/src/androidMain/kotlin/com/sebastianneubauer/jsontreesample/MainActivity.kt b/androidApp/src/main/kotlin/com/sebastianneubauer/jsontreesample/MainActivity.kt similarity index 100% rename from sample/src/androidMain/kotlin/com/sebastianneubauer/jsontreesample/MainActivity.kt rename to androidApp/src/main/kotlin/com/sebastianneubauer/jsontreesample/MainActivity.kt diff --git a/sample/src/androidMain/res/drawable-v24/ic_launcher_foreground.xml b/androidApp/src/main/res/drawable-v24/ic_launcher_foreground.xml similarity index 100% rename from sample/src/androidMain/res/drawable-v24/ic_launcher_foreground.xml rename to androidApp/src/main/res/drawable-v24/ic_launcher_foreground.xml diff --git a/sample/src/androidMain/res/drawable/ic_launcher_background.xml b/androidApp/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from sample/src/androidMain/res/drawable/ic_launcher_background.xml rename to androidApp/src/main/res/drawable/ic_launcher_background.xml diff --git a/sample/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml b/androidApp/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from sample/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml rename to androidApp/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/sample/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml b/androidApp/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from sample/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to androidApp/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/sample/src/androidMain/res/mipmap-hdpi/ic_launcher.png b/androidApp/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from sample/src/androidMain/res/mipmap-hdpi/ic_launcher.png rename to androidApp/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/sample/src/androidMain/res/mipmap-hdpi/ic_launcher_round.png b/androidApp/src/main/res/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from sample/src/androidMain/res/mipmap-hdpi/ic_launcher_round.png rename to androidApp/src/main/res/mipmap-hdpi/ic_launcher_round.png diff --git a/sample/src/androidMain/res/mipmap-mdpi/ic_launcher.png b/androidApp/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from sample/src/androidMain/res/mipmap-mdpi/ic_launcher.png rename to androidApp/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/sample/src/androidMain/res/mipmap-mdpi/ic_launcher_round.png b/androidApp/src/main/res/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from sample/src/androidMain/res/mipmap-mdpi/ic_launcher_round.png rename to androidApp/src/main/res/mipmap-mdpi/ic_launcher_round.png diff --git a/sample/src/androidMain/res/mipmap-xhdpi/ic_launcher.png b/androidApp/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from sample/src/androidMain/res/mipmap-xhdpi/ic_launcher.png rename to androidApp/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/sample/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.png b/androidApp/src/main/res/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from sample/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.png rename to androidApp/src/main/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/sample/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png b/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from sample/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png rename to androidApp/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/sample/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.png b/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from sample/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.png rename to androidApp/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/sample/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png b/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from sample/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png rename to androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/sample/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.png b/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from sample/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.png rename to androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/sample/src/androidMain/res/values/strings.xml b/androidApp/src/main/res/values/strings.xml similarity index 100% rename from sample/src/androidMain/res/values/strings.xml rename to androidApp/src/main/res/values/strings.xml diff --git a/build.gradle.kts b/build.gradle.kts index 8449155..e5ce7f0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,13 +8,13 @@ buildscript { plugins { alias(libs.plugins.android.application).apply(false) - alias(libs.plugins.android.library).apply(false) alias(libs.plugins.kotlinMultiplatform).apply(false) alias(libs.plugins.compose).apply(false) alias(libs.plugins.compose.compiler).apply(false) alias(libs.plugins.publish).apply(false) alias(libs.plugins.api.validator) alias(libs.plugins.detekt) + alias(libs.plugins.androidKotlinMultiplatformLibrary) apply false } apiValidation { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 61c2a16..6ecd186 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ java-toolchain = "17" compose = "1.10.3" compose-material3 = "1.9.0" -agp = "8.13.2" +agp = "9.1.1" kotlin = "2.3.20" publish = "0.36.0" api-validator = "0.18.1" @@ -40,9 +40,9 @@ kotlindiff = { module = "io.github.petertrr:kotlin-multiplatform-diff", version. detekt-formatting = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" } [plugins] -android-library = { id = "com.android.library", version.ref = "agp" } android-application = { id = "com.android.application", version.ref = "agp" } kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } +androidKotlinMultiplatformLibrary = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" } compose = { id = "org.jetbrains.compose", version.ref = "compose" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } publish = { id = "com.vanniktech.maven.publish", version.ref = "publish" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 23449a2..37f78a6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/jsontree/build.gradle.kts b/jsontree/build.gradle.kts index 4bf9c81..200c7fe 100644 --- a/jsontree/build.gradle.kts +++ b/jsontree/build.gradle.kts @@ -4,7 +4,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree plugins { alias(libs.plugins.kotlinMultiplatform) - alias(libs.plugins.android.library) + alias(libs.plugins.androidKotlinMultiplatformLibrary) alias(libs.plugins.compose) alias(libs.plugins.compose.compiler) alias(libs.plugins.publish) @@ -12,11 +12,19 @@ plugins { kotlin { jvm() - androidTarget { - publishLibraryVariants("release") - @OptIn(ExperimentalKotlinGradlePluginApi::class) - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + android { + namespace = "com.sebastianneubauer.jsontree" + compileSdk = libs.versions.android.compileSdk.get().toInt() + minSdk = libs.versions.android.minSdk.get().toInt() + aarMetadata { + minCompileSdk = libs.versions.android.minSdk.get().toInt() + } } +// androidTarget { +// publishLibraryVariants("release") +// @OptIn(ExperimentalKotlinGradlePluginApi::class) +// instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) +// } iosX64() iosArm64() iosSimulatorArm64() @@ -75,30 +83,30 @@ kotlin { } } } +// TODO: move UI tests and dependencies to androidApp module? +//dependencies { +// implementation(libs.kotlinx.coroutines.test) +// androidTestImplementation(libs.androidx.compose.ui.test.android) +// debugImplementation(libs.androidx.compose.ui.test.manifest) +//} -dependencies { - implementation(libs.kotlinx.coroutines.test) - androidTestImplementation(libs.androidx.compose.ui.test.android) - debugImplementation(libs.androidx.compose.ui.test.manifest) -} - -android { - namespace = "com.sebastianneubauer.jsontree" - compileSdk = libs.versions.android.compileSdk.get().toInt() - buildFeatures { - buildConfig = false - compose = true - } - defaultConfig { - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - minSdk = libs.versions.android.minSdk.get().toInt() - aarMetadata { - minCompileSdk = libs.versions.android.minSdk.get().toInt() - } - } - - // fixes lint error in release builds for compose 1.9.3 - lint { - disable.add("NullSafeMutableLiveData") - } -} \ No newline at end of file +//android { +// namespace = "com.sebastianneubauer.jsontree" +// compileSdk = libs.versions.android.compileSdk.get().toInt() +// buildFeatures { +// buildConfig = false +// compose = true +// } +// defaultConfig { +// testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" +// minSdk = libs.versions.android.minSdk.get().toInt() +// aarMetadata { +// minCompileSdk = libs.versions.android.minSdk.get().toInt() +// } +// } +// +// // fixes lint error in release builds for compose 1.9.3 +// lint { +// disable.add("NullSafeMutableLiveData") +// } +//} \ No newline at end of file diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index bd1ed97..6c197ed 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -2,8 +2,8 @@ import org.jetbrains.compose.desktop.application.dsl.TargetFormat import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl plugins { - alias(libs.plugins.android.application) alias(libs.plugins.kotlinMultiplatform) + alias(libs.plugins.androidKotlinMultiplatformLibrary) alias(libs.plugins.compose) alias(libs.plugins.compose.compiler) } @@ -12,7 +12,11 @@ group = "com.sebastianneubauer.jsontreesample" version = "1.0" kotlin { - androidTarget() + android { + namespace = "com.sebastianneubauer.jsontreesample" + compileSdk = 36 + minSdk = 23 + } jvm() @@ -79,39 +83,39 @@ kotlin { jvmToolchain(17) } -android { - namespace = "com.sebastianneubauer.jsontreesample" - compileSdk = 36 - - defaultConfig { - minSdk = 23 - targetSdk = 36 - } - sourceSets["main"].apply { - manifest.srcFile("src/androidMain/AndroidManifest.xml") - res.srcDirs("src/androidMain/res") - } - buildTypes { - getByName("release") { - isMinifyEnabled = true - proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") - //for testing only, don't do this in your app - signingConfig = signingConfigs.getByName("debug") - } - getByName("debug") { - applicationIdSuffix = ".debug" - signingConfig = signingConfigs.getByName("debug") - } - } - buildFeatures { - compose = true - } - - // fixes lint error in release builds for compose 1.9.3 - lint { - disable.add("NullSafeMutableLiveData") - } -} +//android { +// namespace = "com.sebastianneubauer.jsontreesample" +// compileSdk = 36 +// +// defaultConfig { +// minSdk = 23 +// targetSdk = 36 +// } +// sourceSets["main"].apply { +// manifest.srcFile("src/androidMain/AndroidManifest.xml") +// res.srcDirs("src/androidMain/res") +// } +// buildTypes { +// getByName("release") { +// isMinifyEnabled = true +// proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") +// //for testing only, don't do this in your app +// signingConfig = signingConfigs.getByName("debug") +// } +// getByName("debug") { +// applicationIdSuffix = ".debug" +// signingConfig = signingConfigs.getByName("debug") +// } +// } +// buildFeatures { +// compose = true +// } +// +// // fixes lint error in release builds for compose 1.9.3 +// lint { +// disable.add("NullSafeMutableLiveData") +// } +//} compose.desktop { application { diff --git a/sample/src/commonMain/kotlin/App.kt b/sample/src/commonMain/kotlin/App.kt index 4100786..df30772 100644 --- a/sample/src/commonMain/kotlin/App.kt +++ b/sample/src/commonMain/kotlin/App.kt @@ -62,7 +62,7 @@ import kotlinx.coroutines.launch import org.jetbrains.compose.resources.painterResource @Composable -internal fun App() = JsonTreeTheme(darkTheme = false) { +fun App() = JsonTreeTheme(darkTheme = false) { MainScreen() } diff --git a/settings.gradle.kts b/settings.gradle.kts index e4cfb01..8212c51 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -14,3 +14,4 @@ dependencyResolutionManagement { rootProject.name = "JsonTree" include(":jsontree") include(":sample") +include(":androidApp") From c06c8b5e02b120cf5d03fcf15f947dd1e0554b46 Mon Sep 17 00:00:00 2001 From: Sebastian Neubauer Date: Sun, 19 Apr 2026 17:07:17 +0000 Subject: [PATCH 2/4] Add package and enable resources --- androidApp/build.gradle.kts | 5 ++++- jsontree/build.gradle.kts | 4 +++- sample/build.gradle.kts | 12 +++++------- .../sebastianneubauer/jsontreesample}/App.kt | 7 ++++--- .../sebastianneubauer/jsontreesample}/JsonStrings.kt | 0 .../jsontreesample}/JsonTreeDiffStrings.kt | 0 .../jsontreesample}/ui/theme/Color.kt | 0 .../jsontreesample}/ui/theme/Shape.kt | 0 .../jsontreesample}/ui/theme/Theme.kt | 3 +++ .../jsontreesample}/ui/theme/Type.kt | 0 .../sebastianneubauer/jsontreesample}/main.kt | 2 ++ .../sebastianneubauer/jsontreesample}/main.js.kt | 3 ++- .../sebastianneubauer/jsontreesample}/main.kt | 3 ++- .../sebastianneubauer/jsontreesample}/main.wasm.kt | 3 ++- 14 files changed, 27 insertions(+), 15 deletions(-) rename sample/src/commonMain/kotlin/{ => com/sebastianneubauer/jsontreesample}/App.kt (99%) rename sample/src/commonMain/kotlin/{ => com/sebastianneubauer/jsontreesample}/JsonStrings.kt (100%) rename sample/src/commonMain/kotlin/{ => com/sebastianneubauer/jsontreesample}/JsonTreeDiffStrings.kt (100%) rename sample/src/commonMain/kotlin/{ => com/sebastianneubauer/jsontreesample}/ui/theme/Color.kt (100%) rename sample/src/commonMain/kotlin/{ => com/sebastianneubauer/jsontreesample}/ui/theme/Shape.kt (100%) rename sample/src/commonMain/kotlin/{ => com/sebastianneubauer/jsontreesample}/ui/theme/Theme.kt (85%) rename sample/src/commonMain/kotlin/{ => com/sebastianneubauer/jsontreesample}/ui/theme/Type.kt (100%) rename sample/src/iosMain/kotlin/{ => com/sebastianneubauer/jsontreesample}/main.kt (83%) rename sample/src/jsMain/kotlin/{ => com/sebastianneubauer/jsontreesample}/main.js.kt (87%) rename sample/src/jvmMain/kotlin/{ => com/sebastianneubauer/jsontreesample}/main.kt (90%) rename sample/src/wasmJsMain/kotlin/{ => com/sebastianneubauer/jsontreesample}/main.wasm.kt (91%) diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts index 04503ea..e1ed592 100644 --- a/androidApp/build.gradle.kts +++ b/androidApp/build.gradle.kts @@ -1,13 +1,15 @@ plugins { alias(libs.plugins.android.application) + alias(libs.plugins.compose) alias(libs.plugins.compose.compiler) } android { - namespace = "com.sebastianneubauer.jsontreesample.androidapp" + namespace = "com.sebastianneubauer.jsontreesample" compileSdk = 36 defaultConfig { + applicationId = "com.sebastianneubauer.jsontreesample" minSdk = 23 targetSdk = 36 @@ -38,4 +40,5 @@ android { dependencies { implementation(project(":sample")) implementation(libs.androidx.activity.compose) + implementation(libs.jb.compose.components.resources) } \ No newline at end of file diff --git a/jsontree/build.gradle.kts b/jsontree/build.gradle.kts index 200c7fe..17054d2 100644 --- a/jsontree/build.gradle.kts +++ b/jsontree/build.gradle.kts @@ -19,6 +19,8 @@ kotlin { aarMetadata { minCompileSdk = libs.versions.android.minSdk.get().toInt() } + + androidResources.enable = true } // androidTarget { // publishLibraryVariants("release") @@ -83,7 +85,7 @@ kotlin { } } } -// TODO: move UI tests and dependencies to androidApp module? + //dependencies { // implementation(libs.kotlinx.coroutines.test) // androidTestImplementation(libs.androidx.compose.ui.test.android) diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index 6c197ed..b98ca9b 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -13,9 +13,11 @@ version = "1.0" kotlin { android { - namespace = "com.sebastianneubauer.jsontreesample" + namespace = "com.sebastianneubauer.jsontreesample.shared" compileSdk = 36 minSdk = 23 + + androidResources.enable = true } jvm() @@ -65,11 +67,6 @@ kotlin { implementation(kotlin("test")) } - androidMain.dependencies { - implementation(libs.jb.compose.ui.tooling) - implementation(libs.androidx.activity.compose) - } - jvmMain.dependencies { implementation(compose.desktop.currentOs) } @@ -117,9 +114,10 @@ kotlin { // } //} + compose.desktop { application { - mainClass = "MainKt" + mainClass = "com.sebastianneubauer.jsontreesample.MainKt" buildTypes.release { proguard { configurationFiles.from("compose-desktop.pro") diff --git a/sample/src/commonMain/kotlin/App.kt b/sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/App.kt similarity index 99% rename from sample/src/commonMain/kotlin/App.kt rename to sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/App.kt index df30772..34f2c03 100644 --- a/sample/src/commonMain/kotlin/App.kt +++ b/sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/App.kt @@ -444,6 +444,7 @@ private fun JsonDiff( @Preview @Composable -private fun PreviewMainScreen() = JsonTreeTheme { - MainScreen() -} \ No newline at end of file +private fun PreviewMainScreen() = + JsonTreeTheme { + MainScreen() + } \ No newline at end of file diff --git a/sample/src/commonMain/kotlin/JsonStrings.kt b/sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/JsonStrings.kt similarity index 100% rename from sample/src/commonMain/kotlin/JsonStrings.kt rename to sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/JsonStrings.kt diff --git a/sample/src/commonMain/kotlin/JsonTreeDiffStrings.kt b/sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/JsonTreeDiffStrings.kt similarity index 100% rename from sample/src/commonMain/kotlin/JsonTreeDiffStrings.kt rename to sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/JsonTreeDiffStrings.kt diff --git a/sample/src/commonMain/kotlin/ui/theme/Color.kt b/sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/ui/theme/Color.kt similarity index 100% rename from sample/src/commonMain/kotlin/ui/theme/Color.kt rename to sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/ui/theme/Color.kt diff --git a/sample/src/commonMain/kotlin/ui/theme/Shape.kt b/sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/ui/theme/Shape.kt similarity index 100% rename from sample/src/commonMain/kotlin/ui/theme/Shape.kt rename to sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/ui/theme/Shape.kt diff --git a/sample/src/commonMain/kotlin/ui/theme/Theme.kt b/sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/ui/theme/Theme.kt similarity index 85% rename from sample/src/commonMain/kotlin/ui/theme/Theme.kt rename to sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/ui/theme/Theme.kt index 3c35e58..511f706 100644 --- a/sample/src/commonMain/kotlin/ui/theme/Theme.kt +++ b/sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/ui/theme/Theme.kt @@ -5,6 +5,9 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable +import com.sebastianneubauer.jsontreesample.ui.theme.Purple200 +import com.sebastianneubauer.jsontreesample.ui.theme.Purple500 +import com.sebastianneubauer.jsontreesample.ui.theme.Teal200 private val DarkColorPalette = darkColorScheme( primary = Purple200, diff --git a/sample/src/commonMain/kotlin/ui/theme/Type.kt b/sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/ui/theme/Type.kt similarity index 100% rename from sample/src/commonMain/kotlin/ui/theme/Type.kt rename to sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/ui/theme/Type.kt diff --git a/sample/src/iosMain/kotlin/main.kt b/sample/src/iosMain/kotlin/com/sebastianneubauer/jsontreesample/main.kt similarity index 83% rename from sample/src/iosMain/kotlin/main.kt rename to sample/src/iosMain/kotlin/com/sebastianneubauer/jsontreesample/main.kt index e4d28f7..628d527 100644 --- a/sample/src/iosMain/kotlin/main.kt +++ b/sample/src/iosMain/kotlin/com/sebastianneubauer/jsontreesample/main.kt @@ -1,3 +1,5 @@ +package com.sebastianneubauer.jsontreesample + import androidx.compose.ui.window.ComposeUIViewController import com.sebastianneubauer.jsontreesample.App import platform.UIKit.UIViewController diff --git a/sample/src/jsMain/kotlin/main.js.kt b/sample/src/jsMain/kotlin/com/sebastianneubauer/jsontreesample/main.js.kt similarity index 87% rename from sample/src/jsMain/kotlin/main.js.kt rename to sample/src/jsMain/kotlin/com/sebastianneubauer/jsontreesample/main.js.kt index 48b2306..5e70eae 100644 --- a/sample/src/jsMain/kotlin/main.js.kt +++ b/sample/src/jsMain/kotlin/com/sebastianneubauer/jsontreesample/main.js.kt @@ -1,6 +1,7 @@ +package com.sebastianneubauer.jsontreesample + import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.window.ComposeViewport -import com.sebastianneubauer.jsontreesample.App import kotlinx.browser.document import org.jetbrains.skiko.wasm.onWasmReady diff --git a/sample/src/jvmMain/kotlin/main.kt b/sample/src/jvmMain/kotlin/com/sebastianneubauer/jsontreesample/main.kt similarity index 90% rename from sample/src/jvmMain/kotlin/main.kt rename to sample/src/jvmMain/kotlin/com/sebastianneubauer/jsontreesample/main.kt index 8ebcf1a..6753ea4 100644 --- a/sample/src/jvmMain/kotlin/main.kt +++ b/sample/src/jvmMain/kotlin/com/sebastianneubauer/jsontreesample/main.kt @@ -1,8 +1,9 @@ +package com.sebastianneubauer.jsontreesample + import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Window import androidx.compose.ui.window.application import androidx.compose.ui.window.rememberWindowState -import com.sebastianneubauer.jsontreesample.App import java.awt.Dimension fun main() = application { diff --git a/sample/src/wasmJsMain/kotlin/main.wasm.kt b/sample/src/wasmJsMain/kotlin/com/sebastianneubauer/jsontreesample/main.wasm.kt similarity index 91% rename from sample/src/wasmJsMain/kotlin/main.wasm.kt rename to sample/src/wasmJsMain/kotlin/com/sebastianneubauer/jsontreesample/main.wasm.kt index 7a337c1..98ce44d 100644 --- a/sample/src/wasmJsMain/kotlin/main.wasm.kt +++ b/sample/src/wasmJsMain/kotlin/com/sebastianneubauer/jsontreesample/main.wasm.kt @@ -1,6 +1,7 @@ +package com.sebastianneubauer.jsontreesample + import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.window.ComposeViewport -import com.sebastianneubauer.jsontreesample.App import kotlinx.browser.document import org.jetbrains.compose.resources.ExperimentalResourceApi import org.jetbrains.compose.resources.configureWebResources From 8c18c3b6dd51e17cf1112751f220501c73a5b680 Mon Sep 17 00:00:00 2001 From: Sebastian Neubauer Date: Sat, 25 Apr 2026 13:12:52 +0000 Subject: [PATCH 3/4] Remove old code --- .idea/runConfigurations/iosApp.xml | 7 ---- androidApp/build.gradle.kts | 1 + jsontree/build.gradle.kts | 38 ++----------------- sample/build.gradle.kts | 35 ----------------- .../jsontreesample/ui/theme/Theme.kt | 3 -- 5 files changed, 5 insertions(+), 79 deletions(-) delete mode 100644 .idea/runConfigurations/iosApp.xml diff --git a/.idea/runConfigurations/iosApp.xml b/.idea/runConfigurations/iosApp.xml deleted file mode 100644 index 296ddc1..0000000 --- a/.idea/runConfigurations/iosApp.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts index e1ed592..2275972 100644 --- a/androidApp/build.gradle.kts +++ b/androidApp/build.gradle.kts @@ -19,6 +19,7 @@ android { buildTypes { release { isMinifyEnabled = true + isShrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" diff --git a/jsontree/build.gradle.kts b/jsontree/build.gradle.kts index 17054d2..65fa97a 100644 --- a/jsontree/build.gradle.kts +++ b/jsontree/build.gradle.kts @@ -11,7 +11,6 @@ plugins { } kotlin { - jvm() android { namespace = "com.sebastianneubauer.jsontree" compileSdk = libs.versions.android.compileSdk.get().toInt() @@ -22,11 +21,9 @@ kotlin { androidResources.enable = true } -// androidTarget { -// publishLibraryVariants("release") -// @OptIn(ExperimentalKotlinGradlePluginApi::class) -// instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) -// } + + jvm() + iosX64() iosArm64() iosSimulatorArm64() @@ -84,31 +81,4 @@ kotlin { implementation(compose.desktop.currentOs) } } -} - -//dependencies { -// implementation(libs.kotlinx.coroutines.test) -// androidTestImplementation(libs.androidx.compose.ui.test.android) -// debugImplementation(libs.androidx.compose.ui.test.manifest) -//} - -//android { -// namespace = "com.sebastianneubauer.jsontree" -// compileSdk = libs.versions.android.compileSdk.get().toInt() -// buildFeatures { -// buildConfig = false -// compose = true -// } -// defaultConfig { -// testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" -// minSdk = libs.versions.android.minSdk.get().toInt() -// aarMetadata { -// minCompileSdk = libs.versions.android.minSdk.get().toInt() -// } -// } -// -// // fixes lint error in release builds for compose 1.9.3 -// lint { -// disable.add("NullSafeMutableLiveData") -// } -//} \ No newline at end of file +} \ No newline at end of file diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index b98ca9b..df4735c 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -80,41 +80,6 @@ kotlin { jvmToolchain(17) } -//android { -// namespace = "com.sebastianneubauer.jsontreesample" -// compileSdk = 36 -// -// defaultConfig { -// minSdk = 23 -// targetSdk = 36 -// } -// sourceSets["main"].apply { -// manifest.srcFile("src/androidMain/AndroidManifest.xml") -// res.srcDirs("src/androidMain/res") -// } -// buildTypes { -// getByName("release") { -// isMinifyEnabled = true -// proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") -// //for testing only, don't do this in your app -// signingConfig = signingConfigs.getByName("debug") -// } -// getByName("debug") { -// applicationIdSuffix = ".debug" -// signingConfig = signingConfigs.getByName("debug") -// } -// } -// buildFeatures { -// compose = true -// } -// -// // fixes lint error in release builds for compose 1.9.3 -// lint { -// disable.add("NullSafeMutableLiveData") -// } -//} - - compose.desktop { application { mainClass = "com.sebastianneubauer.jsontreesample.MainKt" diff --git a/sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/ui/theme/Theme.kt b/sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/ui/theme/Theme.kt index 511f706..3c35e58 100644 --- a/sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/ui/theme/Theme.kt +++ b/sample/src/commonMain/kotlin/com/sebastianneubauer/jsontreesample/ui/theme/Theme.kt @@ -5,9 +5,6 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable -import com.sebastianneubauer.jsontreesample.ui.theme.Purple200 -import com.sebastianneubauer.jsontreesample.ui.theme.Purple500 -import com.sebastianneubauer.jsontreesample.ui.theme.Teal200 private val DarkColorPalette = darkColorScheme( primary = Purple200, From f9465dc6edc5d6e5a79787c6693a1585fa50ef15 Mon Sep 17 00:00:00 2001 From: Sebastian Neubauer Date: Sat, 25 Apr 2026 13:28:40 +0000 Subject: [PATCH 4/4] fix detekt --- .../kotlin/com/sebastianneubauer/jsontreesample/MainActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/androidApp/src/main/kotlin/com/sebastianneubauer/jsontreesample/MainActivity.kt b/androidApp/src/main/kotlin/com/sebastianneubauer/jsontreesample/MainActivity.kt index f85c22a..21e5182 100644 --- a/androidApp/src/main/kotlin/com/sebastianneubauer/jsontreesample/MainActivity.kt +++ b/androidApp/src/main/kotlin/com/sebastianneubauer/jsontreesample/MainActivity.kt @@ -11,4 +11,4 @@ class MainActivity : ComponentActivity() { enableEdgeToEdge() setContent { App() } } -} \ No newline at end of file +}