Skip to content

Commit

Permalink
MOD: compatible with agp7.3
Browse files Browse the repository at this point in the history
  • Loading branch information
RicardoJiang committed Nov 23, 2022
1 parent e8bf019 commit 0a76f8a
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 6 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath("com.kanyun.kace:kace-gradle-plugin:1.0.0")
classpath("com.kanyun.kace:kace-gradle-plugin:$latest_version")
}
}

Expand All @@ -33,7 +33,7 @@ pluginManagement {
mavenCentral()
}
plugins {
id("com.kanyun.kace") version "1.0.0" apply false
id("com.kanyun.kace") version "$latest_version" apply false
}
}
````
Expand Down
4 changes: 2 additions & 2 deletions README_zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath("com.kanyun.kace:kace-gradle-plugin:1.0.0")
classpath("com.kanyun.kace:kace-gradle-plugin:$latest_version")
}
}

Expand All @@ -33,7 +33,7 @@ pluginManagement {
mavenCentral()
}
plugins {
id("com.kanyun.kace") version "1.0.0" apply false
id("com.kanyun.kace") version "$latest_version" apply false
}
}
```
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ kotlin.code.style=official
android.nonTransitiveRClass=true

KOTLIN_PLUGIN_ID=com.kanyun.kace
VERSION_NAME=1.0.1
VERSION_NAME=1.0.2-SNAPSHOT

GROUP=com.kanyun.kace

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ 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 org.gradle.api.Plugin
Expand Down Expand Up @@ -56,7 +57,8 @@ class KaceGradlePlugin : Plugin<Project> {
val compileKotlin = target.tasks.getByName("compile${variantCapitalizeName}Kotlin")
val sourceOutputDir =
File(target.buildDir, "generated/source/kace/${variant.dirName}")
extension.sourceSets.getByName(variant.name).java.srcDir(sourceOutputDir)
val sourceSet = extension.sourceSets.getByName(variant.name)
configSourceSetDir(sourceSet, sourceOutputDir, target.logger)

val task = target.tasks.register(
"generate${variantCapitalizeName}KaceCode", KaceGenerateTask::class.java
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,16 @@

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 org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.logging.LogLevel
import org.gradle.api.logging.Logger
import java.io.File
import java.lang.reflect.Field

internal fun Project.withAllPlugins(vararg pluginIds: String, action: (List<Plugin<*>>) -> Unit) {
return withAllPlugins(pluginIds.toList(), action)
Expand Down Expand Up @@ -91,4 +96,40 @@ internal fun addCustomVariantLayoutDir(
}
}
}
}

@Throws(NoSuchFieldException::class, IllegalAccessException::class)
fun getFieldValue(instance: Any, name: String): Any? {
val clazz: Class<*> = instance.javaClass
val field = getField(clazz, name)
field.isAccessible = true
return field[instance]
}

@Throws(NoSuchFieldException::class)
private fun getField(clazz: Class<*>, name: String): Field {
return try {
clazz.getDeclaredField(name)
} catch (e: NoSuchFieldException) {
if (clazz.superclass != null) {
getField(clazz.superclass, name)
} else {
throw e
}
}
}

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)
}

0 comments on commit 0a76f8a

Please sign in to comment.