Skip to content

Commit 4463234

Browse files
committed
适配gradle9+
1 parent 7ec5134 commit 4463234

16 files changed

Lines changed: 125 additions & 107 deletions

File tree

android-aop-apt/src/main/java/com/flyjingfish/android_aop_ksp/AndroidAopSymbolProcessor.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class AndroidAopSymbolProcessor(private val codeGenerator: CodeGenerator,
115115
} else if (targetValue is ArrayList<*>) {
116116
for (s in targetValue) {
117117
if (symbol.origin == Origin.JAVA) {
118-
if ("METHOD" != s.toString()) {
118+
if (!s.toString().contains("METHOD")) {
119119
if (targetValue.size > 1) {
120120
throw IllegalArgumentException("注意: $symbol 只可以设置 @Target 为 METHOD 这一种")
121121
} else {
@@ -161,7 +161,7 @@ class AndroidAopSymbolProcessor(private val codeGenerator: CodeGenerator,
161161
val retentionMap: MutableMap<String, Any?>? = annotationMap["@Retention"]
162162
if (retentionMap != null) {
163163
val retention = retentionMap["value"]?.toString()
164-
if ((symbol.origin == Origin.JAVA && "RUNTIME" != retention)
164+
if ((symbol.origin == Origin.JAVA && retention?.contains("RUNTIME") != true)
165165
|| (symbol.origin == Origin.KOTLIN && retention?.contains("AnnotationRetention.RUNTIME") != true)) {
166166
throw IllegalArgumentException("注意:请给 $symbol 设置 @Retention 为 RUNTIME ")
167167
}

android-aop-core/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
plugins {
22
id 'com.android.library'
3-
id 'org.jetbrains.kotlin.android'
43
}
54
apply from: "$rootDir/gradle/android_base.gradle"
65
apply from: "$rootDir/gradle/android_publish.gradle"

android-aop-extra/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
plugins {
22
id 'com.android.library'
3-
id 'org.jetbrains.kotlin.android'
43
id 'com.google.devtools.ksp'
54
}
65
apply from: "$rootDir/gradle/android_base.gradle"
@@ -10,6 +9,7 @@ android {
109
}
1110

1211
dependencies {
12+
compileOnly libs.androidx.lifecycle.common.jvm
1313
implementation project(path: ':android-aop-annotation')
1414
implementation project(path: ':android-aop-core')
1515
ksp project(':android-aop-apt')

android-aop-extra/src/main/java/com/flyjingfish/android_aop_core/cut/OnLifecycleCut.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
package com.flyjingfish.android_aop_core.cut
22

33
import android.os.Looper
4-
import androidx.fragment.app.Fragment
54
import androidx.lifecycle.Lifecycle
65
import androidx.lifecycle.LifecycleEventObserver
76
import androidx.lifecycle.LifecycleOwner
87
import com.flyjingfish.android_aop_annotation.ProceedJoinPoint
98
import com.flyjingfish.android_aop_annotation.ProceedJoinPointSuspend
10-
import com.flyjingfish.android_aop_annotation.ProceedReturn
11-
import com.flyjingfish.android_aop_annotation.base.BasePointCut
129
import com.flyjingfish.android_aop_annotation.base.BasePointCutSuspend
1310
import com.flyjingfish.android_aop_core.annotations.OnLifecycle
1411
import com.flyjingfish.android_aop_core.utils.AppExecutors

android-aop-plugin/src/main/kotlin/com/flyjingfish/android_aop_plugin/plugin/CompilePlugin.kt

Lines changed: 23 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ package com.flyjingfish.android_aop_plugin.plugin
22

33
import com.android.build.api.variant.AndroidComponentsExtension
44
import com.android.build.api.variant.Variant
5-
import com.android.build.gradle.AppExtension
65
import com.android.build.gradle.AppPlugin
76
import com.android.build.gradle.BaseExtension
87
import com.android.build.gradle.DynamicFeaturePlugin
9-
import com.android.build.gradle.LibraryExtension
108
import com.android.build.gradle.LibraryPlugin
119
import com.flyjingfish.android_aop_plugin.config.AndroidAopConfig
1210
import com.flyjingfish.android_aop_plugin.scanner_visitor.SuspendReturnScanner
@@ -23,15 +21,14 @@ import com.flyjingfish.android_aop_plugin.utils.WovenInfoUtils
2321
import com.flyjingfish.android_aop_plugin.utils.adapterOSPath
2422
import com.flyjingfish.android_aop_plugin.utils.getBuildDirectory
2523
import com.flyjingfish.android_aop_plugin.utils.getRelativePath
26-
import org.codehaus.groovy.runtime.DefaultGroovyMethods
2724
import org.gradle.api.Project
2825
import org.gradle.api.execution.TaskExecutionGraph
2926
import org.gradle.api.execution.TaskExecutionGraphListener
3027
import org.gradle.api.plugins.JavaPluginExtension
3128
import org.gradle.api.tasks.PathSensitivity
3229
import org.gradle.api.tasks.compile.AbstractCompile
3330
import org.gradle.api.tasks.compile.JavaCompile
34-
import org.gradle.configurationcache.extensions.capitalized
31+
import org.gradle.internal.extensions.stdlib.capitalized
3532
import org.jetbrains.kotlin.gradle.tasks.KotlinCompileTool
3633
import java.io.File
3734

@@ -192,25 +189,15 @@ class CompilePlugin(private val fromRootSet:Boolean): BasePlugin() {
192189
}
193190

194191

195-
val android = androidObject as BaseExtension
196-
val variants = if (isApp or isDynamicLibrary) {
197-
(android as AppExtension).applicationVariants
198-
} else {
199-
(android as LibraryExtension).libraryVariants
200-
}
201-
variants.all { variant ->
202-
val javaCompile: AbstractCompile =
203-
if (DefaultGroovyMethods.hasProperty(variant, "javaCompileProvider") != null) {
204-
//gradle 4.10.1 +
205-
variant.javaCompileProvider.get()
206-
} else if (DefaultGroovyMethods.hasProperty(variant, "javaCompiler") != null) {
207-
variant.javaCompiler as AbstractCompile
208-
} else {
209-
variant.javaCompile as AbstractCompile
210-
}
211-
val variantName = variant.name
212-
val buildTypeName = variant.buildType.name
213-
if (!isIncremental() && javaCompile is JavaCompile && isDebugMode(buildTypeName,variantName)){
192+
project.tasks.withType(JavaCompile::class.java).configureEach { javaCompile ->
193+
val taskName = javaCompile.name
194+
195+
val variantName = taskName
196+
.removePrefix("compile")
197+
.removeSuffix("JavaWithJavac")
198+
.replaceFirstChar { it.lowercase() }
199+
val buildTypeName = null
200+
if (!isIncremental() && isDebugMode(buildTypeName,variantName)){
214201
javaCompile.options.isIncremental = false
215202
}
216203
if (isApp && isIncremental()){
@@ -232,54 +219,27 @@ class CompilePlugin(private val fromRootSet:Boolean): BasePlugin() {
232219
if (hasBuildConfig()){
233220
val androidComponents = project.extensions.getByType(AndroidComponentsExtension::class.java)
234221
val variantList: ArrayList<Variant> = ArrayList()
222+
val android = project.extensions.getByName("android")
235223
androidComponents.onVariants { variant ->
236224
variantList.add(variant)
237225
val variantName = variant.name
238226
val path = Utils.aopDebugModeJavaDir(variantName)
239227
val debugModeDir = File("${project.getBuildDirectory().absolutePath}$path")
240228
val variantNameCapitalized = variantName.capitalized()
241-
var packageName = if (android.namespace == null || android.namespace == "null"){
242-
android.defaultConfig.applicationId.toString()
243-
}else{
244-
android.namespace.toString()
245-
}
246-
247-
if (packageName == "null"){
248-
for (sourceSet in android.sourceSets) {
249-
if (sourceSet.name == "main"){
250-
val pkName = getPackageName(sourceSet.java.srcDirs,debugModeDir)
251-
if (pkName != null){
252-
packageName = pkName
253-
break
254-
}
255-
}
229+
var packageName = when (android) {
230+
is com.android.build.api.dsl.ApplicationExtension -> {
231+
(android.namespace ?: android.defaultConfig.applicationId)?:""
256232
}
257-
}
258-
259-
if (packageName == "null"){
260-
for (sourceSet in android.sourceSets) {
261-
if (sourceSet.name == "release"){
262-
val pkName = getPackageName(sourceSet.java.srcDirs,debugModeDir)
263-
if (pkName != null){
264-
packageName = pkName
265-
break
266-
}
267-
}
233+
is com.android.build.api.dsl.LibraryExtension -> {
234+
android.namespace ?:""
268235
}
269-
}
270-
271-
if (packageName == "null"){
272-
for (sourceSet in android.sourceSets) {
273-
if (sourceSet.name == "debug"){
274-
val pkName = getPackageName(sourceSet.java.srcDirs,debugModeDir)
275-
if (pkName != null){
276-
packageName = pkName
277-
break
278-
}
279-
}
236+
is BaseExtension -> {
237+
(android.namespace ?: android.defaultConfig.applicationId)?:""
280238
}
239+
else -> ""
281240
}
282-
if (packageName.isEmpty()){
241+
242+
if (packageName.isEmpty() || packageName == "null"){
283243
packageName = project.name.replace("-","_")
284244
}
285245
val buildTypeName: String? = variant.buildType
@@ -343,7 +303,7 @@ class CompilePlugin(private val fromRootSet:Boolean): BasePlugin() {
343303
return null
344304
}
345305

346-
private fun doAopTask(project: RuntimeProject,isApp:Boolean, variantName: String, buildTypeName: String,
306+
private fun doAopTask(project: RuntimeProject,isApp:Boolean, variantName: String, buildTypeName: String?,
347307
javaCompile:AbstractCompile, kotlinDefaultPath: File, isAndroidModule : Boolean = true, isDynamic : Boolean = false){
348308
val cacheDir = if (isAndroidModule) {
349309
kotlinCompileFilePathMap[project.buildDir.absolutePath+"@"+"compile${variantName.capitalized()}Kotlin"]
@@ -361,7 +321,7 @@ class CompilePlugin(private val fromRootSet:Boolean): BasePlugin() {
361321
if (AndroidAopConfig.enabled && debugMode){
362322
ClassFileUtils.debugMode = true
363323
val hint = "AndroidAOP Tip: You are using debugMode mode"
364-
if (buildTypeName == "release"){
324+
if (!buildTypeName.isNullOrEmpty() && buildTypeName.contains("release")){
365325
logger.error(hint)
366326
}else{
367327
logger.warn(hint)

android-aop-plugin/src/main/kotlin/com/flyjingfish/android_aop_plugin/plugin/TransformPlugin.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ import com.android.build.gradle.internal.tasks.DexArchiveBuilderTask
77
import com.flyjingfish.android_aop_plugin.config.AndroidAopConfig
88
import com.flyjingfish.android_aop_plugin.tasks.AssembleAndroidAopTask
99
import com.flyjingfish.android_aop_plugin.utils.AppClasses
10-
import com.flyjingfish.android_aop_plugin.utils.InitConfig
1110
import com.flyjingfish.android_aop_plugin.utils.RuntimeProject
12-
import io.github.flyjingfish.fast_transform.tasks.DefaultTransformTask
1311
import io.github.flyjingfish.fast_transform.toTransformAll
1412
import org.gradle.api.Project
1513
import org.gradle.api.Task

android-aop-plugin/src/main/kotlin/com/flyjingfish/android_aop_plugin/utils/RuntimeProject.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.flyjingfish.android_aop_plugin.utils
22

3+
import com.android.build.api.variant.AndroidComponentsExtension
34
import com.android.build.gradle.BaseExtension
45
import org.gradle.api.Project
6+
import org.gradle.api.file.RegularFile
57
import java.io.File
68
import java.io.Serializable
79

@@ -49,7 +51,19 @@ data class RuntimeProject(
4951
if (android != null){
5052
runtimeProject.androidConfig.setBootClasspath(android.bootClasspath)
5153
}
52-
} catch (_: Throwable) {
54+
} catch (e: Throwable) {
55+
try {
56+
val androidComponents = project.extensions.getByType(AndroidComponentsExtension::class.java)
57+
val sdkComponents = androidComponents::sdkComponents.get()
58+
// println("sdkDirectory: $sdkDirectory")
59+
// val sdkDirectory: Directory? = sdkComponents.sdkDirectory.get()
60+
val bootClasspath: List<RegularFile> = sdkComponents.bootClasspath.get()
61+
62+
// bootClasspath.forEach { println("bootClasspath: ${it.asFile.absolutePath}") }
63+
runtimeProject.androidConfig.setBootClasspath(bootClasspath.map { it.asFile })
64+
} catch (e: Exception) {
65+
// e.printStackTrace()
66+
}
5367
}
5468
}
5569
}

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
plugins {
22
id 'com.android.application'
3-
id 'org.jetbrains.kotlin.android'
3+
// id 'org.jetbrains.kotlin.android'
44
id 'com.google.devtools.ksp'
55
id 'kotlinx-serialization'
66
id 'easy.register'

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ buildscript {
99
plugins {
1010
id 'com.android.application' version '9.1.1' apply false
1111
id 'com.android.library' version '9.1.1' apply false
12-
id 'org.jetbrains.kotlin.android' version '2.2.10' apply false
12+
id 'org.jetbrains.kotlin.android' version '2.2.20' apply false
1313
id 'org.jetbrains.kotlin.jvm' version '1.9.23' apply false
1414
//https://github.com/vanniktech/gradle-maven-publish-plugin
1515
id "com.vanniktech.maven.publish" version "0.33.0" apply false
16-
id 'com.google.devtools.ksp' version '2.3.2' apply false
16+
id 'com.google.devtools.ksp' version '2.3.6' apply false
1717
id 'io.github.flyjingfish.easyregister' version '1.1.0' apply false
1818
id 'com.gradle.plugin-publish' version '1.2.1' apply false
1919
alias(libs.plugins.android.dynamic.feature) apply false

dynamicfeature/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
plugins {
22
alias(libs.plugins.android.dynamic.feature)
3-
alias(libs.plugins.kotlin.android)
43
id 'android.aop'
54
}
65
apply from: "$rootDir/gradle/android_base.gradle"
@@ -40,4 +39,5 @@ android {
4039
dependencies {
4140
implementation project(":app")
4241
implementation project(":test-lib")
42+
implementation libs.androidx.core.ktx
4343
}

0 commit comments

Comments
 (0)