From 02e46f36c2c7b44f55052488c3aa4465a4e4099f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20=C3=85man?= Date: Thu, 2 Jul 2020 14:14:02 +0200 Subject: [PATCH] Support for kotlin script as build.gradle files (fixes #20) (#21) --- README.md | 6 +- locallydynamic-android-lib/README.md | 4 +- locallydynamic-android-lib/deps.gradle | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../src/main/res/values/strings.xml | 2 +- .../src/main/res/values/strings.xml | 2 +- locallydynamic-gradle-plugin/README.md | 10 ++-- locallydynamic-gradle-plugin/deps.gradle | 7 +-- .../gradle.properties | 2 +- .../plugin/build.gradle | 2 +- .../gradle/extensions/BuildType.kt | 10 ++++ locallydynamic-studio-plugin/build.gradle | 9 ++- .../gradle.properties | 2 +- .../locallydynamic/idea/extensions/Module.kt | 57 ++----------------- 14 files changed, 42 insertions(+), 77 deletions(-) create mode 100644 locallydynamic-gradle-plugin/plugin/src/main/java/com/jeppeman/locallydynamic/gradle/extensions/BuildType.kt diff --git a/README.md b/README.md index 186b1f10..b3ee401c 100644 --- a/README.md +++ b/README.md @@ -48,8 +48,8 @@ buildscript { } } dependencies { - classpath "com.android.tools.build:gradle:3.6.1" // Compatible with 3.5 and above - classpath "com.jeppeman.locallydynamic.gradle:plugin:0.2" + classpath "com.android.tools.build:gradle:4.0.0" + classpath "com.jeppeman.locallydynamic.gradle:plugin:0.3" } } @@ -141,7 +141,7 @@ You can also have a look at the andr Compatibility --- -Compatible with Android Studio 3.5 and 3.6 as well as the Android Gradle Plugin 3.5 and 3.6 (support for 4 is coming soon) +Compatible with Android Studio 3.5 and above as well as the Android Gradle Plugin 3.5 and above Limitations --- diff --git a/locallydynamic-android-lib/README.md b/locallydynamic-android-lib/README.md index 3dacbb83..d5d9a0dc 100644 --- a/locallydynamic-android-lib/README.md +++ b/locallydynamic-android-lib/README.md @@ -45,8 +45,8 @@ buildscript { } } dependencies { - classpath "com.android.tools.build:gradle:3.5.3" // Compatible with 3.5 and above - classpath "com.jeppeman.locallydynamic.gradle:plugin:0.2" + classpath "com.android.tools.build:gradle:4.0.0" + classpath "com.jeppeman.locallydynamic.gradle:plugin:0.3" } } diff --git a/locallydynamic-android-lib/deps.gradle b/locallydynamic-android-lib/deps.gradle index 42b1d2c2..0d55e625 100644 --- a/locallydynamic-android-lib/deps.gradle +++ b/locallydynamic-android-lib/deps.gradle @@ -2,7 +2,7 @@ def versions = [ kotlin : '1.3.60', appcompat : '1.1.0', coroutines : '1.3.2', - androidplugin : '3.6.1', + androidplugin : '4.0.0', lifecycle : '2.1.0', mockito : '3.1.0', robolectric : '4.3.1', @@ -23,7 +23,7 @@ def versions = [ arch_core_testing : '2.1.0', play : '1.6.5', autoservice : '1.0-rc6', - locallydynamic_gradle: '0.2', + locallydynamic_gradle: '0.3', publish : '3.6.2', uiautomator : '2.2.0', ] diff --git a/locallydynamic-android-lib/gradle/wrapper/gradle-wrapper.properties b/locallydynamic-android-lib/gradle/wrapper/gradle-wrapper.properties index 0823b562..79e5578c 100644 --- a/locallydynamic-android-lib/gradle/wrapper/gradle-wrapper.properties +++ b/locallydynamic-android-lib/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip diff --git a/locallydynamic-android-lib/sample/installtimefeature/src/main/res/values/strings.xml b/locallydynamic-android-lib/sample/installtimefeature/src/main/res/values/strings.xml index 14b41d51..267a3393 100644 --- a/locallydynamic-android-lib/sample/installtimefeature/src/main/res/values/strings.xml +++ b/locallydynamic-android-lib/sample/installtimefeature/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ - Hi, I am a fragment from an install time feature + Hi, I am a fragment from an install time feature \ No newline at end of file diff --git a/locallydynamic-android-lib/sample/ondemandfeature/src/main/res/values/strings.xml b/locallydynamic-android-lib/sample/ondemandfeature/src/main/res/values/strings.xml index faece58c..cd8ba735 100644 --- a/locallydynamic-android-lib/sample/ondemandfeature/src/main/res/values/strings.xml +++ b/locallydynamic-android-lib/sample/ondemandfeature/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ - Hi, I am a fragment from an on demand feature + Hi, I am a fragment from an on demand feature \ No newline at end of file diff --git a/locallydynamic-gradle-plugin/README.md b/locallydynamic-gradle-plugin/README.md index 7ba95cd1..25ed9dc5 100644 --- a/locallydynamic-gradle-plugin/README.md +++ b/locallydynamic-gradle-plugin/README.md @@ -1,7 +1,7 @@ # locallydynamic-gradle-plugin A gradle plugin that hooks into the bundle build process of the Android Gradle Plugin and uploads produced bundles to a LocallyDynamic server.
-Compatible with AGP 3.5 and 3.6. +Compatible with AGP 3.5 above Usage --- @@ -13,7 +13,7 @@ buildscript { } } dependencies { - classpath "com.jeppeman.locallydynamic.gradle:plugin:0.2" + classpath "com.jeppeman.locallydynamic.gradle:plugin:0.3" } } @@ -29,7 +29,7 @@ buildscript { } } dependencies { - classpath "com.jeppeman.locallydynamic.gradle:plugin:0.3-SNAPSHOT" + classpath "com.jeppeman.locallydynamic.gradle:plugin:0.4-SNAPSHOT" } } @@ -97,8 +97,8 @@ buildscript { } } dependencies { - classpath "com.android.tools.build:gradle:3.6.1" // Compatible with 3.5 and above - classpath "com.jeppeman.locallydynamic.gradle:plugin:0.2" + classpath "com.android.tools.build:gradle:4.0.0" + classpath "com.jeppeman.locallydynamic.gradle:plugin:0.3" } } diff --git a/locallydynamic-gradle-plugin/deps.gradle b/locallydynamic-gradle-plugin/deps.gradle index 21be59b7..7ccfbcd4 100644 --- a/locallydynamic-gradle-plugin/deps.gradle +++ b/locallydynamic-gradle-plugin/deps.gradle @@ -1,10 +1,10 @@ def androidPluginVersion = project.hasProperty("agpVersion") ? project.properties.get("agpVersion") - : '3.6.1' + : '4.0.0' def versions = [ androidplugin : androidPluginVersion, - kotlin : '1.3.60', + kotlin : '1.3.72', versionsplugin : '0.25.0', javapoet : '1.11.1', junit : '5.5.2', @@ -12,8 +12,7 @@ def versions = [ truth : '1.1.0', mockito : '2.23.4', mockito_kotlin : '2.1.0', - locallydynamic_server: '0.2', - gradle_publish : '0.10.1' + locallydynamic_server: '0.2' ] ext.versions = versions diff --git a/locallydynamic-gradle-plugin/gradle.properties b/locallydynamic-gradle-plugin/gradle.properties index 757aaccf..f3ef16f9 100644 --- a/locallydynamic-gradle-plugin/gradle.properties +++ b/locallydynamic-gradle-plugin/gradle.properties @@ -1,5 +1,5 @@ GROUP=com.jeppeman.locallydynamic.gradle -VERSION_NAME=0.3-SNAPSHOT +VERSION_NAME=0.4-SNAPSHOT POM_DESCRIPTION=LocallyDynamic - Gradle plugin to facilitate for local dynamic delivery for Android. diff --git a/locallydynamic-gradle-plugin/plugin/build.gradle b/locallydynamic-gradle-plugin/plugin/build.gradle index 09b519c9..71ee4095 100644 --- a/locallydynamic-gradle-plugin/plugin/build.gradle +++ b/locallydynamic-gradle-plugin/plugin/build.gradle @@ -2,7 +2,7 @@ plugins { id 'java-gradle-plugin' id 'java' id 'kotlin' - id 'com.gradle.plugin-publish' version '0.10.1' + id 'com.gradle.plugin-publish' version '0.12.0' } dependencies { diff --git a/locallydynamic-gradle-plugin/plugin/src/main/java/com/jeppeman/locallydynamic/gradle/extensions/BuildType.kt b/locallydynamic-gradle-plugin/plugin/src/main/java/com/jeppeman/locallydynamic/gradle/extensions/BuildType.kt new file mode 100644 index 00000000..a1628b89 --- /dev/null +++ b/locallydynamic-gradle-plugin/plugin/src/main/java/com/jeppeman/locallydynamic/gradle/extensions/BuildType.kt @@ -0,0 +1,10 @@ +package com.jeppeman.locallydynamic.gradle.extensions + +import com.android.build.gradle.internal.dsl.BuildType +import com.jeppeman.locallydynamic.gradle.LocallyDynamicExtension +import org.gradle.api.plugins.ExtensionAware + +fun BuildType.locallyDynamic(block: LocallyDynamicExtension.() -> Unit) { + val extension = (this as ExtensionAware).extensions.getByType(LocallyDynamicExtension::class.java) + extension.apply(block) +} diff --git a/locallydynamic-studio-plugin/build.gradle b/locallydynamic-studio-plugin/build.gradle index a19ba111..c3e92b33 100644 --- a/locallydynamic-studio-plugin/build.gradle +++ b/locallydynamic-studio-plugin/build.gradle @@ -38,8 +38,7 @@ intellij { plugins 'android' type 'IC' version '193.6911.18' -// alternativeIdePath "${ANDROID_STUDIO_STABLE_PATH}" - //localPath "${ANDROID_STUDIO_PREVIEW_PATH}" // android studio 3.6 +// localPath "${System.getenv("ANDROID_STUDIO_PATH")}" } publishPlugin { @@ -77,7 +76,11 @@ patchPluginXml { //""" // 0.5 +// changeNotes """ +// Make compatible with Android Studio 4.0. +//""" + // 0.6 changeNotes """ - Make compatible with Android Studio 4.0. + Add support for kotlin build scripts (build.gradle.kts) """ } diff --git a/locallydynamic-studio-plugin/gradle.properties b/locallydynamic-studio-plugin/gradle.properties index 8f7d617a..e85eefb0 100644 --- a/locallydynamic-studio-plugin/gradle.properties +++ b/locallydynamic-studio-plugin/gradle.properties @@ -1,5 +1,5 @@ GROUP=com.jeppeman.locallydynamic.idea -VERSION_NAME=0.6-SNAPSHOT +VERSION_NAME=0.7-SNAPSHOT POM_DESCRIPTION=LocallyDynamic Server - Embeds a LocallyDynamic server into Android Studio that apps will download their splits from. diff --git a/locallydynamic-studio-plugin/src/main/kotlin/com/jeppeman/locallydynamic/idea/extensions/Module.kt b/locallydynamic-studio-plugin/src/main/kotlin/com/jeppeman/locallydynamic/idea/extensions/Module.kt index c3bfa5a6..58f4c089 100644 --- a/locallydynamic-studio-plugin/src/main/kotlin/com/jeppeman/locallydynamic/idea/extensions/Module.kt +++ b/locallydynamic-studio-plugin/src/main/kotlin/com/jeppeman/locallydynamic/idea/extensions/Module.kt @@ -1,57 +1,10 @@ package com.jeppeman.locallydynamic.idea.extensions -import com.android.tools.idea.gradle.util.GradleUtil +import com.android.tools.idea.gradle.project.facet.gradle.GradleFacet import com.intellij.openapi.module.Module -import org.jetbrains.kotlin.idea.core.util.toPsiFile -import org.jetbrains.plugins.groovy.lang.psi.GroovyFile -import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.GrListOrMap -import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrNamedArgument -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethodCall -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrLiteral -import java.util.HashMap val Module.hasLocallyDynamicEnabled: Boolean - get() { - GradleUtil.getGradleBuildFile(this)?.let { file -> - file.toPsiFile(project)?.let { psiFile -> - return when (psiFile) { - !is GroovyFile -> false - else -> psiFile.plugins.contains("com.jeppeman.locallydynamic") - } - } - } - return false - } - -val GroovyFile.plugins: List - get() = ArrayList().apply { - statements.toList().filterIsInstance() - .filter { "apply" == it.invokedExpression.text } - .forEach { methodCall -> - val values = HashMap() - methodCall.argumentList.allArguments.filterIsInstance().forEach { - values[it.labelName] = it.expression?.parseValueExpression() - } - values["plugin"]?.let { plugin -> - add(plugin.toString()) - } - } - } - -private fun GrExpression.parseValueExpression(): Any? { - return when (this) { - is GrLiteral -> value - is GrListOrMap -> { - if (isMap) return null - ArrayList().apply { - initializers.forEach { subexpression -> - subexpression.parseValueExpression()?.let { subValue -> - add(subValue) - } - } - } - } - else -> null - } -} + get() = GradleFacet.getInstance(this) + ?.gradleModuleModel + ?.gradlePlugins + ?.contains("com.jeppeman.locallydynamic.gradle.LocallyDynamicPlugin") == true