diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 166eea8..20b445e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -38,3 +38,15 @@ jobs: - name: Run local tests run: ./gradlew :kace-compiler:test + + - name: Publish To Local + run: ./gradlew publishToMavenLocal -PVERSION_NAME=0.0.0-SNAPSHOT + + - name: Set up JDK 11 + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 11 + + - name: Test AGP compatibility + run: chmod +x ./test_agp.sh && ./test_agp.sh diff --git a/gradle.properties b/gradle.properties index 760cb26..5636374 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ kotlin.code.style=official android.nonTransitiveRClass=true KOTLIN_PLUGIN_ID=com.kanyun.kace -VERSION_NAME=1.0.2 +VERSION_NAME=1.7.0-1.0.3-SNAPSHOT GROUP=com.kanyun.kace diff --git a/kace-gradle-plugin/build.gradle.kts b/kace-gradle-plugin/build.gradle.kts index 569565f..7b616fe 100644 --- a/kace-gradle-plugin/build.gradle.kts +++ b/kace-gradle-plugin/build.gradle.kts @@ -26,6 +26,7 @@ dependencies { implementation(kotlin("stdlib-jdk8")) compileOnly("com.android.tools.build:gradle:4.2.0") + compileOnly("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.0") implementation("org.jetbrains.kotlin:kotlin-compiler-embeddable") } diff --git a/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/KaceGradlePlugin.kt b/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/KaceGradlePlugin.kt index f175a5b..18872a4 100644 --- a/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/KaceGradlePlugin.kt +++ b/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/KaceGradlePlugin.kt @@ -23,12 +23,12 @@ import com.android.build.gradle.api.BaseVariant import com.kanyun.kace.BuildConfig import com.kanyun.kace.gradle.utils.addCustomVariantLayoutDir import com.kanyun.kace.gradle.utils.addSourceSetLayoutDir -import com.kanyun.kace.gradle.utils.configSourceSetDir import com.kanyun.kace.gradle.utils.getApplicationPackage import com.kanyun.kace.gradle.utils.withAllPlugins import java.io.File import org.gradle.api.Plugin import org.gradle.api.Project +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile class KaceGradlePlugin : Plugin { override fun apply(target: Project) { @@ -57,9 +57,9 @@ class KaceGradlePlugin : Plugin { val compileKotlin = target.tasks.getByName("compile${variantCapitalizeName}Kotlin") val sourceOutputDir = File(target.buildDir, "generated/source/kace/${variant.dirName}") - val sourceSet = extension.sourceSets.getByName(variant.name) - configSourceSetDir(sourceSet, sourceOutputDir, target.logger) - + val relativePath = + target.projectDir.toPath().relativize(sourceOutputDir.toPath()).toString() + (compileKotlin as KotlinCompile).source(relativePath) val task = target.tasks.register( "generate${variantCapitalizeName}KaceCode", KaceGenerateTask::class.java ) { task -> diff --git a/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/utils/PluginUtils.kt b/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/utils/PluginUtils.kt index ff50c75..50d00ea 100644 --- a/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/utils/PluginUtils.kt +++ b/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/utils/PluginUtils.kt @@ -16,16 +16,12 @@ package com.kanyun.kace.gradle.utils -import com.android.build.api.dsl.AndroidSourceDirectorySet import com.android.build.gradle.BaseExtension -import com.android.build.gradle.api.AndroidSourceSet import com.kanyun.kace.gradle.LayoutDir import java.io.File import java.lang.reflect.Field import org.gradle.api.Plugin import org.gradle.api.Project -import org.gradle.api.logging.LogLevel -import org.gradle.api.logging.Logger internal fun Project.withAllPlugins(vararg pluginIds: String, action: (List>) -> Unit) { return withAllPlugins(pluginIds.toList(), action) @@ -118,18 +114,3 @@ private fun getField(clazz: Class<*>, name: String): Field { } } } - -internal fun configSourceSetDir( - sourceSet: AndroidSourceSet, - sourceOutputDir: File, - logger: Logger -) { - try { - val kotlinSourceSet = getFieldValue(sourceSet, "kotlin") as? AndroidSourceDirectorySet - kotlinSourceSet?.srcDir(sourceOutputDir) - return - } catch (e: Exception) { - logger.log(LogLevel.INFO, "sourceSet has no kotlin field") - } - sourceSet.java.srcDir(sourceOutputDir) -} diff --git a/kace-runtime/src/main/java/com/kanyun/kace/AndroidExtensionsComponent.kt b/kace-runtime/src/main/java/com/kanyun/kace/AndroidExtensionsComponent.kt index b260956..b5bb4c8 100644 --- a/kace-runtime/src/main/java/com/kanyun/kace/AndroidExtensionsComponent.kt +++ b/kace-runtime/src/main/java/com/kanyun/kace/AndroidExtensionsComponent.kt @@ -19,7 +19,6 @@ package com.kanyun.kace import android.app.Activity import android.view.View import androidx.fragment.app.Fragment -import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner sealed interface AndroidExtensionsComponent { @@ -44,7 +43,7 @@ class AndroidExtensionsActivity( init { if (activity is LifecycleOwner) { - activity.lifecycle.addObserver(object : DefaultLifecycleObserver { + activity.lifecycle.addObserver(object : KaceLifecycleObserver() { override fun onDestroy(owner: LifecycleOwner) { super.onDestroy(owner) onDestroy() @@ -65,7 +64,7 @@ class AndroidExtensionsFragment( init { fragment.viewLifecycleOwnerLiveData.observe(fragment) { - it?.lifecycle?.addObserver(object : DefaultLifecycleObserver { + it?.lifecycle?.addObserver(object : KaceLifecycleObserver() { override fun onDestroy(owner: LifecycleOwner) { super.onDestroy(owner) onDestroy() diff --git a/kace-runtime/src/main/java/com/kanyun/kace/KaceLifecycleObserver.kt b/kace-runtime/src/main/java/com/kanyun/kace/KaceLifecycleObserver.kt new file mode 100644 index 0000000..14f52c2 --- /dev/null +++ b/kace-runtime/src/main/java/com/kanyun/kace/KaceLifecycleObserver.kt @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2022 KanYun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kanyun.kace + +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner + +internal open class KaceLifecycleObserver : DefaultLifecycleObserver { + override fun onCreate(owner: LifecycleOwner) {} + + override fun onStart(owner: LifecycleOwner) {} + + override fun onResume(owner: LifecycleOwner) {} + + override fun onPause(owner: LifecycleOwner) {} + + override fun onStop(owner: LifecycleOwner) {} + + override fun onDestroy(owner: LifecycleOwner) {} +} diff --git a/kace-sample/build.gradle.kts b/kace-sample/build.gradle.kts index 655e545..b107dfa 100644 --- a/kace-sample/build.gradle.kts +++ b/kace-sample/build.gradle.kts @@ -1,9 +1,9 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id("com.android.application") version "4.2.0" apply false - id("com.android.library") version "4.2.0" apply false + id("com.android.application") apply false + id("com.android.library") apply false id("org.jetbrains.kotlin.android") version "1.7.10" apply false - id("com.kanyun.kace") apply false + id("com.kanyun.kace") version "0.0.0-SNAPSHOT" apply false } tasks.register(name = "clean") { @@ -13,8 +13,10 @@ tasks.register(name = "clean") { allprojects { repositories { + if (extra["testAgp"] == "true") { + mavenLocal() + } google() mavenCentral() - mavenLocal() } } \ No newline at end of file diff --git a/kace-sample/gradle.properties b/kace-sample/gradle.properties index 3e869da..3fac72c 100644 --- a/kace-sample/gradle.properties +++ b/kace-sample/gradle.properties @@ -26,3 +26,6 @@ vgoTargetSdkVersion = 26 kotlin_version = 1.7.0 kotlin_coroutine_version = 1.6.3 + +testAgp=false +agpVersion=4.2.0 \ No newline at end of file diff --git a/kace-sample/settings.gradle.kts b/kace-sample/settings.gradle.kts index 136c47d..6257561 100644 --- a/kace-sample/settings.gradle.kts +++ b/kace-sample/settings.gradle.kts @@ -1,9 +1,24 @@ pluginManagement { + val testAgp: String by extra + val agpVersion: String by extra + repositories { + if (testAgp == "true") { + mavenLocal() + } mavenCentral() gradlePluginPortal() google() } + + resolutionStrategy { + eachPlugin { + val requestedId = requested.id.id + if (requestedId == "com.android.application" || requestedId == "com.android.library") { + useVersion(agpVersion) + } + } + } } @@ -11,5 +26,7 @@ include(":sample-lib") include(":app") rootProject.name = "kace-sample" - -includeBuild("../../Kace") \ No newline at end of file +val testAgp: String by extra +if (testAgp != "true") { + includeBuild("../../Kace") +} \ No newline at end of file diff --git a/test_agp.sh b/test_agp.sh new file mode 100755 index 0000000..12c15ab --- /dev/null +++ b/test_agp.sh @@ -0,0 +1,29 @@ +function setGradleVersion() { + local distributionBase=https\://services.gradle.org/distributions/ + + local GradleVersion=$1 + echo ./gradlew -PSetGradleVersion=true wrapper --gradle-distribution-url ${distributionBase}gradle-$GradleVersion-bin.zip + ./gradlew -PSetGradleVersion=true wrapper --gradle-distribution-url ${distributionBase}gradle-$GradleVersion-bin.zip +} + +function testUnderAGPVersion() { + local TestAGPVersion=$1 + ./gradlew clean + + echo ./gradlew :app:assembleMinApi21DemoDebug -PtestAgp=true -PagpVersion=$TestAGPVersion + ./gradlew :app:assembleMinApi21DemoDebug -PtestAgp=true -PagpVersion=$TestAGPVersion +} + +cd kace-sample + +setGradleVersion 6.7.1 +testUnderAGPVersion 4.2.0 + +setGradleVersion 7.3.3 +testUnderAGPVersion 7.2.0 + +setGradleVersion 7.4 +testUnderAGPVersion 7.3.0 + +setGradleVersion 7.5 +testUnderAGPVersion 7.4.0