diff --git a/README.md b/README.md index a298bfd..aa3ca8e 100755 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ ![moko-parcelize](img/logo.png) -[![GitHub license](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0) [![Download](https://api.bintray.com/packages/icerockdev/moko/moko-parcelize/images/download.svg) ](https://bintray.com/icerockdev/moko/moko-parcelize/_latestVersion) ![kotlin-version](https://img.shields.io/badge/kotlin-1.3.70-orange) +[![GitHub license](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0) [![Download](https://api.bintray.com/packages/icerockdev/moko/moko-parcelize/images/download.svg) ](https://bintray.com/icerockdev/moko/moko-parcelize/_latestVersion) ![kotlin-version](https://img.shields.io/badge/kotlin-1.4.0-orange) # Mobile Kotlin parcelize This is a Kotlin Multiplatform library that supports Parcelize in common code. @@ -19,7 +19,7 @@ This is a Kotlin Multiplatform library that supports Parcelize in common code. - **Parcelize** in common code (specially for Android target). ## Requirements -- Gradle version 5.6.4+ +- Gradle version 6.0+ - Android API 16+ - iOS version 9.0+ @@ -30,6 +30,8 @@ This is a Kotlin Multiplatform library that supports Parcelize in common code. - 0.2.0 - kotlin 1.3.70 - 0.3.0 +- kotlin 1.4.0 + - 0.4.0 ## Installation root build.gradle @@ -44,7 +46,7 @@ allprojects { project build.gradle ```groovy dependencies { - commonMainApi("dev.icerock.moko:parcelize:0.3.0") + commonMainApi("dev.icerock.moko:parcelize:0.4.0") } ``` diff --git a/build.gradle.kts b/build.gradle.kts index 8b21163..fe62751 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,6 +2,17 @@ * Copyright 2019 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. */ +buildscript { + repositories { + jcenter() + google() + } + + dependencies { + plugin(Deps.Plugins.androidExtensions) + } +} + allprojects { repositories { mavenLocal() @@ -14,8 +25,12 @@ allprojects { maven { url = uri("https://dl.bintray.com/icerockdev/moko") } } - // workaround for https://youtrack.jetbrains.com/issue/KT-27170 - configurations.create("compileClasspath") + configurations.all { + resolutionStrategy.dependencySubstitution { + substitute(module(Deps.Libs.MultiPlatform.mokoParcelize.common)) + .with(project(":parcelize")) + } + } } tasks.register("clean", Delete::class).configure { diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index e258298..da86869 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -3,7 +3,7 @@ */ plugins { - `kotlin-dsl` + id("org.jetbrains.kotlin.jvm") version("1.4.0") } repositories { @@ -16,11 +16,7 @@ repositories { } dependencies { - implementation("dev.icerock:mobile-multiplatform:0.6.0") - implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.70") - implementation("com.android.tools.build:gradle:3.6.1") -} - -kotlinDslPluginOptions { - experimentalWarning.set(false) + implementation("dev.icerock:mobile-multiplatform:0.7.0") + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.0") + implementation("com.android.tools.build:gradle:4.0.1") } diff --git a/buildSrc/src/main/kotlin/Deps.kt b/buildSrc/src/main/kotlin/Deps.kt index 076928f..23dd02b 100755 --- a/buildSrc/src/main/kotlin/Deps.kt +++ b/buildSrc/src/main/kotlin/Deps.kt @@ -3,35 +3,42 @@ */ object Deps { + private const val kotlinVersion = "1.4.0" + private const val androidAppCompatVersion = "1.1.0" + const val mokoParcelizeVersion = "0.4.0" + + object Android { + const val compileSdk = 28 + const val targetSdk = 28 + const val minSdk = 16 + } + object Plugins { - const val androidExtensions = - "org.jetbrains.kotlin:kotlin-android-extensions:${Versions.Plugins.androidExtensions}" + val androidExtensions = GradlePlugin( + id = "kotlin-android-extensions", + module = "org.jetbrains.kotlin:kotlin-android-extensions:$kotlinVersion" + ) + val androidLibrary = GradlePlugin(id = "com.android.library") + val androidApplication = GradlePlugin(id = "com.android.application") + val kotlinMultiPlatform = GradlePlugin(id = "org.jetbrains.kotlin.multiplatform") + val kotlinAndroid = GradlePlugin(id = "kotlin-android") + val kotlinKapt = GradlePlugin(id = "kotlin-kapt") + val mobileMultiPlatform = GradlePlugin(id = "dev.icerock.mobile.multiplatform") + val iosFramework = GradlePlugin(id = "dev.icerock.mobile.multiplatform.ios-framework") + val mavenPublish = GradlePlugin(id = "maven-publish") } object Libs { object Android { - val kotlinStdLib = AndroidLibrary( - name = "org.jetbrains.kotlin:kotlin-stdlib:${Versions.kotlin}" - ) val appCompat = AndroidLibrary( - name = "androidx.appcompat:appcompat:${Versions.Libs.Android.appCompat}" + name = "androidx.appcompat:appcompat:$androidAppCompatVersion" ) } object MultiPlatform { - val kotlinStdLib = MultiPlatformLibrary( - android = Android.kotlinStdLib.name, - common = "org.jetbrains.kotlin:kotlin-stdlib-common:${Versions.kotlin}" - ) val mokoParcelize = MultiPlatformLibrary( - common = "dev.icerock.moko:parcelize:${Versions.Libs.MultiPlatform.mokoParcelize}", - iosX64 = "dev.icerock.moko:parcelize-iosx64:${Versions.Libs.MultiPlatform.mokoParcelize}", - iosArm64 = "dev.icerock.moko:parcelize-iosarm64:${Versions.Libs.MultiPlatform.mokoParcelize}" + common = "dev.icerock.moko:parcelize:$mokoParcelizeVersion" ) } } - - val plugins: Map = mapOf( - "kotlin-android-extensions" to Plugins.androidExtensions - ) } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt deleted file mode 100755 index 506a061..0000000 --- a/buildSrc/src/main/kotlin/Versions.kt +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2019 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. - */ - -object Versions { - object Android { - const val compileSdk = 28 - const val targetSdk = 28 - const val minSdk = 16 - } - - const val kotlin = "1.3.70" - - object Plugins { - const val kotlin = Versions.kotlin - const val androidExtensions = Versions.kotlin - } - - object Libs { - object Android { - const val appCompat = "1.1.0" - } - - object MultiPlatform { - const val mokoParcelize: String = "0.3.0" - } - } -} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 63dd12c..2ff1e3f 100755 --- a/gradle.properties +++ b/gradle.properties @@ -3,6 +3,8 @@ org.gradle.configureondemand=false org.gradle.parallel=true kotlin.code.style=official +kotlin.mpp.enableGranularSourceSetsMetadata=true +kotlin.native.enableDependencyPropagation=false android.useAndroidX=true android.enableJetifier=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf..e708b1c 100755 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5028f28..6c9a224 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 8e25e6c..4f906e0 100755 --- a/gradlew +++ b/gradlew @@ -82,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -125,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -154,19 +156,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -175,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 9618d8d..107acd3 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -51,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -61,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/parcelize/build.gradle.kts b/parcelize/build.gradle.kts index a6054a8..6fa0fee 100644 --- a/parcelize/build.gradle.kts +++ b/parcelize/build.gradle.kts @@ -3,29 +3,25 @@ */ plugins { - id("com.android.library") - id("org.jetbrains.kotlin.multiplatform") - id("kotlin-android-extensions") - id("dev.icerock.mobile.multiplatform") - id("maven-publish") + plugin(Deps.Plugins.androidLibrary) + plugin(Deps.Plugins.kotlinMultiPlatform) + plugin(Deps.Plugins.androidExtensions) + plugin(Deps.Plugins.mobileMultiPlatform) + plugin(Deps.Plugins.mavenPublish) } group = "dev.icerock.moko" -version = Versions.Libs.MultiPlatform.mokoParcelize +version = Deps.mokoParcelizeVersion android { - compileSdkVersion(Versions.Android.compileSdk) + compileSdkVersion(Deps.Android.compileSdk) defaultConfig { - minSdkVersion(Versions.Android.minSdk) - targetSdkVersion(Versions.Android.targetSdk) + minSdkVersion(Deps.Android.minSdk) + targetSdkVersion(Deps.Android.targetSdk) } } -dependencies { - mppLibrary(Deps.Libs.MultiPlatform.kotlinStdLib) -} - publishing { repositories.maven("https://api.bintray.com/maven/icerockdev/moko/moko-parcelize/;publish=1") { name = "bintray" diff --git a/parcelize/src/iosArm64Main b/parcelize/src/iosArm64Main deleted file mode 120000 index 93d7d74..0000000 --- a/parcelize/src/iosArm64Main +++ /dev/null @@ -1 +0,0 @@ -iosMain \ No newline at end of file diff --git a/parcelize/src/iosX64Main b/parcelize/src/iosX64Main deleted file mode 120000 index 93d7d74..0000000 --- a/parcelize/src/iosX64Main +++ /dev/null @@ -1 +0,0 @@ -iosMain \ No newline at end of file diff --git a/publishToMavenLocal.sh b/publishToMavenLocal.sh deleted file mode 100755 index a49e2ac..0000000 --- a/publishToMavenLocal.sh +++ /dev/null @@ -1 +0,0 @@ -./gradlew -PlibraryPublish :parcelize:publishToMavenLocal $* \ No newline at end of file diff --git a/sample/android-app/build.gradle.kts b/sample/android-app/build.gradle.kts index c057191..ab7d544 100644 --- a/sample/android-app/build.gradle.kts +++ b/sample/android-app/build.gradle.kts @@ -3,25 +3,23 @@ */ plugins { - id("com.android.application") - id("kotlin-android") - id("kotlin-kapt") + plugin(Deps.Plugins.androidApplication) + plugin(Deps.Plugins.kotlinAndroid) + plugin(Deps.Plugins.kotlinKapt) } android { - compileSdkVersion(Versions.Android.compileSdk) + compileSdkVersion(Deps.Android.compileSdk) - dataBinding { - isEnabled = true - } + buildFeatures.dataBinding = true dexOptions { javaMaxHeapSize = "2g" } defaultConfig { - minSdkVersion(Versions.Android.minSdk) - targetSdkVersion(Versions.Android.targetSdk) + minSdkVersion(Deps.Android.minSdk) + targetSdkVersion(Deps.Android.targetSdk) applicationId = "dev.icerock.moko.samples.parcelize" @@ -48,8 +46,6 @@ android { } dependencies { - implementation(Deps.Libs.Android.kotlinStdLib.name) - implementation(Deps.Libs.Android.appCompat.name) implementation(project(":sample:mpp-library")) diff --git a/sample/mpp-library/build.gradle.kts b/sample/mpp-library/build.gradle.kts index 5887fd1..42bd81f 100644 --- a/sample/mpp-library/build.gradle.kts +++ b/sample/mpp-library/build.gradle.kts @@ -3,24 +3,22 @@ */ plugins { - id("com.android.library") - id("org.jetbrains.kotlin.multiplatform") - id("dev.icerock.mobile.multiplatform") - id("kotlin-android-extensions") + plugin(Deps.Plugins.androidLibrary) + plugin(Deps.Plugins.kotlinMultiPlatform) + plugin(Deps.Plugins.mobileMultiPlatform) + plugin(Deps.Plugins.androidExtensions) + plugin(Deps.Plugins.iosFramework) } android { - compileSdkVersion(Versions.Android.compileSdk) + compileSdkVersion(Deps.Android.compileSdk) defaultConfig { - minSdkVersion(Versions.Android.minSdk) - targetSdkVersion(Versions.Android.targetSdk) + minSdkVersion(Deps.Android.minSdk) + targetSdkVersion(Deps.Android.targetSdk) } } -setupFramework(exports = emptyList()) - dependencies { - mppLibrary(Deps.Libs.MultiPlatform.kotlinStdLib) mppLibrary(Deps.Libs.MultiPlatform.mokoParcelize) } diff --git a/settings.gradle.kts b/settings.gradle.kts index b09b25b..fd3d048 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,30 +2,6 @@ * Copyright 2019 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. */ -pluginManagement { - repositories { - jcenter() - google() - - maven { url = uri("https://dl.bintray.com/kotlin/kotlin") } - maven { url = uri("https://kotlin.bintray.com/kotlinx") } - } - resolutionStrategy.eachPlugin { - val module = Deps.plugins[requested.id.id] ?: return@eachPlugin - - useModule(module) - } -} - -enableFeaturePreview("GRADLE_METADATA") - -val properties = startParameter.projectProperties - -// ./gradlew -PlibraryPublish publishToMavenLocal -val libraryPublish: Boolean = properties.containsKey("libraryPublish") - include(":parcelize") -if(!libraryPublish) { - include(":sample:android-app") - include(":sample:mpp-library") -} +include(":sample:android-app") +include(":sample:mpp-library")